上一篇写了一个简易版的蚂蚁庄园爬山大赛。有小伙伴留言说想看星星球,那就写吧!效果预览配置环境cocoscreator3d1.0.0小球点击3d中的节点无法通过cc.Node.EventType.TOUCH_START监听。终于在论坛上找到了一个光线投射解决方法。参考代码如下。start(){systemEvent.on(SystemEventType.TOUCH_START,this.onClickBall,this);}private_ray=newgeometry.ray();privateonClickBall(touch:Touch,event:EventTouch){constpos=touch.getLocation()};this.camera.screenPointToRay(pos.x,pos.y,this._ray);constresult:{node:Node}[]=this.node_ball_click.scene.renderScene['raycast'](this._ray);if(result.some((i)=>{if(i.node===this.node_ball_click){returntrue;}})){//点击球处理逻辑}}其中result返回一个节点包含生成的节点数组。拿到之后需要判断是否是小球节点。据说这个方案很耗性能,以后应该会有更好的方案。动画系统使用编辑器的动画编辑器为需要的部分添加动画效果。由于网上找的资源,小鸡的身体有些部位没有剪好,所以小鸡的动画效果比较差。需要注意的是,动画编辑器中的rotation属性并不对应节点中属性面板中的rotation,应该使用eulerAngles属性。据说后续版本会处理?小球的轨迹使用tween来控制小球的坐标值,先移动到最高点,再移动到最低点。在运动轨迹中加入一些随机值,可以实现不同位置的效果。tweenUtil(this._node_balll_pos).stop().to(time,newmath.Vec3((this.node_ball.position.x+BALL_INIT_X)/2,BALL_MAX_Y*(0.8+0.2*Math.random()),targetZ/2)).to(time,newmath.Vec3(BALL_GAMEOVER_X,BALL_MIN_Y,targetZ)).start();小结完成这个小功能遇到的主要问题是3d节点点击事件和动画系统的旋转。不过这些都在论坛里找到了相应的解决办法。以上是我最新的学习成果!如果您有任何疑问或新想法,请留言!我有一个好主意,会尽快与您分享!在线试玩源码获取
