日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

游戏开发:Html5 虚拟摇杆控制人物移动

發(fā)布時間:2023/12/14 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 游戏开发:Html5 虚拟摇杆控制人物移动 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這邊想再單獨和大家分享一下有關(guān)虛擬搖桿的開發(fā)經(jīng)驗,因為覺得這個功能還是很實用和用途廣泛的!

效果:

運行地址:
http://h5demo.yyfuncdn.com/res/gameDemo/Pokemon/game.html

搖桿顯示:

因為制作該游戲使用了 pixi 框架,所以需要利用 PIXI.Graphics() 方法繪制兩個圓就可以了,一大一小,大圓為移動背景,給與一個顏色和透明度,默認隱藏即可,下面是繪制一個按鈕移動背景圓的代碼:

var rockerbg = new PIXI.Graphics();//繪制搖桿背景rockerbg.lineStyle(0);//外邊框?qū)挾葹?rockerbg.beginFill(0x000000, 0.3);//背景色 透明度var radius = 0;//半徑if(phoneWidth > phoneHeight)radius = phoneWidth/10;else radius = phoneHeight/10;rockerbg.drawCircle(0,0,radius);//設(shè)置半徑rockerbg.endFill();//結(jié)束繪畫parent.addChild(rockerbg);//添加到舞臺,parent為傳進來的舞臺參數(shù)

控制按鈕同理,只不過小一點就可以了。當(dāng)然如果小伙伴們圖省事或不使用框架,找兩個圓的圖片也可以,但是要注意設(shè)置錨點為中心

搖桿功能:

接下來就要具體說明一下他是如何將被操作的人或物捆綁到一起的了,在該寶可夢游戲中主要為了提供給角色一個速度,這個速度是一個 json 數(shù)據(jù),里面存放了 x 軸與 y 軸的速度

var speed = {x:0,y:0};

如何實現(xiàn)觸摸屏幕給與速度相應(yīng)數(shù)據(jù)呢,這就要用到開啟舞臺交互事件中的“鼠標(biāo)按下”、“鼠標(biāo)抬起”、“鼠標(biāo)移動”三個事件

其中“鼠標(biāo)按下”事件中控制獲取當(dāng)前鼠標(biāo)位置,以及按鈕的顯示

