2

Android (Nexus 5、Android 4.4.4) で「無効なネイティブ オブジェクト」エラーが発生します。ブラウザ版ではエラーはありません。

アプリのコード部分を新しい helloworld アプリに入れました。エラーが表示される行 59 を以下に示します。これは、ADB からの logcat メッセージです。

D/cocos2d-x デバッグ情報 (32165): jsb: エラー: ファイル /Applications/MAMP/htdocs/test_actions/frameworks/runtime-src/proj.android/../../js-bindings/bindings/auto/jsb_cocos2dx_auto .cpp: Line: 3955, Function: js_cocos2dx_Node_runAction D/cocos2d-x debug info(32165): Invalid Native Object D/cocos2d-x debug info(32165): JS: assets/src/app.js:59:Error: Invalidネイティブ オブジェクト D/cocos2d-x デバッグ情報 (32165):

これがコードです。

var HelloWorldLayer = cc.Layer.extend({ sprite:null, ctor:function () {

  var self = this;
    //////////////////////////////
    // 1. super init first
    this._super();

    /////////////////////////////
    // 2. add a menu item with "X" image, which is clicked to quit the program
    //    you may modify it.
    // ask director the window size
    var size = cc.director.getWinSize();

  // Load sprite frames to frame cache, add texture node
    cc.spriteFrameCache.addSpriteFrames(res.murbiks_plist);
    var murbiksImages  = cc.SpriteBatchNode.create(cc.textureCache.addImage(res.murbiks_png));
  self.addChild(murbiksImages);

  var anims = {};
  var loadFrames = function(name,cnt) {
      var frames = [];
      for (var i = 1; i <= cnt; i++) {
          str = name + (i < 10 ? ("0" + i) : i);
          frames.push(cc.spriteFrameCache.getSpriteFrame(str));           
      }
      var anim = cc.Animation.create(frames, 0.06);
      anim.retain();
      anims[name] = cc.animate(anim);
  }

  loadFrames("mostafa_fly",9);
  loadFrames("mostafa_land",7);

    var mostafa = cc.Sprite.create(res.murbiks_single_png);        
    mostafa.attr({
      x: 0,
      y: 0,
      scale: 1.9,
      rotation: 0
  });
    mostafa.retain();
  self.addChild(mostafa, 5);

  var animAction = mostafa.runAction(cc.repeatForever(anims.mostafa_fly)),
  bezierMostafa = [
      cc.p(0,0),
        cc.p(200,520),
        cc.p(500,220)
  ];

  var mostafaAction = mostafa.runAction(
          cc.sequence(
              cc.bezierTo(2.5, bezierMostafa),
              cc.callFunc(function() {
              self.stopAction(animAction);
                  animAction = mostafa.runAction(anims.mostafa_land); // LINE 59, INVALID NATIVE OBJECT
              })
          )
      ); 

   return true;

} });

それは何でしょうか?

4

1 に答える 1

3

murbiksImages は、retain() も呼び出す必要があります

一般に、「無効なネイティブ オブジェクト」とは、ネイティブ コードで一部のオブジェクトが削除されたことを意味します。これは通常、オブジェクトが保持を呼び出さなかった場合に発生します。

また、SpriteBatchNode は cocos2d-x3.0 で廃止されました。

cocos2d-jsでも非推奨になるので使わないほうがいいです

于 2014-08-08T08:57:04.267 に答える