日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用javascript制作一個(gè)網(wǎng)頁端3D貪吃蛇游戲(附源碼)

圖撲-數(shù)字孿生 ? 來源:物聯(lián)網(wǎng)袋鼠 ? 作者:物聯(lián)網(wǎng)袋鼠 ? 2023-09-01 12:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

3D 網(wǎng)頁版貪吃蛇游戲!下面來具體講一下如何實(shí)現(xiàn)。

該游戲使用 Hightopo 的 SDK 制作,總共 100 多行代碼,沒有 WebG L基礎(chǔ)的同學(xué)們也可很快掌握。

場(chǎng)景初始化

首先,我們對(duì)頁面進(jìn)行初始化,包括初始化3D場(chǎng)景,設(shè)置地面網(wǎng)格,以及開啟事件監(jiān)聽等。主要代碼及注釋如下:

w = 40; // 網(wǎng)格間距
m = 20; // 網(wǎng)格行列數(shù)
d = w * m / 2;
food = null;
dm = new ht.DataModel();
g3d = new ht.graph3d.Graph3dView(dm); // 初始化一個(gè)3d場(chǎng)景
// 配置網(wǎng)格
g3d.setGridVisible(true);
g3d.setGridColor('#29B098');
g3d.setGridSize(m);
g3d.setGridGap(w);
// 將3D場(chǎng)景添加到body下面
view = g3d.getView();
view.className = 'main';
document.body.appendChild(view);
// 開啟事件監(jiān)聽
window.addEventListener('resize', function (e) { g3d.invalidate(); }, false);
g3d.sm().setSelectionMode('none');
view.addEventListener(ht.Default.isTouchable ? 'touchstart' : 'mousedown', function(e){
if(isRunning){
var p = g3d.getHitPosition(e); // 獲取當(dāng)前鼠標(biāo)點(diǎn)擊點(diǎn)在3D場(chǎng)景中的位置
// 根據(jù)點(diǎn)擊點(diǎn)x,z軸坐標(biāo),計(jì)算貪吃蛇前進(jìn)方向
if(Math.abs(p[0]) < d && Math.abs(p[2]) < d){
if(direction === 'up' || direction === 'down'){
direction = p[0] > snake[0].p3()[0] ? 'right' : 'left';
}
else if(direction === 'left' || direction === 'right'){
direction = p[2] > snake[0].p3()[2] ? 'down' : 'up';
}
}
}else if(ht.Default.isDoubleClick(e)){
start(); // 雙擊啟動(dòng)游戲
}
}, false);
start();
setInterval(function(){ if(isRunning){ isRunning = next(); } }, 200); // 每間隔200ms貪吃蛇往前走一步

創(chuàng)建食物

貪吃蛇每次吃完一個(gè)食物,其身體就會(huì)增長(zhǎng)一段。此時(shí)需要?jiǎng)?chuàng)建新的食物并隨機(jī)放到一個(gè)新的位置。創(chuàng)建食物時(shí),其位置不能與上一個(gè)位置重合,也不能與當(dāng)前貪吃蛇身體重復(fù)。

/**
* 創(chuàng)建食物,并擺放到隨機(jī)位置。
* 食物不能放到貪吃蛇身上,也不能放到上一個(gè)食物的位置
*
*/
function createFood(){
var x = getRandom(), y = getRandom();
// 確保新創(chuàng)建的食物不與貪吃蛇重疊,也不與上一個(gè)食物的位置重疊
while(touchFood(x, y) || touchSnake(x, y)){ x = getRandom(); y = getRandom(); }
if(food) dm.remove(food);
food = createNode(x, y);
food.s({'shape3d': 'sphere', 'shape3d.color': 'red'});
}
/**
* x, y是否與snake身體重疊
*
* @param {*} x
* @param {*} y
* @return {*}
*/
function touchSnake(x, y){
for(var i=0; i

創(chuàng)建貪吃蛇及四周圍墻

在第一步初始化時(shí),我們?cè)O(shè)置了網(wǎng)格大小及間距。這樣也就確定了整個(gè)網(wǎng)格的長(zhǎng)寬以及貪吃蛇每個(gè)塊的大小。在這一步,我們?yōu)榫W(wǎng)格增加邊界,同時(shí)生成貪吃蛇。

