亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

怎樣在CocosCreator中使用游戲手柄

 更新時間:2021年04月15日 11:26:18   作者:缺氧何甘酸  
這篇文章主要介紹了怎樣使用CocosCreator的游戲手柄,每一個步驟都挺詳細,資源可以隨便找一些,希望同學們看完,一定要試一下

一.場景布置

二. 添加手柄監(jiān)聽器

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

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

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

2.坐標設定

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

  onTouchMove(e:cc.Event.EventTouch){

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

    }

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

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

使用方位角來定位邊緣位置。pos.normalize()方法返回該點相對于(0,0)的(cos, sin),返回Vec2對象。

let parent=this.node.parent;// 父節(jié)點 (圓形底盤)
let pos:cc.Vec2=parent.convertToNodeSpaceAR(e.getLocation());
// 該點所在的方位 (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("相對位置: " + pos.x + ", " + pos.y);
this.node.setPosition( pos);

三. 添加小車的控制

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

cc.Node.angle
表示旋轉(zhuǎn)的角度,逆時針為正
官方建議不要使用 cc.Node.rotationa.signAngle( b)
a和b為兩個向量,返回值是一a,b的夾角 (弧度值)
radian = a.signAngle(b)
(1) a位于b的順時針方向:角度為正
(2) a位于b的逆時針方向:角度為負

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

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

2. 小車的移動

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

小車運動腳本

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() 為點擊的位置,是世界坐標
	// 需要把世界坐標轉(zhuǎn)換為本地坐標

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

	let parent = this.node.parent; // 父節(jié)點 (圓形底盤)
	let pos: cc.Vec2 = parent.convertToNodeSpaceAR(e.getLocation());
	// 該點所在的方位 (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("相對位置: " + pos.x + ", " + pos.y);
	this.node.setPosition(pos);

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

	this.carscript.direction = direction;

}

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

}
// update (dt) {}

最終效果

以上就是怎樣在CocosCreator中使用游戲手柄的詳細內(nèi)容,更多關于CocosCreator手柄實例的資料請關注腳本之家其它相關文章!

相關文章

  • webpack?5.68.0版本教程示例詳解

    webpack?5.68.0版本教程示例詳解

    這篇文章主要為大家介紹了webpack?5.68.0版本教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • JS調(diào)用打印方法設置頁眉頁腳的實例

    JS調(diào)用打印方法設置頁眉頁腳的實例

    一個網(wǎng)頁打印相關功能的擴展演示特效,在實現(xiàn)了打印功能外,還實現(xiàn)了打印預覽、打印前的頁眉頁腳設置,直接打印等功能,以前對JS打印前設置頁腳見的不多,所以這一個也算是挺有價值的,希望閑暇時參閱
    2013-05-05
  • 微信小程序?qū)崿F(xiàn)form表單本地儲存數(shù)據(jù)

    微信小程序?qū)崿F(xiàn)form表單本地儲存數(shù)據(jù)

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)form表單本地儲存數(shù)據(jù),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • 滾動條的監(jiān)聽與內(nèi)容隨著滾動條動態(tài)加載的實現(xiàn)

    滾動條的監(jiān)聽與內(nèi)容隨著滾動條動態(tài)加載的實現(xiàn)

    下面小編就為大家?guī)硪黄獫L動條的監(jiān)聽與內(nèi)容隨著滾動條動態(tài)加載的實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • js+html5獲取用戶地理位置信息并在Google地圖上顯示的方法

    js+html5獲取用戶地理位置信息并在Google地圖上顯示的方法

    這篇文章主要介紹了js+html5獲取用戶地理位置信息并在Google地圖上顯示的方法,涉及html5元素的操作技巧,需要的朋友可以參考下
    2015-06-06
  • javascript簡單鏈式調(diào)用案例分析

    javascript簡單鏈式調(diào)用案例分析

    這篇文章主要介紹了javascript簡單鏈式調(diào)用,結合具體實例形式模擬jQuery分析了鏈式調(diào)用的原理與具體實現(xiàn)技巧,需要的朋友可以參考下
    2017-05-05
  • uniapp實現(xiàn)微信H5掃碼功能的完整步驟

    uniapp實現(xiàn)微信H5掃碼功能的完整步驟

    在uni-app官網(wǎng)上發(fā)現(xiàn)uni-app不支持H5掃碼功能,但是下面的提示說明可以通過微信的JS-SDK實現(xiàn)掃碼功能,下面這篇文章主要給大家介紹了關于uniapp實現(xiàn)微信H5掃碼功能的完整步驟,需要的朋友可以參考下
    2022-11-11
  • JavaScript判斷兩個數(shù)組相等的4類方法總結

    JavaScript判斷兩個數(shù)組相等的4類方法總結

    如果我們需要比較兩個數(shù)組是否相等,不能像比較基本類型(String、Number、Boolean等)一樣,使用 === (或 ==) 來判斷,所以如果要比較數(shù)組是否相等,需要使用一些特殊方法。本文為大家整理了四種常見用法,需要的可以參考一下
    2023-02-02
  • js控制輸入框獲得和失去焦點時狀態(tài)顯示的方法

    js控制輸入框獲得和失去焦點時狀態(tài)顯示的方法

    這篇文章主要介紹了js控制輸入框獲得和失去焦點時狀態(tài)顯示的方法,可實現(xiàn)判斷輸入框的焦點狀態(tài)設置不同樣式的功能,是非常實用的技巧,需要的朋友可以參考下
    2015-01-01
  • JavaScript設計模式之外觀模式實例

    JavaScript設計模式之外觀模式實例

    這篇文章主要介紹了JavaScript設計模式之外觀模式實例,本文用一些代碼實例來講解JavaScript中的外觀模式,需要的朋友可以參考下
    2014-10-10

最新評論