2016-08-02 7 views
1

Phaserの基本的なSpriteオブジェクトを拡張して、いくつかの追加機能、主にショートカットワードでテクスチャを切り替える機能を追加しました。しかし...それはすでにだ - しかし、私はメソッドにアクセスしようとすると、私はいくつかの基本的な研究の後私はカスタムのタイルオブジェクトを持つPhaserのオブジェクトのプロトタイプメソッドにアクセスできないようです。私は間違って何をしていますか?

「hex.switchSpriteは関数ではありません」

を取得し、回答のほとんどは.prototypeを含めるように言っていますこの方法ではこれは私がこれまで持っていたオブジェクトそのものです。 switchSpriteですべてがテスト目的のために削除されました:

hexTile = function(game, x, y) 
{ 
    Phaser.Sprite.call(this, game, x, y, 'masterTileSheet', 'Gemstone_Missing'); 
    this.scale.x = 0.75; 
    this.scale.y = 0.75; 
    this.anchor.x = 0.5; 
    this.anchor.y = 0.5; 
} 

hexTile.prototype.switchSprite = function(name) 
{ 

} 

hexTile.prototype = Object.create(Phaser.Sprite.prototype); 
hexTile.prototype.constructor = hexTile; 

私は、フェイザーのドキュメントに記載された例に続いて、私はswitchSpriteを使用していないとき、それは動作します:

var hex = new hexTile(game, 0, 0); 
var point = calculateGrid(x,y); 
hex.x = point.x; 
hex.y = point.y; 

gameContainer.add(hex); 

//console.log(returnRandomHex()); 

hex.switchSprite(); 

以上であります私はそれにアクセスし、それを実行している - それは正しいはずですが、switchSpriteのために私はちょうど上記のエラーを取得します。

+0

プロトタイプを別のオブジェクトに置き換えました。そのため、 'switchSprite'はもはや存在しません。プロトタイプを 'Phaser.Sprite'から作成したオブジェクトに置き換えた後に、' switchSprite'の宣言を移動してください。 – slebetman

答えて

2

観察:あなたのプロトタイプを上書きしている:

hexTile.prototype.switchSprite = function(name) 
{ 

} 

hexTile.prototype = Object.create(Phaser.Sprite.prototype); 

あなたは後hexTileprototypeを設定し、あなたがそれにswitchSprite機能を追加しました。これら2つのステートメントの順序を入れ替えてみてください。

+0

それでした! Doi、ありがとう。それは直感に反して1秒でした。他のすべては絶対に正しいと思われました。 – Merlin

関連する問題