簡體   English   中英

如何在Cocos2d Javascript中創建類似於Java的自定義類/對象並將其添加到圖層

[英]How do I create custom Java-like class/object in Cocos2d Javascript and add it to a layer

我已經用Java編寫了一個相當簡單的體育游戲,現在我正努力在Cocos2d Javascript中做同樣的事情,而我真的是新手。

我在Java中所做的並且想在這里做的就是能夠單擊按鈕創建Sprite,並將該Sprite添加到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 );

   }



 });

這似乎是一個不錯的主意,但似乎行不通...

我將上面的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++;
}

並將我的Pl​​ayer.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),同時還為我提供了一種設置和訪問與該精靈相關聯的其他屬性的方法。

它現在似乎可以正常工作,但是我不確定這是否是解決此問題的最佳方法,即使它可能引起比以后解決的問題更多的問題。 目前,我不確定我是否確切地理解了引用結構的工作原理,即我什么時候使用對象本身以及什么時候使用副本,並且這很重要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM