上课的时候我们要做自己的游戏,我想让它在开始某个场景后,等待5秒才能播放一个精灵。这是可行的。但是在它播放一次之后,我想把那个精灵做成一个按钮。我试过添加另一个精灵表最后一帧的文件,并添加一个黄色的轮廓(这样玩家就可以看到它是可点击的)。只要加载新的sprite并使其成为一个按钮就可以了。但是我不希望按钮从一开始就被添加,只有在原始sprite播放了一次5秒后才添加。我尝试使用setTimeout来实现这一点,但是现在它根本没有加载精灵/按钮。精灵是一封从前门掉下来的信(letterbox?)。所以在字母掉到地板上之后,我不想让它可点击,所以它会移到下一个场景。我对JavaScript很陌生,我从来没有使用过命令setTimeout,所以我只想知道我是否正确地使用了它,如果没有,如何修复它。我尝试了两种方法,我在网上找到:
第一章:
function deurKnop(){
var deurButton = this.add.sprite(111, 289, 'klik_deur', 1).setScale(1);
deurButton.setInteractive({ cursor: 'pointer' });
deurButton.on('pointerdown', () => { this.scene.start("gameScene2"); deurButton.setFrame(0); });
deurButton.on('pointerover', () => { deurButton.setFrame(0); });
deurButton.on('pointerout', () => { deurButton.setFrame(1); });
};
setTimeout(deurKnop, 6000);
二:
setTimeout(function{
var deurButton = this.add.sprite(111, 289, 'klik_deur', 1).setScale(1);
deurButton.setInteractive({ cursor: 'pointer' });
deurButton.on('pointerdown', () => { this.scene.start("gameScene2"); deurButton.setFrame(0); });
deurButton.on('pointerover', () => { deurButton.setFrame(0); });
deurButton.on('pointerout', () => { deurButton.setFrame(1); });
}; ,6000);
但这两个都不起作用。这是整个场景的代码,如果有帮助的话:
//scene 1, woonkamer
gameScene1.preload = function() {
this.load.spritesheet('brievenbus', 'assets/sprites/brievenbus.PNG', { frameWidth: 280, frameHeight: 359 });// Nu werkt het!!!
this.load.spritesheet('openhaard', 'assets/sprites/openhaard.png', { frameWidth: 381, frameHeight: 672 });
this.load.spritesheet('klik_deur', 'assets/sprites/klikdeur.png', { frameWidth: 146, frameHeight: 192 });
this.load.image('woonkamer', 'assets/backgrounds/woonkamer.JPG');
this.load.image('woonkamer_deur', 'assets/backgrounds/woonkamer_deur.JPG');
};
gameScene1.create = function() {
this.add.image(400, 279.5, 'woonkamer_deur');
deur = this.physics.add.sprite(108, 288, 'brievenbus').setScale(0.49);
vuur = this.physics.add.sprite(650, 320, 'openhaard').setScale(0.15);
this.anims.create({
key: 'go',
frames: this.anims.generateFrameNumbers('brievenbus', { frames: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] }),
frameRate: 23,
delay: 5000,
repeat: 0
});
deur.anims.play('go', true);
this.anims.create({
key: 'Go',
frames: this.anims.generateFrameNumbers('openhaard', { frames: [0, 1, 2, 3, 4, 5] }),
frameRate: 12,
repeat: -1
});
vuur.anims.play('Go', true);
function deurKnop(){
var deurButton = this.add.sprite(111, 289, 'klik_deur', 1).setScale(1);
deurButton.setInteractive({ cursor: 'pointer' });
deurButton.on('pointerdown', () => { this.scene.start("gameScene2"); deurButton.setFrame(0); });
deurButton.on('pointerover', () => { deurButton.setFrame(0); });
deurButton.on('pointerout', () => { deurButton.setFrame(1); });
};
setTimeout(deurKnop, 6000);
};
所以基本上“brievenbus”的动画在开始这个场景的5秒钟后发生。我希望按钮在6秒钟后显示和添加。
1条答案
按热度按时间ilmyapht1#
解决setTimeout中
this
含义丢失的一种方法是使用箭头函数使用
function name_etc(){ actions_etc... }
方式定义函数时,this
变量不再引用父this
。但是,如果使用
()=>{ actions_etc... }
定义函数,则this
的含义将保留在setTimeout函数中。