我的游戏遇到了麻烦,想知道是否有人可以提供帮助?
当用户在我的测验游戏中点击答案时,我在屏幕上加载叠加图像,图像是勾号或十字形以指示答案是否正确。图像正在加载一个新线程。
问题在于,每次用户点击答案时图像都不会出现,而且在一轮中只出现约20%的时间。
更奇怪的是,几个月前我已经在iOS3上准备好游戏并且没有出现这个问题,它似乎只是在更新到iOS4时开始。
以下是代码:
图像是在loadView方法中创建的:
tick = [UIImageView alloc];
[tick initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 480.0f)];
[tick setImage:[UIImage imageNamed:@"correct.png"]];
cross = [UIImageView alloc];
[cross initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 480.0f)];
[cross setImage:[UIImage imageNamed:@"wrong.png"]];
这里调用线程:
-(void)answerAttempt:(UIButton *)b{
ansQues++;
if([b.currentTitle isEqualToString:ans]){
[NSThread detachNewThreadSelector: @selector(showTick) toTarget:self withObject:nil];
[appDelegate playSound:1];
score++;
...
...
...
}else{
[NSThread detachNewThreadSelector: @selector(showCross) toTarget:self withObject:nil];
[appDelegate playSound:0];
}
这是两个线程调用的函数:
-(void)showTick{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[tick setHidden:NO];
[levelPage addSubview:tick];
[levelPage bringSubviewToFront: tick];
usleep(500000);
[tick removeFromSuperview];
[pool release];
}
-(void)showCross{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[cross setHidden:NO];
[levelPage addSubview:cross];
[levelPage bringSubviewToFront: cross];
usleep(500000);
[cross removeFromSuperview];
[pool release];
}
正如您可能从代码中可以看出的那样,我已经尝试了各种方法来尝试每次都显示它,但现在还没有找到任何解决方案。我已经检查过以确保每次调用正确的线程,并且它确实 - 只是UIImage for tick和cross不显示。
请随时提出任何问题。
感谢。
答案 0 :(得分:4)
所有UI更新都应在主线程上完成。此外,如果你在代码中睡觉,设计可能不对,但如果你坚持这样做,那么一个简单的解决方法就是这样做:
[levelPage performSelectorOnMainThread:@selector(addSubview:) withObject:cross waitUntilFinished:NO];