如何解决Phaser 在关键事件期间因玩家未定义而引发错误
config.js
var config = {
width: 800,height: 600,type: Phaser.AUTO,physics: {
default: "arcade",arcade: {
gravity: { y: 200 },},scene: [EvoGame],};
var game = new Phaser.Game(config);
evogame.js
class EvoGame extends Phaser.Scene {
constructor() {
super("EvoGame");
}
preload() {
this.load.image("Squittle","assets/squittle.png");
}
create() {
let player = this.physics.add.image(400,300,"Squittle");
player.setBounce(0.2);
player.setCollideWorldBounds(true);
this.input.keyboard.on(
"keydown-D",function (player) {
this.image.setVeLocityX += 10;
},this
);
}
update() {}
}
当我尝试使用 D 键移动图像时,出现错误
Uncaught TypeError: Cannot read property 'setVeLocityX' of undefined
at EvoGame.<anonymous> (evogame.js:18)
at Keyboardplugin.emit (phaser.js:1906)
at Keyboardplugin.update (phaser.js:185828)
at EventEmitter.emit (phaser.js:1905)
at onKeyDown (phaser.js:92223)
我在 create() 中定义了播放器,如果我在没有 let、var 或 const 的情况下执行此操作,则它根本不会渲染播放器图像。我正在使用 Phaser 构建游戏,除此之外,它只是纯 html、css 和 javascript。
当我在 create() 函数中 console.log 播放器时,它显示了一个 x = 400 的对象,这是我最初设置它的地方。我尝试使用 this.player.x 访问它,但它仍然显示未定义。
解决方法
我找到了解决方案。我不确定它最终是否会成为永久解决方案或以后会引起问题。我会把它贴在这里,以防万一有人想查看,或者如果其他人有类似的解决方案并想尝试一下。
基本上与这个块有关。
create() {
let player = this.physics.add.image(400,300,"Squittle");
player.setBounce(0.2);
player.setCollideWorldBounds(true);
this.input.keyboard.on(
"keydown-D",function (player) {
this.image.setVelocityX += 10;
},this
);
既然我在 player 变量中定义了图像,我应该一直在键盘事件函数中使用该变量。它也不需要使用“this”,而且我只需使用 player.x 就可以访问 x 属性。
新功能是:
create() {
let player = this.physics.add.image(400,"Squittle");
player.setBounce(0.2);
player.setCollideWorldBounds(true);
console.log(this.player);
this.input.keyboard.on("keydown-D",function (event) {
player.x += 10;
});
}
第二部分:将 'let player' 更改为 this.player 也允许在更新函数中使用 player 变量。 'let player' 和 'player.x' 最终成为我认为的临时解决方案,而 this.player 使其更易于访问。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。