我有一个应用程序,你可以用加速度计移动一个人。有一个准备好的设置序列,然后使用pop动画出现。虽然即使当男人不可见并且准备好的单词出现时,加速度计仍然可用,你可以移动那个人并意外触摸障碍物,然后使用cgrectintersect直接更改到结束游戏屏幕。那么在那个准备好的设置序列中,如何禁用加速度计,然后在出现单词时重新启用它?
·H:
@interface GameScreen : UIViewController <UIAccelerometerDelegate> {
IBOutlet UIImageView *image1;
IBOutlet UIImageView *image2;
UIImageView *ball;
CGPoint delta;
IBOutlet UIImageView *man;
IBOutlet UIImageView *fang;
IBOutlet UIImageView* hiddenView;
IBOutlet UILabel* ready;
IBOutlet UILabel* set;
IBOutlet UILabel* go;
IBOutlet UILabel* endScreen;
IBOutlet UIImageView* guy;
CAKeyframeAnimation *popAnimation;
}
@property (nonatomic, retain)UIImageView *image1;
@property (nonatomic, retain)UIImageView *image2;
-(void)checkCollision;
@property (nonatomic, retain)IBOutlet UIImageView *ball;
@property CGPoint delta;
@end
的.m:
-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
NSLog(@"x : %g", acceleration.x);
NSLog(@"y : %g", acceleration.y);
NSLog(@"z : %g", acceleration.z);
delta.y = acceleration.y * 50;
delta.x = acceleration.x * 50;
ball.center = CGPointMake(ball.center.x + delta.x, ball.center.y + delta.y);
// Right
if(ball.center.x < 0) {
ball.center = CGPointMake(320, ball.center.y);
}
// Left
if(ball.center.x > 320) {
ball.center = CGPointMake(0, ball.center.y);
}
// Top
if(ball.center.y < 0) {
ball.center = CGPointMake(ball.center.x, 460);
}
// Bottom
if(ball.center.y > 460){
ball.center = CGPointMake(ball.center.x, 0);
}
[self checkCollision];
}
答案 0 :(得分:3)
你真的应该阅读一本关于编码的好书并做一些教程来了解如何做到这一点,但标志的概念很简单。
在移动你的男人的班级中有一个名为bCanMove
或类似的bool,并在初始化班级时将其设置为false
。
完成“准备好,稳定,继续”序列后,将其设置为true
。
下一步是在执行移动的代码中检查此标志,显然我看不到您的代码,但我希望您有一个名称类似于didAccelerate
的方法 - 在那里只是检查布尔值是否为真,如果不是,则不做任何事情,例如:
if(!bCanMove)
{
return;
}
由于我看不到你的代码,我不知道你是否依赖内置机制等,但正如其他人所说(和我自己)你不应该在这里问这些问题 - 不是因为你对编码不熟悉,而是你对问题表达的方式更多,没有任何细节,没有人能真正帮助你,如果你做了更多的阅读,你就不需要问;)
至少你应该阅读:http://cocoadevcentral.com/d/learn_objectivec/但是如果你不理解一些基本的编程概念(并且看起来你没有这样做),这对你没有帮助 - 因为没有替代一本好书/教程。