Mon programme fonctionne comme je le souhaite sur le simulateur iPhone et sur l'iPhone lui-même lorsque j'utilise la version de débogage. Cependant, quand je le change pour la version release, cela fonctionne sur le simulateur de l'iPhone mais pas sur l'appareil. J'essaie d'animer une balle à travers l'écran avec une minuterie et la balle devrait rebondir sur les côtés si elle entre en collision avec les bords de l'écran. Cela fonctionne très bien pour les builds de débogage mais la version release ne fonctionne que sur le simulateur et non sur le périphérique. La balle ne bouge même pas sur l'appareil avec la version release.La version de la version iPhone ne fonctionne pas de la même manière que la version de débogage
J'ai l'impression que cela a à voir avec le niveau d'optimisation qui est changé lors du passage d'un débogage à une version finale. Si cela est vrai, comment puis-je changer mon code pour mieux correspondre au niveau d'optimisation?
Le contrôleur de vue est appelée avec initWithNibName: qui contient:
CGRect ballRect = CGRectMake(133, 424, 55, 56);
newBall = [[Ball alloc] initWithFrame: ballRect];
[self.view addSubview: newBall];
[self setImage: [UIImage imageNamed: @"Red.png"]];
balle * Newball a été déclaré dans le fichier d'interface. La balle est affichée correctement sur l'écran avec l'image correcte sur toutes les constructions.
La minuterie pour déplacer la balle est appelée lorsque l'utilisateur appuie sur l'écran:
-(void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event{
touch = [touches anyObject];
touchPoint = [touch locationInView: self.view];
dx = touchPoint.x - newBall.center.x;
dy = touchPoint.y - newBall.center.y;
newBallTimer = [NSTimer scheduledTimerWithTimeInterval: 1.0/50.0 target: self selector: @selector(moveBall) userInfo: nil repeats: YES];
}
CGPoint touchPoint, UITouch * toucher, dx flotteur, flotteur dy et NSTimer * newBallTimer ont été déclarés dans le fichier d'interface aussi.
Voici mon code pour déplacer la balle et la détection des collisions:
-(void) moveBall
{
newBall.center = CGPointMake(newBall.center.x + dx, newBall.center.y + dy);
// left boundary
if(newBall.frame.origin.x <= 20)
{
dx = abs(dx);
}
else if(newBall.center.x >= 280)
{
dx = -abs(dx);
}
}
Sur la version release sur l'appareil la balle ne se déplace pas. Au lieu de cela, il semble être envoyé au bas de l'écran et rester là.
Toutes les suggestions/solutions/idées sont très appréciées. Merci d'avance!
Je suppose que vous devrez nous montrer le code. Essayez de réduire le code autant que possible, il nous sera plus facile de repérer le bug et parfois vous découvrirez le bug vous-même dans le processus. – zoul
Ok, j'ai posté du code. J'espère que cela t'aides. –
Comparez vos deux configurations de construction pour les différences. Peut-être que vous avez quelque chose de défini dans le débogage mais ce n'est pas défini dans la version. Le simulateur n'est pas toujours correct, alors laissez-le hors de l'équation. – Jab