试图使随机精灵可点击
Trying to make a random sprite clickable
我想问一下 Whosebug 的专家,因为我知道大部分时间我都在这里找到答案,我想感谢社区提供这个网站上的所有大量信息,我有点卡住了小小的学习项目我开始了,任何帮助将不胜感激,这是我下面的代码(我将在代码下面解释这个问题):
this.load.atlas('enemies', 'enemies.png','enemies.json'); ####This goes on preload function
#####everything below I added to create function
var monsterData = [
{name: 'Aerocephal', image: 'aerocephal'},
{name: 'Arcana Drake', image: 'arcana_drake'},
{name: 'Aurum Drakueli', image: 'aurum-drakueli'},
{name: 'Bat', image: 'bat'},
{name: 'Daemarbora', image: 'daemarbora'},
{name: 'Deceleon', image: 'deceleon'},
{name: 'Demonic Essence', image: 'demonic_essence'},
{name: 'Dune Crawler', image: 'dune_crawler'},
{name: 'Green Slime', image: 'green_slime'},
{name: 'Nagaruda', image: 'nagaruda'},
{name: 'Rat', image: 'rat'},
{name: 'Scorpion', image: 'scorpion'},
{name: 'Skeleton', image: 'skeleton'},
{name: 'Snake', image: 'snake'},
{name: 'Spider', image: 'spider'},
{name: 'Stygian Lizard', image: 'stygian_lizard'}
];
var monsters = this.add.group();
var monster;
let currentmonster = Phaser.Utils.Array.GetRandom(monsterData);
monsterData.forEach(function(data) {
monster = monsters.create(400,300, 'enemies', currentmonster.image).setOrigin(0.5);
monster.details = data;
});
monster.on('pointerdown', function (pointer) {
this.setTint(0xff0000);
});
monster.on('pointerout', function (pointer) {
this.clearTint();
});
monster.on('pointerup', function (pointer) {
this.clearTint();
});
基本上我的怪物确实按预期生成,每次我刷新页面时它们都会改变 sprite,但是点击功能不起作用,它根本不会点击它,没有任何反应,没有错误在控制台上什么都没有,我是否错误地接近了这个?非常感谢任何建议。
我的主要功能类似于本教程中的功能:Tutorial
您缺少让 Phaser 知道游戏对象应该侦听输入事件的 setInteractive()
方法。
修改这一行:
monster = monsters.create(400,300, 'enemies', currentmonster.image).setOrigin(0.5);
改成这样:
monster = monsters.create(400,300, 'enemies', currentmonster.image).setOrigin(0.5).setInteractive();
您可以阅读有关 setInteractive in the Phaser 3 Docs for Sprite 的更多信息。
我想问一下 Whosebug 的专家,因为我知道大部分时间我都在这里找到答案,我想感谢社区提供这个网站上的所有大量信息,我有点卡住了小小的学习项目我开始了,任何帮助将不胜感激,这是我下面的代码(我将在代码下面解释这个问题):
this.load.atlas('enemies', 'enemies.png','enemies.json'); ####This goes on preload function
#####everything below I added to create function
var monsterData = [
{name: 'Aerocephal', image: 'aerocephal'},
{name: 'Arcana Drake', image: 'arcana_drake'},
{name: 'Aurum Drakueli', image: 'aurum-drakueli'},
{name: 'Bat', image: 'bat'},
{name: 'Daemarbora', image: 'daemarbora'},
{name: 'Deceleon', image: 'deceleon'},
{name: 'Demonic Essence', image: 'demonic_essence'},
{name: 'Dune Crawler', image: 'dune_crawler'},
{name: 'Green Slime', image: 'green_slime'},
{name: 'Nagaruda', image: 'nagaruda'},
{name: 'Rat', image: 'rat'},
{name: 'Scorpion', image: 'scorpion'},
{name: 'Skeleton', image: 'skeleton'},
{name: 'Snake', image: 'snake'},
{name: 'Spider', image: 'spider'},
{name: 'Stygian Lizard', image: 'stygian_lizard'}
];
var monsters = this.add.group();
var monster;
let currentmonster = Phaser.Utils.Array.GetRandom(monsterData);
monsterData.forEach(function(data) {
monster = monsters.create(400,300, 'enemies', currentmonster.image).setOrigin(0.5);
monster.details = data;
});
monster.on('pointerdown', function (pointer) {
this.setTint(0xff0000);
});
monster.on('pointerout', function (pointer) {
this.clearTint();
});
monster.on('pointerup', function (pointer) {
this.clearTint();
});
基本上我的怪物确实按预期生成,每次我刷新页面时它们都会改变 sprite,但是点击功能不起作用,它根本不会点击它,没有任何反应,没有错误在控制台上什么都没有,我是否错误地接近了这个?非常感谢任何建议。
我的主要功能类似于本教程中的功能:Tutorial
您缺少让 Phaser 知道游戏对象应该侦听输入事件的 setInteractive()
方法。
修改这一行:
monster = monsters.create(400,300, 'enemies', currentmonster.image).setOrigin(0.5);
改成这样:
monster = monsters.create(400,300, 'enemies', currentmonster.image).setOrigin(0.5).setInteractive();
您可以阅读有关 setInteractive in the Phaser 3 Docs for Sprite 的更多信息。