Phaser 游戏 JS 中的这个
2015-05-07
1919
所以我最近开始学习 JS,现在尝试使用 Phaser 制作游戏。 在下面的代码中,
1- 作者是否使用“this”来引用 mainState? 2- 没有为 bird 定义变量。那么它将数据存储在哪里?
// Initialize Phaser, and creates a 400x490px game
var game = new Phaser.Game(400, 490, Phaser.AUTO, 'gameDiv');
// Creates a new 'main' state that will contain the game
var mainState = {
// Function called first to load all the assets
preload: function() {
// Change the background color of the game
game.stage.backgroundColor = '#71c5cf';
// Load the bird sprite
game.load.image('bird', 'assets/bird.png');
// Load the pipe sprite
game.load.image('pipe', 'assets/pipe.png');
},
// Fuction called after 'preload' to setup the game
create: function() {
// Set the physics system
game.physics.startSystem(Phaser.Physics.ARCADE);
// Display the bird on the screen
this.bird = this.game.add.sprite(100, 245, 'bird');
// Add gravity to the bird to make it fall
game.physics.arcade.enable(this.bird);
this.bird.body.gravity.y = 1000;
// Call the 'jump' function when the spacekey is hit
var spaceKey = this.game.input.keyboard.addKey(Phaser.Keyboard.SPACEBAR);
spaceKey.onDown.add(this.jump, this);
// Create a group of 20 pipes
this.pipes = game.add.group();
this.pipes.enableBody = true;
this.pipes.createMultiple(20, 'pipe');
// Timer that calls 'addRowOfPipes' ever 1.5 seconds
this.timer = this.game.time.events.loop(1500, this.addRowOfPipes, this);
// Add a score label on the top left of the screen
this.score = 0;
this.labelScore = this.game.add.text(20, 20, "0", { font: "30px Arial", fill: "#ffffff" });
},
2个回答
您发布的代码中的 this 指的是您推断出的 mainState。使用 this.valueName 会在 mainState 对象上创建一个新值。
有关 this 关键字的更多信息以及它在不同位置使用时所指的含义,请参阅 此链接 。链接页面中的此示例与您的代码相关:
var o = {
prop: 37,
f: function() {
return this.prop;
}
};
console.log(o.f()); // logs 37
它像往常一样存储数据,出于所有意图和目的,它执行的功能与在函数外部正常添加另一个值相同。并且可以通过 mainState.bird 访问。
var mainState = {
bird : game.addBird(...)
}
Robin
2015-05-07
-
是的,
mainState
对象函数中的this
关键字指向mainState
对象本身。 -
bird
变量在mainState
对象本身上定义如下:// 在屏幕上显示鸟 this.bird = this.game.add.sprite(100, 245, 'bird');
famousgarkin
2015-05-07