2010-08-24 16 views
2

Je cherche un moyen de faire bouger une image (une balle) le long d'un chemin prédéfini dans l'iPhone. Mon intention est de créer un mouvement de balle similaire au mouvement du labyrinthe. Je comprends qu'il existe un moyen de créer des chemins par programmation en utilisant CGPath. Mais je crois qu'il est difficile de créer des chemins complexes. Y a-t-il un moyen meilleur et plus facile de créer un chemin à partir d'une image (qui ressemblera ou représentera un chemin) et rendra le mouvement de l'image (balle) contraint dans ce chemin?Faire une image suivre un chemin prédéfini dans l'iPhone?

Merci à l'avance de l'aide ...

Répondre

0

Avez-vous considéré comme un moteur physique réelle? Bullet, par exemple, est vraiment génial.

+0

Je prévois de faire un jeu comme "labyrinthe" ... donc j'aurais besoin de détection de collision et d'autres fonctionnalités. Un moteur de physique serait-il nécessaire? Cela peut-il être réalisé par un codage normal dans l'objectif C? Si c'est difficile, pouvez-vous me proposer un moteur de physique 2D gratuit? – tuttu47

+0

Ressorts Box2D à l'esprit. Je ne l'ai pas utilisé moi-même, mais il est utilisé par ex. Cocos2D, un moteur de jeu bien établi dans le monde iPhone. – Kalle

4

Il n'est pas vraiment difficile de créer une animation pour déplacer un objet le long d'un chemin. Par exemple, le code suivant animer le long d'une courbe de Bézier spécifique:

CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 
pathAnimation.duration = 1.0f; 
pathAnimation.calculationMode = kCAAnimationPaced; 

CGPoint currentPosition = viewToAnimate.layer.position; 
CGPoint endPoint = CGPointMake(currentPosition.x + 100.0f, currentPosition.y - 50.0f); 
CGMutablePathRef curvedPath = CGPathCreateMutable(); 
CGPathMoveToPoint(curvedPath, NULL, currentPosition.x, currentPosition.y); 
CGPathAddCurveToPoint(curvedPath, NULL, endPoint.x, currentPosition.y, endPoint.x, currentPosition.y, endPoint.x, endPoint.y); 
pathAnimation.path = curvedPath; 
CGPathRelease(curvedPath); 

pathAnimation.fillMode = kCAFillModeForwards; 
pathAnimation.removedOnCompletion = NO; 
[viewToAnimate.layer addAnimation:pathAnimation forKey:@"animateMovementUsingPath"]; 

La partie centrale de ce code est où la définition du chemin. Dans ce cas, je commence à dessiner à currentPosition, puis ajouter une courbe qui se termine à endPoint. Les points de contrôle pour cette courbe sont (endPoint.x, currentPosition.y) et (endPoint.x, currentPosition.y).

Il sera beaucoup plus facile de définir une courbe vectorielle de cette manière et de laisser Core Animation gérer toutes les tweening pour vous que de gérer vous-même toute l'animation.