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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

圖撲-數字孿生 ? 來源:物聯網袋鼠 ? 作者:物聯網袋鼠 ? 2023-09-01 12:05 ? 次閱讀

3D 網頁版貪吃蛇游戲!下面來具體講一下如何實現。

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

場景初始化

首先,我們對頁面進行初始化,包括初始化3D場景,設置地面網格,以及開啟事件監聽等。主要代碼及注釋如下:

w = 40; // 網格間距
m = 20; // 網格行列數
d = w * m / 2;
food = null;
dm = new ht.DataModel();
g3d = new ht.graph3d.Graph3dView(dm); // 初始化一個3d場景
// 配置網格
g3d.setGridVisible(true);
g3d.setGridColor('#29B098');
g3d.setGridSize(m);
g3d.setGridGap(w);
// 將3D場景添加到body下面
view = g3d.getView();
view.className = 'main';
document.body.appendChild(view);
// 開啟事件監聽
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); // 獲取當前鼠標點擊點在3D場景中的位置
// 根據點擊點x,z軸坐標,計算貪吃蛇前進方向
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(); // 雙擊啟動游戲
}
}, false);
start();
setInterval(function(){ if(isRunning){ isRunning = next(); } }, 200); // 每間隔200ms貪吃蛇往前走一步

創建食物

貪吃蛇每次吃完一個食物,其身體就會增長一段。此時需要創建新的食物并隨機放到一個新的位置。創建食物時,其位置不能與上一個位置重合,也不能與當前貪吃蛇身體重復。

