优秀的编程知识分享平台

网站首页 > 技术文章 正文

cocos creator开发遇到的困惑(cocoscreator有前景吗)

nanyue 2025-03-26 14:40:43 技术文章 2 ℃

之前一直使用unity做2D 3D开发的,最近打算搞小游戏,unity生成的比较大,cocos creator生成后的文件相对小很多,所以打算试试cocos creator开发小游戏,我的cocos creator版本是最新的3.7,也看了相关视频不过都是老版本的所以很多使用方法有很大的不同。


1:坐标问题

视频教程上开发2D游戏 把物体放在Canvas外面,但是cocos creator3.7放在Canvas外面就无法显示,教程上因为放在Canvas外面所以0.0坐标位置是左下角,但是放在Canvas里0.0是在Canvas中间,比如触摸按住物体移动,这个时候如果是前者按照教程的演示可以把触摸点获取的坐标直接赋值给游戏物体进行移动操作

如代码

        input.on(Input.EventType.TOUCH_MOVE,(e)=>{
           
            console.log("Input.EventType.TOUCH_MOVE",e.getLocation());
             this.node.setPostion(e.getLocation()) //直接移动物体
       })

如果是Canvas里的物体上面代码执行就有问题了,因为触摸获取的坐标和物体坐标不是相同的

需要如下代码

 let delta =  e.getUIDelta();

获取偏移量通过当前物体加上偏移位置能控制物体跟随触摸移动


2:事件监听的问题

如以下代码打印会输出几百次,我预想触摸一次应该只是一次


        input.on(Input.EventType.TOUCH_START,(e)=>{
           
            console.log("Input.EventType.TOUCH_START",e.getLocation());
            this.isfire = true
       })

所以当我在
Input.EventType.TOUCH_MOVE事件中发射子弹就会遇到很神奇的事情,发射子弹的方法就会执行几百次,虽然我通过代码进行了子弹发射的间隔控制代码如下

这里currCreateTime =1

                      
                            this.currCreateTime += deltaTime
                            if(this.currCreateTime  > this.createBulletTime){
                                //超过子弹发送间隔时间就发送 
        
                                 this.currCreateTime = 0
                                this.fire();
        
                            }

除非通过currCreateTime修改成几百那相对好一点但是并没有达到预期效果

后来发现把发送子弹的方法放在外面(update里面,事件监听外面)就一切正常。

所以通过以上现象我的理解事件监听里代码会重复执行很多次,比预想的还要多,这样不知道性能影响是不是很大。

当然以上是我个人狭隘的理解,欢迎cocos大牛指点

最近发表
标签列表