cocos creator 3.0見縫插針(口紅機)
阿新 • • 發佈:2021-02-11
技術標籤:cocos creator
cocos creator3.0 見縫插針
效果展示
## gif 幀率較低 實際體驗效果更好
實現思路
1、中間一個節點 裡面有兩個node 分別放背景橘子node,存放刀的node 然後只旋轉這個中間節點讓刀和背景一塊旋轉就行了 2、碰撞檢測給每一把刀放上碰撞檢測 3、下邊放一把假的刀 用來做動畫執行,刀子到達位置 將假的刀放回原來的位置,將複製新的刀到中間存刀的節點 4、判斷下一關 將中間節點存刀的node判斷子節點數量 5、管卡難度 ·勻速 ·變速 ·變速+變向 ·時間限制
關鍵程式碼
fire(event: any, data: any) {
// 遊戲結束 或者當前沒有刀不能點選
if (!this.gameStatus || this.knifeCount <= 0) {
return
}
// 當前刀的數量減少
this.knifeCount--;
if (this.knife) {
let p = this.knife.getPosition()
p.x = 0;
p. y = 0;
if (this.knifeSize) {
p.y += this.knifeSize.height / 2;
}
let that = this
/**
* 執行線性動畫
* 動畫結束複製當前動畫的刀到當前位置
*/
this.currentKnifeAnim = tween(this.knife)
.to(0.1, { position: p }, {
easing: 'linear',
onComplete: function (target?: object) {
let node = instantiate(that.knife)
if (node) {
// 設定刀的位置 到初始位置
that.knife?.setPosition(that.knifeX, that.knifeY, 0)
// 執行橘子動畫 向上彈
that.orangeNode?.getComponent(AnimationComponent)?.play()
let px = 0, py = 0, ox = 0, oy = 0;
if (that.knifeSize) {
// 設定刀插進去的位置
py = that.knifeSize.height / 2 - that.orangeY;
}
/**
* 2D上的點圍繞某另一個點旋轉: If you rotate point (px, py) around point (ox, oy) by angle theta you’ll get:
* p'x = cos(theta) * (px-ox) - sin(theta) * (py-oy) + ox
* p'y = sin(theta) * (px-ox) + cos(theta) * (py-oy) + oy
*/
// 計算角度 要一直為下方 注意補角
let temp = 360 - that.angle;
let theta = Math.PI / 180 * temp
let x = Math.cos(theta) * (px - ox) - Math.sin(theta) * (py - oy) + ox
let y = Math.sin(theta) * (px - ox) + Math.cos(theta) * (py - oy) + oy
// 設定新刀位置
node.setPosition(x, y, 0)
// 設定新刀角度
node.setWorldRotationFromEuler(0, 0, temp)
// 附加到虛擬轉盤上
node.parent = that.discNode
}
}
})
.start()
}
}
試玩地址(載入慢,自己伺服器頻寬低)
https://www.intkilow.top/jfcz/
下載地址
關注微信公眾號:
隨疾風前行
回覆:
cocos見縫插針遊戲原始碼