色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    文章

    2885

    瀏覽量

    107604
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2970

    瀏覽量

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

    關(guān)注

    8

    文章

    643

    瀏覽量

    29245
  • javascript
    +關(guān)注

    關(guān)注

    0

    文章

    519

    瀏覽量

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

    關(guān)注

    0

    文章

    2

    瀏覽量

    1863
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    發(fā)掘3D文件格式的無限潛力:打造沉浸式虛擬世界

    在當(dāng)今數(shù)字化時(shí)代,3D技術(shù)的應(yīng)用范圍日益廣泛,涵蓋電影后期制作、產(chǎn)品原型設(shè)計(jì)、虛擬現(xiàn)實(shí)(VR)、增強(qiáng)現(xiàn)實(shí)(AR)、游戲等眾多領(lǐng)域。而3D文件格式作為
    的頭像 發(fā)表于 09-26 18:14 ?1544次閱讀
    發(fā)掘<b class='flag-5'>3D</b>文件格式的無限潛力:打造沉浸式虛擬世界

    裸眼3D筆記本電腦——先進(jìn)的光場(chǎng)裸眼3D技術(shù)

    隨著科技的不斷進(jìn)步,裸眼3D技術(shù)已經(jīng)不再是科幻電影中的幻想。如今,英倫科技裸眼3D筆記本電腦將這前沿科技帶到了我們的日常生活中。無論你是專業(yè)的3D模型設(shè)計(jì)師,還是希望在視頻播放和模型
    的頭像 發(fā)表于 07-16 10:04 ?561次閱讀

    奧比中光3D相機(jī)打造高質(zhì)量、低成本的3D動(dòng)作捕捉與3D動(dòng)畫內(nèi)容生成方案

    高質(zhì)量、低成本的3D動(dòng)作捕捉與3D動(dòng)畫內(nèi)容生成方案。 Moverse公司總部位于希臘塞薩洛尼基,是三維動(dòng)畫相關(guān)媒體和娛樂行業(yè)的家科技創(chuàng)業(yè)公司。基于奧比中光3D相機(jī),Moverse可以
    的頭像 發(fā)表于 06-25 16:37 ?1089次閱讀

    3D建模的重要內(nèi)容和應(yīng)用

    3D建模是種技術(shù),通過計(jì)算機(jī)軟件創(chuàng)建虛擬三維模型,模擬現(xiàn)實(shí)世界中的物體或場(chǎng)景。這項(xiàng)技術(shù)廣泛應(yīng)用于建筑設(shè)計(jì)、電影制作游戲開發(fā)、工程仿真等領(lǐng)域。下面古河云科技將介紹
    的頭像 發(fā)表于 06-21 14:48 ?648次閱讀

    【開源作品】自制個(gè)3D打印的移動(dòng)終端——T3rminal

    T3rminal是我過去幾個(gè)月直在努力開發(fā)的個(gè)CyberDeck,并希望將其開源。 我從不同設(shè)備如Decktility、YARH和其他項(xiàng)目中獲得了靈感。 你可以在我的Githu
    發(fā)表于 06-21 13:37

    我用香橙派做了個(gè)Klipper 3D打印控制器

    個(gè)好用的Klipper 3D打印機(jī),定離不開個(gè)可以穩(wěn)定進(jìn)行無線通信,而且性能足夠,最重要是
    發(fā)表于 06-11 09:45

    3D建模的特點(diǎn)和優(yōu)勢(shì)都有哪些?

    3D建模是種用于創(chuàng)建三維對(duì)象的過程,它在許多領(lǐng)域都有著廣泛的應(yīng)用,包括動(dòng)畫、游戲開發(fā)、建筑設(shè)計(jì)、工程以及制造業(yè)等。下面古河云科技將介紹些關(guān)于3D
    的頭像 發(fā)表于 05-13 16:41 ?2460次閱讀

    烘焙vs渲染:3D模型制作中的效率與質(zhì)量之爭(zhēng)

    探討這兩個(gè)過程,并分析它們?cè)?b class='flag-5'>3D制作流程中的作用,二者之間的差異,以及在效果上的區(qū)分。模型烘焙模型烘焙是個(gè)將動(dòng)態(tài)或復(fù)雜模型信息轉(zhuǎn)換為靜態(tài)紋
    的頭像 發(fā)表于 05-12 08:27 ?468次閱讀
    烘焙vs渲染:<b class='flag-5'>3D</b>模型<b class='flag-5'>制作</b>中的效率與質(zhì)量之爭(zhēng)

    Stability AI推出Stable Video 3D模型,可制作多視角3D視頻

    SV3D_u是Stable Video 3D個(gè)版本,僅需單幅圖片即可生成運(yùn)動(dòng)軌跡視頻,無須進(jìn)行相機(jī)調(diào)整。擴(kuò)充版本的SV3D_p加入了軌道
    的頭像 發(fā)表于 03-21 14:57 ?1036次閱讀

    裸眼3D頻頻“出圈” 電信積極布局并發(fā)力裸眼3D領(lǐng)域

    隨著科技的發(fā)展,現(xiàn)在3D視角已經(jīng)不是新鮮事。而現(xiàn)在,裸眼3D應(yīng)用則也在頻頻“出圈”。特別是在5G的助力下,裸眼3D技術(shù)應(yīng)用更是成為科技圈個(gè)
    的頭像 發(fā)表于 03-11 17:33 ?705次閱讀

    基于51單片機(jī)的貪吃蛇游戲設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于51單片機(jī)的貪吃蛇游戲設(shè)計(jì).rar》資料免費(fèi)下載
    發(fā)表于 01-12 10:00 ?0次下載

    基于51單片機(jī)的貪吃蛇設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于51單片機(jī)的貪吃蛇設(shè)計(jì).rar》資料免費(fèi)下載
    發(fā)表于 01-12 09:53 ?14次下載

    3D掃描+游戲,帶你還原“真實(shí)”的虛擬賽車體驗(yàn)!

    獲得最佳的視覺體驗(yàn),是游戲開發(fā)商首要解決的問題。傳統(tǒng)手動(dòng)建模的方式已經(jīng)無法滿足游戲開發(fā)的需求,游戲開發(fā)商轉(zhuǎn)而尋求更加高效、精準(zhǔn)的3D模型制作
    的頭像 發(fā)表于 01-10 11:02 ?473次閱讀
    <b class='flag-5'>3D</b>掃描+<b class='flag-5'>游戲</b>,帶你還原“真實(shí)”的虛擬賽車體驗(yàn)!

    三星開發(fā)裸眼3D游戲顯示器

    在2024年的國(guó)際消費(fèi)電子展(CES 2024)上,三星展示了款令人驚艷的裸眼3D游戲顯示器。這款顯示器獨(dú)特之處在于,用戶無需佩戴任何可穿戴設(shè)備,就能享受到沉浸式的3D/VR體驗(yàn)。
    的頭像 發(fā)表于 01-09 15:36 ?926次閱讀

    三星推出裸眼3D游戲顯示器,展出《匹諾曹的謊言》效果

    此款顯示器運(yùn)用置于屏幕頂部的雙攝像頭制造3D立體效果,可實(shí)時(shí)追蹤使用者的頭部與眼球運(yùn)動(dòng),輕松地將二維視頻轉(zhuǎn)化為3D效果。試驗(yàn)中,三星在顯示器運(yùn)行的游戲《匹諾曹的謊言》3D環(huán)節(jié)展示了驚人
    的頭像 發(fā)表于 01-08 14:38 ?855次閱讀
    主站蜘蛛池模板: 91区国产福利在线观看午夜| 美丽的姑娘BD在线观看| 国产人妻人伦精品熟女麻豆| 近亲乱中文字幕| 蜜桃99影院| 受坐在攻腿上H道具PLAY| 亚洲视频在线观| www.伊人网| 国内精品乱码卡一卡2卡三卡| 美女的隐私蜜桃传媒免费看| 手机在线成人精品视频网 | 久久99精品久久久久久园产越南| 免费看欧美一级特黄a大片| 思思久99久女女精品| 在野外被男人躁了一夜动图| 电影日本妻子| 久久这里只有精品2| 忘忧草在线| 99久久国产露脸国语对白| 国产在线精品亚洲视频在线| 欧美另类老女人| 亚洲网站视频在线观看| 春药按摩人妻中文字幕| 久久中文字幕免费视频| 午夜在线观看免费完整直播网页| 99re6在线视频国产精品欧美| 国产色情短视频在线网站| 欧美激情视频一区| 一级毛片直接看| 国产精品69人妻无码久久久| 男人J放进女人P全黄网站| 亚洲精品视频在线播放| 多人乱肉高hnp| 免费人妻无码AV不卡在线| 亚洲精品成人久久久影院| 成人免费无毒在线观看网站| 麻豆国产精品va在线观看约| 亚洲国产精品无码中文字幕| 啦啦啦视频在线观看WWW| 欧美亚洲国产激情一区二区| 亚洲免费在线观看视频|