Отключите акселерометр на некоторое время, затем включите его - PullRequest
0 голосов
/ 03 мая 2011

У меня есть приложение, где вы можете перемещать человека с помощью акселерометра.Есть готовая последовательность, и затем, используя поп-анимацию, появляется парень.Хотя даже когда человек не виден и слова готового набора появляются, акселерометр все еще можно использовать, и вы можете переместить парня и случайно коснуться препятствия, которое затем с помощью cgrectintersectsrect меняет экран завершения игры.Итак, в этой последовательности готового набора, как я могу отключить акселерометр, а затем снова включить его, когда появится слово «ход»?

.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];

}

1 Ответ

3 голосов
/ 03 мая 2011

Вы действительно должны читать хорошую книгу по кодированию и делать некоторые учебные пособия, чтобы получить представление о том, как это сделать, но концепция флага проста.

В классе, куда перемещается ваш мужчинаиметь bool с именем bCanMove или аналогичный, и установить его равным false при инициализации класса.

Как только ваша последовательность «готово, устойчиво, идет» заканчивается, вы устанавливаете значение true.

Следующим шагом является проверка этого флага в коде, где вы выполняете свое движение, очевидно, я не вижу ваш код, но я ожидаю, что у вас есть метод с именем, похожим на didAccelerate - там просто проверьтечтобы узнать, является ли логическое значение истинным или нет, и ничего не делать, если это не так, например:

if(!bCanMove)
{
    return;
}

Поскольку я не вижу ваш код, я не знаю, являетесь ли вы 'полагаться на встроенные механизмы и т. д., но, как заявили другие люди (и я), вам не следует задавать подобные вопросы здесь - не потому, что вы новичок в кодировании, а скорее в том, как вы сформулировали вопросникто не может реально помочь слюбые детали, и это то, что вам не нужно спрашивать, если вы немного больше читаете;)

Как минимум, вы должны прочитать это: http://cocoadevcentral.com/d/learn_objectivec/ но это не поможет вамесли вы не понимаете некоторых базовых концепций программирования (и, как вам кажется, не понимаете), для этого нет замены хорошей книге / учебнику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...