一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務(wù)器之家 - 編程語(yǔ)言 - JavaScript - js教程 - 怎樣在CocosCreator中使用游戲手柄

怎樣在CocosCreator中使用游戲手柄

2022-03-02 16:46缺氧何甘酸 js教程

這篇文章主要介紹了怎樣使用CocosCreator的游戲手柄,每一個(gè)步驟都挺詳細(xì),資源可以隨便找一些,希望同學(xué)們看完,一定要試一下

1.場(chǎng)景布置

怎樣在CocosCreator中使用游戲手柄

怎樣在CocosCreator中使用游戲手柄

2. 添加手柄監(jiān)聽(tīng)器

1.監(jiān)聽(tīng)事件的變化

由原先的mouse系列的轉(zhuǎn)換為touch系列的

怎樣在CocosCreator中使用游戲手柄

  1. touchstart 觸摸按下,相當(dāng)于 mousedown
  2. touchmove 觸摸移動(dòng),相當(dāng)于 mousemove
  3. touchend 觸摸抬起,相當(dāng)于 mouseup
  4. touchcancel 觸摸取消,被其他事件終止,相當(dāng)于按下了ESC鍵

2.坐標(biāo)設(shè)定

當(dāng)觸摸按下隨推動(dòng)位置變化(要用世界坐標(biāo)轉(zhuǎn)換),觸摸抬起后回歸原位(直接設(shè)定0,0坐標(biāo)默認(rèn)相對(duì)坐標(biāo))。
setPosition()設(shè)定的為相對(duì)父節(jié)點(diǎn)的坐標(biāo)

  onTouchMove(e:cc.Event.EventTouch){

         // e.getLocation() 為點(diǎn)擊的位置,是世界坐標(biāo)
        // 需要把世界坐標(biāo)轉(zhuǎn)換為本地坐標(biāo)
        
        let parent=this.node.parent;// 父節(jié)點(diǎn) (圓形底盤)
        let pos:cc.Vec2=parent.convertToNodeSpaceAR(e.getLocation());
        this.node.setPosition(pos);

    }

    onTouchCancel(){
      this.node.setPosition(cc.v3(0,0,0));
    }

怎樣在CocosCreator中使用游戲手柄

3. 將手柄限制在托盤內(nèi)

使用方位角來(lái)定位邊緣位置。pos.normalize()方法返回該點(diǎn)相對(duì)于(0,0)的(cos, sin),返回Vec2對(duì)象。

let parent=this.node.parent;// 父節(jié)點(diǎn) (圓形底盤)
let pos:cc.Vec2=parent.convertToNodeSpaceAR(e.getLocation());
// 該點(diǎn)所在的方位 (cos, sin)
let direction:cc.Vec2=pos.normalize();
// 限制在邊界之內(nèi)
let maxR = 100-20;   
//點(diǎn)擊的點(diǎn)到托盤中央的距離
let r : number = cc.Vec2.distance(pos, cc.v2(0,0));

if( r > maxR)
{
	pos.x = maxR * direction.x; 
	pos.y = maxR * direction.y;
}
// cc.log("相對(duì)位置: " + pos.x + ", " + pos.y);
this.node.setPosition( pos);

怎樣在CocosCreator中使用游戲手柄

3. 添加小車的控制

1. 小車的旋轉(zhuǎn)

cc.Node.angle
表示旋轉(zhuǎn)的角度,逆時(shí)針為正
官方建議不要使用 cc.Node.rotationa.signAngle( b)
a和b為兩個(gè)向量,返回值是一a,b的夾角 (弧度值)
radian = a.signAngle(b)
(1) a位于b的順時(shí)針?lè)较颍航嵌葹檎?br /> (2) a位于b的逆時(shí)針?lè)较颍航嵌葹樨?fù)

旋轉(zhuǎn)實(shí)現(xiàn):
添加屬性 car :cc.Node=null;獲取小車節(jié)點(diǎn)。
cc.find()注意參數(shù)用"/"除號(hào)的斜杠,否則識(shí)別不到

