Javascript 我能';t似乎无法访问对象';使用自定义平铺对象在Phaser中创建原型方法。我做错了什么?

Javascript 我能';t似乎无法访问对象';使用自定义平铺对象在Phaser中创建原型方法。我做错了什么?,javascript,phaser-framework,Javascript,Phaser Framework,我在Phaser中扩展了一个基本的Sprite对象,以包含一些附加功能,主要是使用快捷文字切换纹理的功能。然而,当我尝试访问该方法时,我得到 “hex.switchSprite不是函数” 经过一些基础研究,大多数答案都说包括了原型——然而。。它已经在方法中了。这就是我到目前为止看到的对象本身。出于测试目的,已删除switchSprite中的所有内容: hexTile = function(game, x, y) { Phaser.Sprite.call(this, game, x, y,

我在Phaser中扩展了一个基本的Sprite对象,以包含一些附加功能,主要是使用快捷文字切换纹理的功能。然而,当我尝试访问该方法时,我得到

“hex.switchSprite不是函数”

经过一些基础研究,大多数答案都说包括了原型——然而。。它已经在方法中了。这就是我到目前为止看到的对象本身。出于测试目的,已删除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;
我遵循了Phaser文档中的示例,当我不使用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,我只得到上面的错误。

观察:您正在覆盖您的原型:

hexTile.prototype.switchSprite = function(name)
{

}

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

switchSprite
函数添加到
hexTile
后,可以设置
prototype
。尝试切换这两条语句的顺序。

您已将原型替换为另一个对象。这就是为什么
switchSprite
不再存在的原因。在用从
Phaser.Sprite
创建的对象替换原型后,移动
switchSprite
的声明,就是这样!多伊,谢谢。这有一秒钟是违反直觉的。其他一切似乎都是绝对正确的。