我刚刚开始使用Phaser创建Javascript游戏,并对“this”关键字有疑问。
此是否指当前状态(rainState)?
我假设 this.emitter = this.game.add.emitter(100,0,400); 在存储发射器对象的rainState对象上创建一个emitter属性?
游戏是国家的财产吗?为什么写 this.game.add.emitter 而不是 this.add发射器
// --------------------------------------------- ----
var Smash = Smash || {};
Smash.rainState = {
create: function() {
this.emitter = this.game.add.emitter(this.game.world.centerX, 0, 400);
this.emitter.width = this.game.world.width;
this.emitter.angle = 30;
this.emitter.makeParticles('particle');
this.player = new Smash.Player(this.game, 100, 300, 'player');
this.intro0();
},
intro0: function() {
this.player.animations.play("run", 9, true);
},
};
答案 0 :(得分:1)
这是指当前状态(rainState)吗?
答案取决于它的调用方式。
如果它被称为rainState
对象的方法,则上下文(this
)将被设置为rainState
对象:
Smash.rainState.create();
使用call
,apply
或bind
,您可以传入您想要的任何范围作为参数:
Smash.rainState.create.call(foo); //immediately invoked
Smash.rainState.create.apply(foo); //immediately invoked
var bar = Smash.rainState.create.bind(foo); //reference to a newly created bound function
我假设this.emitter = this.game.add.emitter(100,0,400);在存储发射器对象的rainState对象上创建一个emitter属性?
当您为this.emitter
分配值时,系统会将其添加为对象rainState
的属性。
Smash.rainState = {
create: function() {
console.log(Smash.rainState.emitter); //undefined
this.emitter = this.game.add.emitter(this.game.world.centerX, 0, 400);
console.log(Smash.rainState.emitter); //[object Object]
},
};
游戏是国家的财产吗?为什么写this.game.add.emitter而不是this.add发射器
根据您提供的代码,game
似乎不是rainState
的方法或属性。此外,this.add
不是object
类型的内置函数。除非game
已作为rainState
的属性添加到其他位置,否则您需要以其他方式引用它。
全局:
var game = new Phaser.Game();
var Smash = Smash || {};
Smash.rainState = {
create: function() {
this.emitter = game.add.emitter(this.game.world.centerX, 0, 400);
作为从上下文中存在game
的地方传入的参数:
Smash.rainState = {
create: function(game) {
this.emitter = game.add.emitter(this.game.world.centerX, 0, 400);
}
}
//a context where game is a property
{
this.game = new Phaser.Game();
Smash.rainState.create(this.game);
}
Phaser有一些特定的设置,围绕如何在不同的上下文中引用game
类的Phaser.Game
实例化:
“Via”:如果某个类在via列中有一个条目,则表示您可以通过本地引用快速访问它。即您可以通过任何州的this.camera控制相机,如果游戏已全局定义,则可以通过game.camera控制相机。
这意味着如果您在全局范围内(任何game
之外)初始化了{}
实例,那么您应该能够全局调用它。在代码中查找类似的内容并确保它不在另一个函数或对象中:
var game = new Phaser.Game(800, 600, Phaser.AUTO, 'phaser-example', { preload: preload, create: create, update: update, render: render });