onLoad () {
     this.car=cc.find("Canvas/小車");
}
let radian=pos.signAngle(cc.v2(1,0));//計(jì)算點(diǎn)擊位置與水平的夾角
let ang=radian/Math.PI*180;//弧度制轉(zhuǎn)換為角度值
this.car.angle=-ang;//逆時(shí)針為正,所以這里要調(diào)整至順時(shí)針

怎樣在CocosCreator中使用游戲手柄

2. 小車的移動(dòng) .

  1. 在小車的腳本中添加前進(jìn)的動(dòng)畫,update(dt)方法中讓x和y每幀加對(duì)應(yīng)的速度在x和y軸的分量。
  2. 在手柄控制腳本中獲取小車節(jié)點(diǎn)下的腳本。通過(guò)上面獲取的direction的方向角,傳入小車腳本中。通過(guò)控制direction來(lái)控制小車的移動(dòng)。

小車運(yùn)動(dòng)腳本

direction: cc.Vec2 = null;
speed: number = 3;

onLoad() {

}

start() {

}

update(dt) {
	if (this.direction == null) return; //靜止
	let dx = this.speed * this.direction.x;
	let dy = this.speed * this.direction.y;

	let pos = this.node.getPosition();
	pos.x += dx;
	pos.y += dy;
	this.node.setPosition(pos);
}

手柄控制腳本

car: cc.Node = null;
carscript: cc.Component = null;
// LIFE-CYCLE CALLBACKS:

onLoad() {
	this.car = cc.find("Canvas/小車");
	this.carscript = this.car.getComponent("CarMove");
}

start() {
	this.node.on("touchstart", this.onTouchStart, this);
	this.node.on("touchmove", this.onTouchMove, this);
	this.node.on("touchend", this.onTouchCancel, this);
	this.node.on("touchcancel", this.onTouchCancel, this);
}

onTouchStart() {

}

onTouchMove(e: cc.Event.EventTouch) {

	// e.getLocation() 為點(diǎn)擊的位置,是世界坐標(biāo)
	// 需要把世界坐標(biāo)轉(zhuǎn)換為本地坐標(biāo)

	// let parent=this.node.parent;// 父節(jié)點(diǎn) (圓形底盤)
	// let pos:cc.Vec2=parent.convertToNodeSpaceAR(e.getLocation());
	// this.node.setPosition(pos);

	let parent = this.node.parent; // 父節(jié)點(diǎn) (圓形底盤)
	let pos: cc.Vec2 = parent.convertToNodeSpaceAR(e.getLocation());
	// 該點(diǎn)所在的方位 (cos, sin)
	let direction: cc.Vec2 = pos.normalize();
	// 限制在邊界之內(nèi)
	let maxR = 100 - 20;

	let r: number = cc.Vec2.distance(pos, cc.v2(0, 0));

	if (r > maxR) {
		pos.x = maxR * direction.x;
		pos.y = maxR * direction.y;
	}
	// cc.log("相對(duì)位置: " + pos.x + ", " + pos.y);
	this.node.setPosition(pos);

	let radian = pos.signAngle(cc.v2(1, 0)); //計(jì)算點(diǎn)擊位置與水平的夾角
	let ang = radian / Math.PI * 180; //弧度制轉(zhuǎn)換為角度值
	this.car.angle = -ang; //逆時(shí)針為正,所以這里要調(diào)整至順時(shí)針

	this.carscript.direction = direction;

}

onTouchCancel() {
	this.node.setPosition(cc.v3(0, 0, 0));
	//將方向置空,使汽車停止
	this.carscript.direction = null;

}
// update (dt) {}

最終效果

怎樣在CocosCreator中使用游戲手柄

以上就是怎樣在CocosCreator中使用游戲手柄的詳細(xì)內(nèi)容,更多關(guān)于CocosCreator手柄實(shí)例的資料請(qǐng)關(guān)注服務(wù)器之家其它相關(guān)文章!

