上一篇文章寫了一個簡易版的螞蟻莊園爬山賽,有小夥伴留言說想要看星星球的,那麼就寫起來吧!node
配置環境 cocos creator 3d 1.0.0git
3d裏節點沒法用 cc.Node.EventType.TOUCH_START 監聽。最終在論壇上找到一個 raycast 解決方法。參考代碼以下。web
start() { systemEvent.on(SystemEventType.TOUCH_START, this.onClickBall, this); } private _ray = new geometry.ray(); private onClickBall(touch: Touch, event: EventTouch) { const pos = touch.getLocation(); this.camera.screenPointToRay(pos.x, pos.y, this._ray); const result: { node: Node }[] = this.node_ball_click.scene.renderScene['raycast'](this._ray); if (result.some((i) => { if (i.node === this.node_ball_click) { return true; } })) { //點擊到小球處理邏輯 } }
其中 result 返回的是一個包含node節點的結果數組。獲取後須要判斷一下是否爲小球節點。數組
聽說這個方案消耗性能比較大,後續應該會有更好的解決方案。dom
採用了編輯器的動畫編輯器,對須要部分增長動畫效果。因爲個人資源是網上找的,那隻雞有些身體部分切割的很差,因此小雞的動畫比較差一些。編輯器
須要注意的是動畫編輯器裏的rotation屬性,與節點裏的屬性面板的rotation對應不上,而應該採用eulerAngles的屬性。性能
聽說後續版本會處理?學習
採用tween控制小球座標數值,先移動到最高點,而後再移動到最低點。動畫
在運動軌跡中加入一些隨機值,就能夠達到不一樣位置的效果啦。this
tweenUtil(this._node_balll_pos) .stop() .to(time, new math.Vec3((this.node_ball.position.x + BALL_INIT_X) / 2, BALL_MAX_Y * (0.8 + 0.2 * Math.random()), targetZ / 2)) .to(time, new math.Vec3(BALL_GAMEOVER_X, BALL_MIN_Y, targetZ)) .start();
完成這個小功能主要遇到的問題是3d節點點擊事件,和動畫系統的rotation的問題。不過這些都在論壇裏找到了相應的解決方法。
以上就是我最新的學習成果!若有問題或新的想法歡迎留言!我有了好想法會第一時間分享給你們的!