我正在使用动画精灵,并使用动画侦听器知道动画何时结束或最后一帧。
当动画在最后一帧时,我想删除它碰撞的任何物体。
所以这就是我现在遇到的问题:
我正在使用TimeHandler来检测碰撞,但问题是我有一个随机数量的可移动对象添加到游戏中,我将它们添加到LinkedList,因为它们在加载时被添加到场景中。
然后在我的TimeHandler中,我尝试像这样检测碰撞;
mEngine.registerUpdateHandler(new TimerHandler(.005f, true,
new ITimerCallback() {
@Override
public void onTimePassed(final TimerHandler pTimerHandler) {
if (frames == 1) {
if (woodSprites.hasNext()) {
Sprite sprite = woodSprites.next();
if (bombSprite.collidesWith(sprite)) {
Log.e("Frame", "Collision");
removeFace(sprite);
}
}
}
}
}));
这种方法的问题在于,如果炸弹精灵与Iterator中不存在的可移动精灵碰撞,那么它就不会检测到碰撞,也不会发生任何事情。我需要能够在发生碰撞时删除该特定的可移动精灵
有没有人知道或有任何建议让它发挥作用?
答案 0 :(得分:3)
我没有看到使用TimerHandler的原因,它可能表现得非常糟糕,因为它可能只是错过了正确的帧。你这样做是为了提高性能吗?试试这段代码:
mEngine.registerUpdateHandler(new IUpdateHandler() {
@Override
public void reset() {}
@Override
public void onUpdate(float pSecondsElapsed) {
if (frames == 1) {
for (Sprite s : woodSprites) {
if (bombSprite.collidesWith(s)) {
removeFace(s);
}
}
}
});
我认为性能打击应该可以忽略不计。
答案 1 :(得分:0)
如果我正确理解了这个问题,你就不会浏览List,这就是为什么你试图只用一个元素来检测碰撞。尝试:
while (woodSprites.hasNext()) {
if (bombSprite.collidesWith(woodSprites)) {
Log.e("Frame", "Collision");
removeFace(woodSprites);
}
}