app.stage.on("pointerdown",function(event){//在鼠標(biāo)按下位置顯示控制器var pos = event.data.getLocalPosition(app.stage);rockerbg.x = pos.x;rockerbg.y = pos.y;rockerbg.visible = true;})

“鼠標(biāo)抬起”事件中控制控制器隱藏以及速度歸零

app.stage.on("pointerup",function(){//鼠標(biāo)抬起時控制器隱藏,速度歸零rocker.x = 0;rocker.y = 0;rockerbg.visible = false;speed = {x:0,y:0};})

“鼠標(biāo)移動”事件是整個控制的關(guān)鍵,他將控制按鈕的移動,利用大圓與小圓的圓心位置獲得角色所需的移動方向,因為角色只能四個方向移動,所以只需要先判斷小圓圓心據(jù)原點的X軸與Y軸絕對值的最大值,再判斷最大值為正值或負值即可得出角色的移動方向

rocker.on("pointermove",function(event){//利用判斷控制器在控制器背景原點的方向進行設(shè)置角色移動方向var pos = event.data.getLocalPosition(app.stage);var A = rockerbg.x-pos.x;//搖桿起始點與鼠標(biāo)X軸距離var B = rockerbg.y-pos.y;//搖桿起始點與鼠標(biāo)Y軸距離var Z = radius;//控制器背景的半徑var X = pos.x-rockerbg.x;//獲取鼠標(biāo)X軸位置var Y = pos.y-rockerbg.y;//獲取鼠標(biāo)Y軸位置if(Z*Z<A*A+B*B){//判斷鼠標(biāo)位置是否超出搖桿移動范圍var angle = Math.atan((pos.y-rockerbg.y)/(pos.x-rockerbg.x));//計算鼠標(biāo)與搖桿起始點角度if(pos.x<rockerbg.x){//判斷鼠標(biāo)是否在搖桿左側(cè)X = -Z*Math.cos(angle);Y = -Z*Math.sin(angle);}else{//判斷鼠標(biāo)是否在搖桿右側(cè)X = Z*Math.cos(angle);Y = Z*Math.sin(angle);}}speed = {x:0,y:0};var movescope = rockerbg.width/6;//設(shè)置控制器移動的最小范圍(當(dāng)超過這個值時則可設(shè)置方向與速度)if(Math.abs(X) > Math.abs(Y) && Math.abs(X) > movescope){if(X < 0){obj.moveState = true;obj.direction = "a";//人物動畫speed.x = -3;//設(shè)置x軸速度}else if(X > 0){obj.moveState = true;obj.direction = "d";//人物動畫speed.x = 3;//設(shè)置x軸速度}}else if(Math.abs(X) < Math.abs(Y) && Math.abs(Y) > movescope){if(Y < 0){obj.moveState = true;obj.direction = "w";//人物動畫speed.y = -3;//設(shè)置y軸速度}else if(Y > 0){obj.moveState = true;obj.direction = "s";//人物動畫speed.y = 3;//設(shè)置y軸速度}}rocker.x = X;//設(shè)置按鈕x坐標(biāo)rocker.y = Y;//設(shè)置按鈕y坐標(biāo)})

上面代碼中各行都有詳細的功能注釋說明,希望對大家的理解有所幫助,最后的最后是調(diào)用當(dāng)前對象中的 getSpeed 方法即可獲取該對象中的 json 數(shù)據(jù) speed

this.getSpeed = function(){return speed;}

下面的是整個虛擬控制器的完整代碼

function Fsvjoy(parent){//虛擬控制器var self = this;var rockerbg = new PIXI.Graphics();//繪制搖桿背景rockerbg.lineStyle(0);rockerbg.beginFill(0x000000, 0.3);var radius = 0;if(phoneWidth > phoneHeight)radius = phoneWidth/10;else radius = phoneHeight/10;rockerbg.drawCircle(0,0,radius);rockerbg.endFill();parent.addChild(rockerbg);var rocker = new PIXI.Graphics();//繪制搖桿rocker.lineStyle(0);rocker.beginFill(0xf0f0f0,0.7);rocker.drawCircle(0,0,rockerbg.height/8);rocker.endFill();rockerbg.addChild(rocker);rockerbg.visible = false;var obj = null;this.setobj = function(role){obj = role;}var speed = {x:0,y:0};app.stage.interactive = true;//開啟舞臺交互app.stage.on("pointerdown",function(event){//在鼠標(biāo)按下位置顯示控制器var pos = event.data.getLocalPosition(app.stage);rockerbg.x = pos.x;rockerbg.y = pos.y;rockerbg.visible = true;})app.stage.on("pointerup",function(){//鼠標(biāo)抬起時控制器隱藏,速度歸零rocker.x = 0;rocker.y = 0;rockerbg.visible = false;speed = {x:0,y:0};})rocker.interactive = true;//開啟搖桿交互rocker.on("pointermove",function(event){//利用判斷控制器在控制器背景原點的方向進行設(shè)置角色移動方向var pos = event.data.getLocalPosition(app.stage);var A = rockerbg.x-pos.x;//搖桿起始點與鼠標(biāo)X軸距離var B = rockerbg.y-pos.y;//搖桿起始點與鼠標(biāo)Y軸距離var Z = radius;//控制器背景的半徑var X = pos.x-rockerbg.x;//獲取鼠標(biāo)X軸位置var Y = pos.y-rockerbg.y;//獲取鼠標(biāo)Y軸位置if(Z*Z<A*A+B*B){//判斷鼠標(biāo)位置是否超出搖桿移動范圍var angle = Math.atan((pos.y-rockerbg.y)/(pos.x-rockerbg.x));//計算鼠標(biāo)與搖桿起始點角度if(pos.x<rockerbg.x){//判斷鼠標(biāo)是否在搖桿左側(cè)X = -Z*Math.cos(angle);Y = -Z*Math.sin(angle);}else{//判斷鼠標(biāo)是否在搖桿左側(cè)X = Z*Math.cos(angle);Y = Z*Math.sin(angle);}}speed = {x:0,y:0};var movescope = rockerbg.width/6;//設(shè)置控制器移動的最小范圍(當(dāng)超過這個值時則可設(shè)置方向與速度)if(Math.abs(X) > Math.abs(Y) && Math.abs(X) > movescope){if(X < 0){obj.moveState = true;obj.direction = "a";speed.x = -3;}else if(X > 0){obj.moveState = true;obj.direction = "d";speed.x = 3;}}else if(Math.abs(X) < Math.abs(Y) && Math.abs(Y) > movescope){if(Y < 0){obj.moveState = true;obj.direction = "w";speed.y = -3;}else if(Y > 0){obj.moveState = true;obj.direction = "s";speed.y = 3;}}rocker.x = X;rocker.y = Y;})this.getSpeed = function(){return speed;} }

總結(jié)

以上是生活随笔為你收集整理的游戏开发:Html5 虚拟摇杆控制人物移动的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天天爱天天做 | 一区二区日韩在线观看 | 亚洲精品国产精品国自产网站按摩 | 中文字幕88| 天天爽天天爽天天爽 | 91香蕉黄| 日韩视频在线一区 | 免费吃奶摸下激烈视频 | 依人成人| 日韩视频免费在线观看 | 亚洲精品一区二区三区在线观看 | 人妻aⅴ无码一区二区三区 阿v免费视频 | 久热久 | 天堂在线日本 | 欧美人成在线 | 亚洲精品粉嫩小泬20p | 日韩操 | 91精品国产日韩91久久久久久 | 久久噜噜 | 老湿影院av | 亚洲视频精品一区 | 亚洲黄业 | 涩涩网站在线 | 亚洲手机看片 | 丁香色婷婷 | 女性女同性aⅴ免费观女性恋 | 国产激情综合 | 亚洲成色 | 91毛片在线观看 | 天堂一区二区三区四区 | 人与禽一级全黄 | 国产福利免费 | 伊人在线| 成人av影视在线 | 国产女同在线观看 | 国产区精品视频 | 91久久在线 | 天天躁狠狠躁狠狠躁夜夜躁68 | 先锋影视av | 黄色片91| 国产日韩成人内射视频 | 在线观看aaa | 一本一道久久a久久综合蜜桃 | 国产剧情久久 | 绯色av蜜臀vs少妇 | 精品一区二区在线免费观看 | 中文字幕中出 | 日本免费网站在线观看 | 国产乱人乱精一区二视频国产精品 | 中国美女一级黄色片 | 国产精品久久久久av | 99热在 | 日韩电影精品 | 麻豆视频免费观看 | 欧美精品国产 | 日本韩国在线播放 | 婷婷调教口舌奴ⅴk | 国产视频在线观看视频 | 秋霞成人午夜鲁丝一区二区三区 | 欧美三级少妇高潮 | 丰满人妻一区二区三区四区 | 天堂无乱码 | 村姑电影在线播放免费观看 | www.av72| 欧洲精品二区 | 日本在线观看中文字幕 | 亚洲大片免费 | 9久精品| 91成人破解版 | 有码中文| 国产二页 | 在线观看日韩中文字幕 | 99精品黄色 | 桃色成人网 | 91入囗| 国产精品麻豆一区二区 | 国产又爽又黄视频 | 亚洲经典一区 | 狠狠操狠狠摸 | 欧美aⅴ视频 | 色多多视频污 | jizz性欧美23 | 影音av资源 | 国产调教在线观看 | 成人日韩视频 | 福利第一页 | 中文字幕偷拍 | 国产精品久久久久久亚洲调教 | 国产精品免费无码 | 亚洲国产日韩精品 | 亚洲欧美另类国产 | 日韩成人精品 | 永久av免费 | 国产精品福利在线观看 | 美国黄色a级片 | 日日夜夜av | 成人视品 | 五月婷婷在线视频 | 小毛片|