/**
* 創建食物,并擺放到隨機位置。
* 食物不能放到貪吃蛇身上,也不能放到上一個食物的位置
*
*/
function createFood(){
var x = getRandom(), y = getRandom();
// 確保新創建的食物不與貪吃蛇重疊,也不與上一個食物的位置重疊
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

創建貪吃蛇及四周圍墻

在第一步初始化時,我們設置了網格大小及間距。這樣也就確定了整個網格的長寬以及貪吃蛇每個塊的大小。在這一步,我們為網格增加邊界,同時生成貪吃蛇。

/**
* 清空場景。創建貪吃蛇及四周圍墻。
*
*/
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);
// 創建貪吃蛇的身體
for(var i=0; i

處理貪吃蛇行走邏輯

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

* 1. 檢測到達邊界或接觸自己身體,則游戲結束

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

* 3. 否則,繼續往前走

/**

* 根據direction計算下一個位置。同時:

* 1. 檢測到達邊界或接觸自己身體,則游戲結束

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

* 3. 繼續往前走

*
* @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;
}

到這里,整個貪吃蛇游戲就完成了。雙擊場景即可啟動游戲。點擊場景可改變貪吃蛇運動方向。


審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 3D
    3D
    +關注

    關注

    9

    文章

    2907

    瀏覽量

    107757
  • JAVA
    +關注

    關注

    19

    文章

    2973

    瀏覽量

    104939
  • 源碼
    +關注

    關注

    8

    文章

    652

    瀏覽量

    29350
  • javascript
    +關注

    關注

    0

    文章

    523

    瀏覽量

    53905
  • javascript編程

    關注

    0

    文章

    2

    瀏覽量

    1865
收藏 人收藏

    評論

    相關推薦

    騰訊混元3D AI創作引擎正式上線

    近日,騰訊公司宣布其自主研發的混元3D AI創作引擎已正式上線。這創新性的創作工具,標志著騰訊在3D內容生成領域邁出了重要步。 混元3D
    的頭像 發表于 01-22 10:26 ?62次閱讀

    3D集成電路的結構和優勢

    逐漸融合,將不同的芯片設計整合到的封裝。本文將概述3D 集成電路的優勢,以及它們如何助力未來的先進設備實現異構集成。
    的頭像 發表于 12-03 16:39 ?916次閱讀
    <b class='flag-5'>3D</b>集成電路的結構和優勢

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

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

    裸眼3D筆記本電腦——先進的光場裸眼3D技術

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

    奧比中光3D相機打造高質量、低成本的3D動作捕捉與3D動畫內容生成方案

    高質量、低成本的3D動作捕捉與3D動畫內容生成方案。 Moverse公司總部位于希臘塞薩洛尼基,是三維動畫相關媒體和娛樂行業的家科技創業公司?;趭W比中光3D相機,Moverse可以
    的頭像 發表于 06-25 16:37 ?1112次閱讀

    3D建模的重要內容和應用

    3D建模是種技術,通過計算機軟件創建虛擬三維模型,模擬現實世界中的物體或場景。這項技術廣泛應用于建筑設計、電影制作、游戲開發、工程仿真等領域。下面古河云科技將介紹
    的頭像 發表于 06-21 14:48 ?717次閱讀

    【開源作品】自制3D打印的移動終端——T3rminal

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

    我用香橙派做了Klipper 3D打印控制器

    好用的Klipper 3D打印機,定離不開可以穩定進行無線通信,而且性能足夠,最重要是
    發表于 06-11 09:45

    3D建模的特點和優勢都有哪些?

    3D建模是種用于創建三維對象的過程,它在許多領域都有著廣泛的應用,包括動畫、游戲開發、建筑設計、工程以及制造業等。下面古河云科技將介紹些關于3D
    的頭像 發表于 05-13 16:41 ?2610次閱讀

    烘焙vs渲染:3D模型制作中的效率與質量之爭

    探討這兩過程,并分析它們在3D制作流程中的作用,二者之間的差異,以及在效果上的區分。模型烘焙模型烘焙是將動態或復雜模型信息轉換為靜態紋
    的頭像 發表于 05-12 08:27 ?500次閱讀
    烘焙vs渲染:<b class='flag-5'>3D</b>模型<b class='flag-5'>制作</b>中的效率與質量之爭

    自制3D打印的移動終端——T3rminal

    T3rminal是我過去幾個月直在努力開發的CyberDeck,并希望將其開源。 我從不同設備如Decktility、YARH和其他項目中獲得了靈感。 你可以在我的Github上
    的頭像 發表于 05-09 10:38 ?566次閱讀
    自制<b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>3D</b>打印的移動終端——T<b class='flag-5'>3</b>rminal

    Stability AI推出全新Stable Video 3D模型

    近日,Stability AI 推出了全新的 Stable Video 3D 模型,該模型以其獨特的功能吸引了眾多關注。此模型具備從單張圖像中生成多視圖3D視頻的能力,為視頻制作領域帶來了革命性的突破。
    的頭像 發表于 03-22 10:30 ?904次閱讀

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

    SV3D_u是Stable Video 3D版本,僅需單幅圖片即可生成運動軌跡視頻,無須進行相機調整。擴充版本的SV3D_p加入了軌道
    的頭像 發表于 03-21 14:57 ?1069次閱讀

    3D動畫原理:電阻

    電阻3D
    深圳崧皓電子
    發布于 :2024年03月19日 06:49:19

    裸眼3D頻頻“出圈” 電信積極布局并發力裸眼3D領域

    隨著科技的發展,現在3D視角已經不是新鮮事。而現在,裸眼3D應用則也在頻頻“出圈”。特別是在5G的助力下,裸眼3D技術應用更是成為科技圈
    的頭像 發表于 03-11 17:33 ?741次閱讀
    主站蜘蛛池模板: 一区二区三区无码被窝影院| 久久国产精品萌白酱免费| 果冻传媒视频在线播放| 巨污全肉np一女多男| 四虎影视库永久免费| 最新老头恋老OLDMAN| 国产精品久久人妻无码网站一区L| 老司机福利在 线影院| 国内精品七七久久影院| 亚洲蜜桃AV色情精品成人| 国精产品一区二区三区| 亚洲精品国产自在现线最新| 黑色丝袜美腿美女被躁翻了| 亚洲精品一二三区-久久| 湖南张丽大战黑人hd视频| 亚洲中文无码永久免费| 久久久久久久免费| 717影院理论午夜伦不卡久久| 免费人成网站永久| ppypp午夜限制不卡影院私人| 亲嘴扒胸摸屁股视频免费网站 | 久久久精品久久久久三级| 一区三区不卡高清影视| 久久国产精品自线拍免费| 在教室伦流澡到高潮H女攻视频| 里番※琉璃全彩acg奈亚子| 99视频精品国产免费观看| 日韩欧美一区二区三区在线| 国产系列在线亚洲视频| 在线日本高清日本免费| 欧美18videosex| 国产CHINESE HD精品| 亚洲国产成人一区二区在线| 久久免费电影| 操他射他影院| 亚洲国产cao| 蜜臀AV人妻久久无码精品麻豆| www黄色大片| 亚洲精品久久7777777| 免费视频国产| 国产精品日本无码久久一老A |