0

我正在开发一个 iPhone 应用程序,在我的应用程序中有一个从屏幕顶部移动到底部的对象。为此,我使用 CADisplay 链接。一旦对象离开屏幕,它就应该重新开始它的路线。我遇到的问题是,每次对象重新启动其路线时,它都会加速。这种情况一直持续到物体运动得如此之快以至于你几乎看不到它。任何想法为什么会发生这种情况以及如何阻止它?任何帮助表示赞赏,在此先感谢!

-(void)spawnButton{

int x = (arc4random() % (240) + 40;
int y = -100;

button1.center = CGPointMake(x,y);

displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(moveObject)];
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];

}



-(void) moveObject {

int z = 1;


button1.center = CGPointMake(button1.center.x , button1.center.y +z);



if (button1.center.y >= 480) {

    [self spawnButton];

}
}
4

2 回答 2

1

您将在每次调用 时创建一个新的显示链接spawnButton。如果您没有从运行循环中删除旧的显示链接,那么旧的显示链接将继续发送moveObject:消息。因此,在给spawnButton您两次呼叫后,每个视频帧将收到两条moveObject:消息,在三个呼叫后,您将在每个视频帧收到三条moveObject:消息,依此类推。

于 2013-03-14T20:29:29.583 回答
0

每次我重新启动对象路由时,我似乎已经通过使显示链接无效来解决问题。

if (button1.center.y >= 480) {

[self spawnButton];


[displaylink invalidate];

}
}
于 2013-03-14T20:24:50.280 回答