原文鏈接:https://blog.csdn.net/m0_46113894/article/details/109748542

延伸 · 閱讀

精彩推薦
  • js教程canvas操作插件fabric.js使用方法詳解

    canvas操作插件fabric.js使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了canvas操作插件fabric.js的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    daicooper10742022-02-19
  • js教程js中實(shí)現(xiàn)繼承的五種方法

    js中實(shí)現(xiàn)繼承的五種方法

    這篇文章主要介紹了js中實(shí)現(xiàn)繼承的五種方法,幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下...

    菜小牛7542022-01-07
  • js教程JavaScript實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器功能

    JavaScript實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    小小小青臺(tái)7652022-02-22
  • js教程聊一聊六個(gè)JavaScript圖表庫(kù)

    聊一聊六個(gè)JavaScript圖表庫(kù)

    作為一名前端 Web 開(kāi)發(fā)人員,能夠像制作漂亮的交互式網(wǎng)頁(yè)一樣多地可視化數(shù)據(jù)是一項(xiàng)很棒的技能。這些 JavaScript 庫(kù)使這項(xiàng)任務(wù)變得更容易,因?yàn)殚_(kāi)發(fā)人員...

    粵嵌教育6612022-01-12
  • js教程詳解 TypeScript 函數(shù)聲明和重載

    詳解 TypeScript 函數(shù)聲明和重載

    在 JavaScript 中,函數(shù)是構(gòu)建應(yīng)用的一塊基石,我們可以使用函數(shù)抽離可復(fù)用的邏輯、抽象模型、封裝過(guò)程。在TypeScript中,函數(shù)仍然是最基本、最重要的概念...

    前端充電寶7152022-01-05
  • js教程js實(shí)現(xiàn)鼠標(biāo)切換圖片(無(wú)定時(shí)器)

    js實(shí)現(xiàn)鼠標(biāo)切換圖片(無(wú)定時(shí)器)

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)鼠標(biāo)切換圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    楓思然8172022-01-10
  • js教程Javascript中的奇葩知識(shí),你知道嗎?

    Javascript中的奇葩知識(shí),你知道嗎?

    這篇文章主要介紹了一些Javascript中的奇葩知識(shí),幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下...

    原罪7982022-01-06
  • js教程javascript中閉包c(diǎn)losure的深入講解

    javascript中閉包c(diǎn)losure的深入講解

    這篇文章主要給大家介紹了關(guān)于javascript中閉包c(diǎn)losure的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需...

    flydean11382022-01-25
主站蜘蛛池模板: 色综合综合 | 青柠影视在线播放观看高清 | 久久久久久久99精品免费观看 | 婷婷久久精品 | 国产自拍偷拍自拍 | 国产成年人在线观看 | 我和子伦系列小说 | 国产精品酒店视频免费看 | 波多野结衣 在线 | 无遮掩60分钟从头啪到尾 | 亚洲精品国产一区二区第一页 | 欧美亚洲国产精品久久久 | 出轨同学会2在线观看 | free chinese麻豆 | 日韩一区二区三区不卡视频 | poronovideos暴力另类 | 毛片a级放荡的护士hd | 2019年国产高清情侣视频 | 国产精品免费观在线 | 日日爱669| 亚洲国产精品一区二区首页 | 免费国产午夜高清在线视频 | 12一14性xxxxx国外| 国产亚洲人成网站在线观看不卡 | 亚洲视频久久 | 无套暴躁白丝秘书 | 亚洲AV久久久噜噜噜久久 | chinese国产人妖hd | 第一福利在线视频 | 色综合天天综合网看在线影院 | 桥本有菜作品在线 | 东北美女野外bbwbbw免费 | 俄罗斯15一16处交 | 男人狂躁女人gif动态图 | 免费大秀视频在线播放 | 青草色视频 | 国产精品日韩欧美一区二区三区 | 国产成人精品高清免费 | 日韩大片在线播放 | 久久精品国产亚洲AV天美18 | 国产精品免费视频一区一 |