0

我用 Java 编写了一个相当简单的体育游戏,现在我正在努力在 Cocos2d Javascript 中做同样的事情,我真的很陌生。

我在 Java 中所做的并且想要在这里做的是能够在单击按钮时创建一个 Sprite,并将该 sprite 添加到一个 sprite 数组中。棘手的部分是我希望能够在这些精灵中添加和访问特定的属性和功能,以改变它们的位置,检查它们是否有球,给它们一个球等。我想我有子类的东西,而且最对我来说合乎逻辑的是精灵类,但我不确定这是否是子类的正确类或如何有效地这样做。

例如。

var player = Player.create(somepicturefile);
this._players.push(player);
this._players[1].hasBall = true;

我在java中能够做的是使用这些类来保存和加载团队表单文件并只移动那些没有移动的球员,传球等等,但希望现在让精灵出现在屏幕上会是一个奖励:)

到目前为止我所拥有的截断版本......

var MakePlan = cc.LayerColor.extend({


  _players:[],
  _playernumber: 0,


 ctor:function() {

    // Rest of file...
    this._super();

    cc.associateWithNative( this, cc.LayerColor );
},

onEnter:function () {
    this._super();

this.addPlayer();

},

addPlayer:function() {

    var player = Player.create(s_player);
    this.addChild(player);

    this._players.push(player);

    this._playernumber++;

 }


});


MakePlan.create = function () {
  var sg = new MakePlan();
  if (sg && sg.init(cc.c4b(255, 255, 255, 255))) {
      return sg;
   }  
   return null;
};


MakePlan.scene = function () {
  var scene = cc.Scene.create();

  var layer1 = MakePlan.create();
  scene.addChild(layer1,0);

   return scene;
};

 var Player = cc.Sprite.extend ({

  _hasMoved: false,
   _hasBall: false,


    ctor:function() {

    // Rest of file...
    this._super();

    cc.associateWithNative( this, cc.Sprite );

   }



 });

这似乎是一个不错的想法,但它似乎不起作用......

4

1 回答 1

0

我将上面 MakePlan Js 文件中的 onEnter 和 addPlayer 函数更改为..

    onEnter:function () {


    this._super();
    this.addPlayer();
    //just check the first player in array got the value for hasBall
    var doesplayerhaveball = this._players[0].getHasBall();
    cc.log(doesplayerhaveball);

},


    addPlayer:function() {

    var player = new Player(s_player);
    player.setPlayerSpritePos(winSize.width/2,winSize.height/2);
    player.setHasBall(true);
    player.setHasBall(false);

    this.addChild(player.getPlayerSprite(), 3);


    this._players.push(player);

    this._numberOfPlayers++;
}

并将我的 Player.Js 文件/函数/类(不知道该怎么称呼它)更改为...

function Player(image) {

this._testsprite =   cc.Sprite.create(image);
this._hasMoved = false;
this._hasBall = false;

}

Player.prototype._testsprite;
Player.prototype._hasMoved;
Player.prototype._hasBall;

Player.prototype.getPlayerSprite = function() {
    return this._testsprite;
}
Player.prototype.setPlayerSpritePos = function (x,y) {

    this._testsprite.setPosition(x,y);
}
Player.prototype.setHasMoved = function (bool) {

    this._hasMoved = bool;
}
Player.prototype.setHasBall = function (bool) {

    this._hasBall = bool;
}

Player.prototype.getHasMoved = function() {

   return this._hasMoved;
}
Player.prototype.getHasBall = function() {

    return this._hasBall;
}

这使我可以获取并添加精灵,访问并在其上运行操​​作(如 cc.MoveTo 和 cc.setScale),同时为我提供了一些方法来设置和访问与该精灵相关的其他属性。

它现在似乎可以工作,但我不确定这是否是解决此问题的最佳方法,或者即使它可能会导致比以后解决的问题更多的问题。目前我不确定我是否完全理解引用结构的工作原理,即我何时使用对象本身以及何时使用副本,这是否重要。

于 2013-08-18T14:38:40.197 回答