我是 Phaser.js 和 Javascript 的初学者。我正在制作一款游戏,但遇到了一个错误,我不知道如何修复它。 我想我可以解释为什么会发生这种情况:当我调试 phisics 组 SpritesPlatform 时显示它不是未定义的..我不知道为什么..
这是我遇到错误的文件(我无法将整个应用程序放在这里,因为有很多文件,但问题仅涉及此文件,并且 Sprite 被加载到另一个文件中)。
文件 game.js (main.js)
MyGame.Game = function (game) {
this.game; // a reference to the currently running game (Phaser.Game)
this.add; // used to add sprites, text, groups, etc (Phaser.GameObjectFactory)
this.load; // for preloading assets (Phaser.Loader)
this.stage; // the game stage (Phaser.Stage)
this.state; // the state manager (Phaser.StateManager)
this.world; // the game world (Phaser.World)
this.physics; // the physics manager (Phaser.Physics)
};
MyGame.Game.prototype = {
init: function () {
this.game.renderer.renderSession.roundPixels = true;
this.physics.startSystem(Phaser.Physics.ARCADE);
this.physics.arcade.gravity.y = 800;
},
create: function () {
// background color bleu
this.stage.backgroundColor = 0x479cde;
//add sprites into physics group
SpritesPlatform = this.game.add.physicsGroup();
a = SpritesPlatform.create(0, 150, 'sprite');
a.scale.setTo(0.2, 0.2);
b = SpritesPlatform.create(79, 187, 'sprite2');
b.scale.setTo(0.2, 0.2);
c = SpritesPlatform.create(300, 100, 'sprite3');
c.scale.setTo(0.4, 0.4);
SpritesPlatform.setAll('body.allowGravity', false);
SpritesPlatform.setAll('body.immovable', true);
SpritesPlatform.setAll('body.velocity.x', 150);
//test to see if the group contains the sprites
/*var i = 0;
for (var i = 0, len = SpritesPlatform.children.length; i < len; i++) {
console.log(SpritesPlatform.children[i]);
}*/
//debug
console.log(this.game.SpritesPlatform); // prints undefined .. why???
},
// repeat the mouvement of the sprites when it crosses the screen
wrapSprites: function (SpritesPlatform) {
if (SpritesPlatform.body.velocity.x < 0 && SpritesPlatform.x <= -160)
{
SpritesPlatform.x = 800;
}
},
update: function () {
console.log(this.game.SpritesPlatform); // prints undefined also of course... ?? why??
//the error is here ... if i put this in comment the code will display the board and the sprite ...
//this.game.SpritesPlatform.forEach(this.game.wrapSprites, this.game);
},
};
问题出在更新函数中://this.game.SpritesPlatform.forEach(this.game.wrapSprites, this.game);
看起来 SpritesPlatform 未定义,我不明白为什么以及我缺少什么。
感谢您的帮助。
最佳答案
当你第一次创建组时,你必须这样声明它:
this.SpritesPlatform = this.game.add.physicsGroup();
无论何时您想引用该组,都可以使用 console.log(this.SpritesPlatform)
编辑:
你实际上不必做那样的事情
MyGame.Game = function (game) {
this.game; // a reference to the currently running game (Phaser.Game)
this.add; // used to add sprites, text, groups, etc (Phaser.GameObjectFactory)
this.load; // for preloading assets (Phaser.Loader)
this.stage; // the game stage (Phaser.Stage)
this.state; // the state manager (Phaser.StateManager)
this.world; // the game world (Phaser.World)
this.physics; // the physics manager (Phaser.Physics)
};
所有这些属性都很容易访问,因此您可以在状态内的任何地方使用它们。这应该可以正常工作:
MyGame.Game = function () {
};
关于javascript - Phaser.js,javascript,未捕获的类型错误 : Cannot read property 'forEach' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33821427/