/**
* 清空?qǐng)鼍?。?chuàng)建貪吃蛇及四周圍墻。
*
*/
function start(){
dm.clear(); snake = []; score = 0; direction = 'up'; isRunning = true;
// 四周圍墻
shape = new ht.Shape();
shape.setPoints(new ht.List([
{x: -d, y: d},
{x: d, y: d},
{x: d, y: -d},
{x: -d, y: -d},
{x: -d, y: d}
]));
shape.setThickness(4);
shape.setTall(w);
shape.setElevation(w/2);
shape.s({'all.color': 'rgba(20, 120, 120, 0.5)', 'all.transparent': true, 'all.reverse.cull': true});
dm.add(shape);
// 創(chuàng)建貪吃蛇的身體
for(var i=0; i

處理貪吃蛇行走邏輯

有了貪吃蛇和食物后,下一步就是處理貪吃蛇行走邏輯。包括:

* 1. 檢測(cè)到達(dá)邊界或接觸自己身體,則游戲結(jié)束

* 2. 如果吃到食物,則身體增加一段

* 3. 否則,繼續(xù)往前走

/**

* 根據(jù)direction計(jì)算下一個(gè)位置。同時(shí):

* 1. 檢測(cè)到達(dá)邊界或接觸自己身體,則游戲結(jié)束

* 2. 如果吃到食物,則身體增加一段

* 3. 繼續(xù)往前走

*
* @return {*}
*/
function next(){
var node = snake[0], x = node.a('x'), y = node.a('y');
if(direction === 'up') y--;
if(direction === 'down') y++;
if(direction === 'left') x--;
if(direction === 'right') x++;
if(x < 0 || x >= m || y < 0 || y >= m || touchSnake(x, y)){ return false; }
if(touchFood(x, y)){
score++;
snake.splice(0, 0, createNode(x, y));
createFood();
}else{
snake.splice(0, 0, createNode(x, y));
dm.remove(snake.pop());
}
return true;
}

到這里,整個(gè)貪吃蛇游戲就完成了。雙擊場(chǎng)景即可啟動(dòng)游戲。點(diǎn)擊場(chǎng)景可改變貪吃蛇運(yùn)動(dòng)方向。


審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 3D
    3D
    +關(guān)注

    關(guān)注

    9

    文章

    3024

    瀏覽量

    115641
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    3012

    瀏覽量

    116882
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    689

    瀏覽量

    31525
  • javascript
    +關(guān)注

    關(guān)注

    0

    文章

    526

    瀏覽量

    56549
  • javascript編程
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    1988
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    使用MoonBit和Raylib構(gòu)建原生移動(dòng)游戲

    當(dāng)你想做一個(gè)簡(jiǎn)單的手機(jī)游戲,比如 Flappy Bird、2048、貪吃蛇——你的第反應(yīng)可能是打開 Unity 或者 Godot。但你有沒有想過:對(duì)于
    的頭像 發(fā)表于 03-14 11:21 ?853次閱讀
    使用MoonBit和Raylib構(gòu)建原生移動(dòng)<b class='flag-5'>端</b><b class='flag-5'>游戲</b>

    常見3D打印材料介紹及應(yīng)用場(chǎng)景分析

    3D打印材料種類豐富,不同材料性能差異明顯。本文介紹PLA、ABS、PETG等常見3D打印材料的特點(diǎn)與應(yīng)用場(chǎng)景,幫助讀者了解3D打印用什么材料更合適,為選材提供基礎(chǔ)參考。
    的頭像 發(fā)表于 12-29 14:52 ?960次閱讀
    常見<b class='flag-5'>3D</b>打印材料介紹及應(yīng)用場(chǎng)景分析

    探索TLE493D-P3XX-MS2GO 3D 2Go套件:開啟3D磁傳感器評(píng)估之旅

    )的TLE493D-P3XX-MS2GO 3D 2Go套件為我們提供了個(gè)便捷、高效的解決方案。今天,我們就來深入了解下這個(gè)套件,看看它能
    的頭像 發(fā)表于 12-18 17:15 ?1367次閱讀

    技術(shù)解析:超聲切割在3D打印后處理與手工制作中的應(yīng)用

    對(duì)于許多3D打印愛好者和手工制作者來說,模型支撐去除或材料切割是創(chuàng)作中既關(guān)鍵又令人頭疼的環(huán)節(jié)。使用美工刀容易留下劃痕,而傳統(tǒng)切割方式可能導(dǎo)致材料邊緣發(fā)黑或產(chǎn)生毛邊。種基于高頻振動(dòng)原理的切割技術(shù),為
    的頭像 發(fā)表于 12-17 16:45 ?698次閱讀
    技術(shù)解析:超聲切割在<b class='flag-5'>3D</b>打印后處理與手工<b class='flag-5'>制作</b>中的應(yīng)用

    iDS iToF Nion 3D相機(jī),開啟高性價(jià)比3D視覺新紀(jì)元!

    、友思特新品 友思特 iDS uEye Nion iTof 3D相機(jī)將 120 萬像素的卓越空間分辨率與可靠的深度精度相結(jié)合—即使在極具挑戰(zhàn)性的環(huán)境中也能確保獲取精細(xì)的 3D 數(shù)據(jù)。 其外殼達(dá)到
    的頭像 發(fā)表于 12-15 14:59 ?598次閱讀
    iDS iToF Nion <b class='flag-5'>3D</b>相機(jī),開啟高性價(jià)比<b class='flag-5'>3D</b>視覺新紀(jì)元!

    微納尺度的神筆——雙光子聚合3D打印 #微納3D打印

    3D打印
    楊明遠(yuǎn)
    發(fā)布于 :2025年10月25日 13:09:29

    技術(shù)資訊 I 圖文詳解 Allegro X PCB Designer 中的 3D 模型映射

    本文要點(diǎn)面對(duì)市面上的切要將PCB板放進(jìn)個(gè)盒子里的產(chǎn)品的設(shè)計(jì)都離不開3D模型映射這個(gè)功能,3D協(xié)同設(shè)計(jì)保證了產(chǎn)品的超薄化、高集成度的生命線
    的頭像 發(fā)表于 10-17 16:16 ?2035次閱讀
    技術(shù)資訊 I 圖文詳解 Allegro X PCB Designer 中的 <b class='flag-5'>3D</b> 模型映射

    玩轉(zhuǎn) KiCad 3D模型的使用

    時(shí)間都在與 2D 的焊盤、走線和絲印打交道。但個(gè)完整的產(chǎn)品,終究是要走向物理世界的。元器件的高度、接插件的朝向、與外殼的配合,這些都是 2D 視圖難以表達(dá)的。 幸運(yùn)的是,KiCad
    的頭像 發(fā)表于 09-16 19:21 ?1.2w次閱讀
    玩轉(zhuǎn) KiCad <b class='flag-5'>3D</b>模型的使用

    季豐電子邀您相約2025國(guó)際3D視覺感知與應(yīng)用大會(huì)

    9月20日 - 21日,國(guó)際3D視覺感知與應(yīng)用大會(huì)將在蘇州太湖國(guó)際會(huì)議中心盛大啟幕,大會(huì)議題涵蓋3D成像與測(cè)量、3D視覺、3D顯示、3D應(yīng)用
    的頭像 發(fā)表于 09-08 15:03 ?1224次閱讀

    AD 3D封裝庫(kù)資料

    ?AD ?PCB 3D封裝
    發(fā)表于 08-27 16:24 ?8次下載

    3D打印能用哪些材質(zhì)?

    3D打印的材質(zhì)有哪些?不同材料決定了打印效果、強(qiáng)度、用途乃至安全性,本文將介紹目前主流的3D打印材質(zhì),幫助你找到最適合自己需求的材料。
    的頭像 發(fā)表于 07-28 10:58 ?4479次閱讀
    <b class='flag-5'>3D</b>打印能用哪些材質(zhì)?

    英倫科技10.1英寸裸眼3D數(shù)碼相框升級(jí)了,玩轉(zhuǎn)AI文生圖太cool了!

    此次升級(jí)將AI內(nèi)容生成與裸眼3D顯示深度結(jié)合,解決了傳統(tǒng)3D內(nèi)容制作成本高的痛點(diǎn),使普通用戶也能輕松創(chuàng)作個(gè)性化立體圖像。配合無線傳輸、智能轉(zhuǎn)化等成熟功能,該產(chǎn)品已成為集科技、藝術(shù)與情感于
    的頭像 發(fā)表于 07-03 11:31 ?13.5w次閱讀
    英倫科技10.1英寸裸眼<b class='flag-5'>3D</b>數(shù)碼相框升級(jí)了,玩轉(zhuǎn)AI文生圖太cool了!

    基于樹莓派的工業(yè)級(jí) 3D 打印機(jī)!

    基于計(jì)算模4的3D打印機(jī)功能強(qiáng)大、可靠且易于使用!Formlabs采用樹莓派計(jì)算模塊4為其最新款3D打印機(jī)Form4提供動(dòng)力,提升了其旗艦系列打印機(jī)的速度、質(zhì)量和成功率,為工業(yè)和商業(yè)客戶提供了
    的頭像 發(fā)表于 06-29 08:22 ?1452次閱讀
    基于樹莓派的工業(yè)級(jí) <b class='flag-5'>3D</b> 打印機(jī)!

    3D AD庫(kù)文件

    3D庫(kù)文件
    發(fā)表于 05-28 13:57 ?6次下載

    2025年3D工業(yè)相機(jī)選型及推薦

    3D工業(yè)相機(jī)的選型
    的頭像 發(fā)表于 05-21 16:49 ?2138次閱讀
    2025年<b class='flag-5'>3D</b>工業(yè)相機(jī)選型及推薦
    永康市| 许昌市| 平安县| 华阴市| 元谋县| 泸州市| 邵东县| 乐陵市| 谢通门县| 拜泉县| 襄垣县| 常德市| 苏尼特左旗| 墨玉县| 勃利县| 原阳县| 靖宇县| 桐城市| 沙雅县| 同心县| 昌黎县| 怀仁县| 乌拉特前旗| 罗源县| 伊吾县| 岐山县| 鲜城| 浑源县| 治多县| 阳高县| 同江市| 凤翔县| 宁津县| 科技| 威信县| 昆山市| 应城市| 寿阳县| 白城市| 寿宁县| 罗定市|