我有一个闪光射击游戏,在用户拍摄一个瓶子后,我播放摧毁动画并将其从屏幕上移除。问题是当用户点击太快时,就像超人一样快速进入该方法两次,无论如何。有谁知道如何解决这个问题?
以下是代码:
public function bottleHasClicked(bottle : BottleBase) : void {
bottle.mouseEnabled = false;
collectedBottles++;
bottlesInRound--;
gameSound.getShootSound().playSound();
gameSound.getBottleSound().playSound();
ArrayUtil.removeValueFromArray(elementsInScreenArray, bottle);
cleanElementsTimer[bottle].stop();
delete cleanElementsTimer[bottle];
if (bottlesInRound == 0) {
stopElementsTimer();
showElementsWaitForSeconds(0.5);
}
createBulletHole();
bottle.play();
}
我要做的第一件事是禁用对象鼠标,它仍然会发生。我只会在我再次展示瓶子时启用它。
答案 0 :(得分:1)
请参阅this post:
如果您只有一个需要使用鼠标的元素 禁用,使用mouseEnabled属性。但是,如果你有孩子 要对级联禁用的特定对象上的元素 要将鼠标事件设置为,请确保将mouseChildren属性设置为 好。第二个在我还没来的时候抓住了我 尽管我已经禁用它们,但对鼠标事件的反应仍然存在。
答案 1 :(得分:0)
你是否在瓶子类中有“玩”变量?您可以在调用bottleHasClicked()之前检查它。另外,提供addListener调用会有所帮助。
答案 2 :(得分:0)
嗯,我想有几种方法可以做到这一点,但这取决于你如何注册鼠标点击事件。如果你正在为每个项目符号调用addEventListener(MouseEvent.Click,...)以最终获得bottleHasClicked,那么你可以通过调用removeEventListener(...);
来删除对象上的监听器。如果你正在使用其他方法,另一个简单的方法就是通过添加一个布尔值来检查瓶子是否已被点击(让我们调用该变量“wasClicked”并且瓶子的构造函数应该将其设置为false )。在这种情况下,您可以做的是将上面的代码更改为以下内容:
public function bottleHasClicked(bottle : BottleBase) : void
{
if(!bottle.wasClicked)
{
bottle.wasClicked = true;
bottle.mouseEnabled = false;
collectedBottles++;
bottlesInRound--;
gameSound.getShootSound().playSound();
gameSound.getBottleSound().playSound();
ArrayUtil.removeValueFromArray(elementsInScreenArray, bottle);
cleanElementsTimer[bottle].stop();
delete cleanElementsTimer[bottle];
if (bottlesInRound == 0) {
stopElementsTimer();
showElementsWaitForSeconds(0.5);
}
createBulletHole();
bottle.play();
}
}
应该这样做。