0

Java でかなり単純なスポーツ ゲームを作成しましたが、今は Cocos2d Javascript で同じことをしようと奮闘しています。

私が Java で行ったことで、ここでやりたいことは、ボタンのクリックでスプライトを作成し、そのスプライトをスプライトの配列に追加できるようにすることです。トリッキーな部分は、位置を変更したり、ボールを持っているかどうかを確認したり、ボールを与えたりするために、それらのスプライトに特定のプロパティと関数を追加してアクセスできるようにしたいことです。私にとって論理的なのはスプライトクラスですが、これがサブクラス化するのに適切なクラスであるかどうか、または効果的にサブクラス化する方法がわかりません。

例えば。

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 に答える