未捕获的TypeError:无法读取未定义的属性“set”

时间:2017-07-13 12:52:06

标签: javascript phaser-framework

我已经制作了一个构造函数(并将其放在preload函数之上),就像这样

character = function(CharX,CharY,CharSpeed){
this.x = CharX ;
this.y =  CharY;
this.speed = CharSpeed;
this.AddSpriteSheet = function (SprX,SprY,key) {
this.character = game.add.sprite(SprX,SprY,key);}
};

稍后在创建功能中我添加了

var Char1 = new character(game.world.width*0.5,game.world.height*0.5,5);
Char1.AddSpriteSheet(game.world.width*0.5,game.world.height*0.5,'character');
Char1.anchor.set(50,50);

控制台读取

  

“未捕获的TypeError:无法读取未定义的属性'set'”

我做错了什么?

编辑:让错误更明显

3 个答案:

答案 0 :(得分:0)

您的构造函数character没有属性anchor,因此Char1.anchor不存在,Char1.anchor.set也不存在。

答案 1 :(得分:0)

您正在制作一个自定义类来表示一个角色,但它不是Phaser Sprite,因此它没有Sprite所做的任何方法/属性,除非您定义它们你自己。如果你想创建自己的类来扩展Phaser.Sprite,我建议你看看this forum postthis example。只需谷歌搜索"移相器扩展精灵"将帮助您找到其他一些资源。

基本上,你需要做这样的事情:

function Character(game, x, y) {   
    Phaser.Sprite.call(this, game, x, y, 'sprite key');   
    // define other properties for your character
}
Character.prototype = Object.create(Phaser.Sprite.prototype);
Character.prototype.constructor = Character;

然后你会将所有角色的方法添加到原型中。

答案 2 :(得分:0)

'set'的未定义“bca”设置“是Pixi的比较”setTo“Phaser的

Char1.anchor.set(50,50); 替换为 Char1.anchor.setTo(0.5); // 0.5,0.5将指向精灵正方形的中心,如果这是意图。 这也是.scale.setTo();

的真相

如果你从创建函数创建新的原型对象,我建议你遵循这个例子https://phaser.io/examples/v2/games/tanks