反复new cc.Node() 导致某些action失效

cc.Class({
extends: cc.Component,

properties: {
    bg:cc.Node,
    // foo: {
    //    default: null,      // The default value will be used only when the component attaching
    //                           to a node for the first time
    //    url: cc.Texture2D,  // optional, default is typeof default
    //    serializable: true, // optional, default is true
    //    visible: true,      // optional, default is true
    //    displayName: 'Foo', // optional
    //    readonly: false,    // optional, default is false
    // },
    // ...
},

// use this for initialization
onLoad: function () {
    
  this.bg.runAction(cc.sequence(cc.moveBy(1, cc.p(-1136, 0))).repeatForever());
  this.node.runAction(cc.sequence(cc.delayTime(0.2),cc.callFunc(function(){
      for(var i=0,lenI=200;i<lenI;i++)
      {
        var pfbEnemy = new cc.Node();
        pfbEnemy.parent=this.node;
      }
     
  }.bind(this))).repeatForever());
},
update:function(){
    if (this.bg.getPosition().x <= -1136) {
        this.bg.setPositionX(0);
     
    }
    console.log("this.bg.getPositionX:"+this.bg.getPositionX());
}
// called every frame, uncomment this function to activate update callback
// update: function (dt) {

// },

});
bg随便弄个1136 宽的layer 铺满屏幕 就可以了 然后不停的插入node,发现bg移动越来越慢,隔个20s左右你会发现log中的bg的坐标固定了!!!!!背景全黑了
难道new cc.Node不该这样写了吗

还是我哪弄错了 求大神指教

我用的1.3.3

应该用instantiate的动态加载吧。 你这个是静态方法。
而且如果node多的话,可以用对象池。

instantiate 是初始化prefab吗 这个貌似会更卡点

是这个问题吗

你不停得插入 Node,每个 Node 的组件在 onLoad 的时候,都对 bg 做 moveBy(1, cc.p(1136, 0)) 的操作,也就是说每个 Node 让 bg 每隔 1 秒(60帧)往左移 1136 像素。假设添加了 60 个 Node,那么60 个 moveBy 叠加起来的效果,不就是一帧内往左移 1136 吗?那么在你的 update 里面,就会重新设置 position 为 0。

这个原理就好像车轮足够快的时候,有些时候给人感觉好像静止了一样。。。

1赞

另外,下次标题拜托别那么惊悚。。。。。。长此以往,我们遇到真正引擎的问题都不好识别了,伤害社区啊。。。

1赞

感谢你的回复 我对标题惊悚话感到抱歉 请问你说的是指我的200个循环 的new cc.Node 会调用到 action本身的onload吗 就是再跑200次 moveBy?

可以把你 new cc.Node 的逻辑发出来看看

TestFrame.zip (537.2 KB)传了 大概意思就是我要初始化敌人 ,背景做循环移动(这里只是单个图片做例子),起初以为是prefab卡 后来改成了node,后来我改放在了update中做背景移动是对的(但理论上repeatForever的action也不会消失吧),虽然在update解决了背景移动的问题,但时间跑的越长背景移动就会一顿顿的就会越明显

这个 demo 无法重现你说的 bg 移动变慢最后静止的现象

你那bg移动会卡顿吗? 我用的1.3.3 你的是哪个版本呢

卡顿会,CPU Profile 一下就知道了,你的创建节点代码和运行 action 代码损耗太高导致的

做飞机游戏么?算法太蠢啦,哈哈。

我改用NodePool的方式可 效率明显改善:grin:

谢谢大家 creator还是很棒地

测试1.4正式版 已不会出现这个问题