在我的代码中,青蛙跳到百合垫上后,百合花缓慢地淡出(使它看起来像被淹没)然后在它们通过屏幕底部后,它们重新加载在屏幕的顶部。代码如下:
if (CGRectIntersectsRect(FrogSquare.frame, lilypadTS.frame) && (upMovement <= -1) && (swim == YES) && (startingice.hidden == NO)){
[self bounce];
[self iceblockfall];
if (lilypadused == NO) {
addedScore = 1;
lilypadused = YES;
}
//hide pad
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:4];
[startingice setAlpha:0];
[UIView commitAnimations];
[self performSelector:@selector(hidePad) withObject:self afterDelay:4.0];
}
那部分工作正常,睡莲做了应该做的事。以下是我得到这个奇怪故障的地方:
if (lilypad.center.y > 610) {
RandomPosition = arc4random() %248;
RandomPosition = RandomPosition + 36;
lilypad.center = CGPointMake(RandomPosition, -22);
lilypadused = NO;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0];
[lilypad setAlpha:1];
[UIView commitAnimations];
[self performSelector:@selector(showlilypad) withObject:self afterDelay:0];
} else if ((lilypad.center.y > 610) && (lilypad.hidden == YES)) {
RandomPosition = arc4random() %248;
RandomPosition = RandomPosition + 36;
lilypad.center = CGPointMake(RandomPosition, -22);
lilypadused = NO;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0];
[lilypad setAlpha:1];
[UIView commitAnimations];
[self performSelector:@selector(showlilypad) withObject:self afterDelay:0];
}
出于某种原因,发生了什么事情,Lilypads将像他们应该的那样在屏幕顶部重新加载,但随后用户正在跳到顶部的Lilypads下面。如果那令人困惑 - 屏幕尺寸320 x 568,lilypad1重新加载在屏幕顶部点= -22,然后慢慢下降,所以说点数是10后下降了一点,说玩家跳上lilypad2,但没有隐藏并过去了610(重装在顶部),它让lilypad1立即隐藏,为什么会这样?
答案 0 :(得分:2)
您提供的代码量确实不足以诊断您的问题。你很可能(肯定)引用了导致错误行为的错误的lilypad。您应该仔细查看应用程序的体系结构,以确保以最佳方式正确管理lilypad列表。
此外,每当您使用延迟时 - 请注意,这些延迟是近似的,而不是确切的。您可能处于竞争状态,其中隐藏尚未发生但您已经在顶部再次显示,然后隐藏会在稍后触发。
最后,如果afterDelay为0,你也可以直接调用showlilypad方法 - 不需要真正延迟0秒。
祝你好运!