Réponse : Michael Fredrickson (Meilleure réponse) Il est facile d'obtenir l'effet de zoom, il suffit de définir l'attribut d'échelle de la couche principale du jeu, mais il y a encore certains détails auxquels il faut prêter attention. Lors de la mise à l'échelle d'un calque, la position du calque sera augmentée dans son ensemble. Si vous souhaitez obtenir un effet de défilement dans le jeu, vous devez effectuer les réglages suivants : . Vous pouvez définir le point d'ancrage dans la couche sur ccp(0.0f, 0.0f), puis calculer la distance à laquelle la couche s'élève, puis réinitialiser les paramètres pour la ramener à son état d'origine.
- (void) scale:(CGFloat) newScale scaleCenter:(CGPoint) scaleCenter { // scaleCenter is the point to zoom to.. // If you are doing a pinch zoom, this should be the center of your pinch. // Get the original center point. CGPoint oldCenterPoint = ccp(scaleCenter.x * yourLayer.scale, scaleCenter.y * yourLayer.scale); // Set the scale. yourLayer.scale = newScale; // Get the new center point. CGPoint newCenterPoint = ccp(scaleCenter.x * yourLayer.scale, scaleCenter.y * yourLayer.scale); // Then calculate the delta. CGPoint centerPointDelta = ccpSub(oldCenterPoint, newCenterPoint); // Now adjust your layer by the delta. yourLayer.position = ccpAdd(yourLayer.position, centerPointDelta); }
Il est très simple d'implémenter le zoom Pinch, il suffit de détecter les touchesMoved puis d'appeler la routine de mise à l'échelle.
- (void) ccTouchesMoved:(NSSet*)touches withEvent:(UIEvent*)event { // Examine allTouches instead of just touches. Touches tracks only the touch that is currently moving... // But stationary touches still trigger a multi-touch gesture. NSArray* allTouches = [[event allTouches] allObjects]; if ([allTouches count] == 2) { // Get two of the touches to handle the zoom UITouch* touchOne = [allTouches objectAtIndex:0]; UITouch* touchTwo = [allTouches objectAtIndex:1]; // Get the touches and previous touches. CGPoint touchLocationOne = [touchOne locationInView: [touchOne view]]; CGPoint touchLocationTwo = [touchTwo locationInView: [touchTwo view]]; CGPoint previousLocationOne = [touchOne previousLocationInView: [touchOne view]]; CGPoint previousLocationTwo = [touchTwo previousLocationInView: [touchTwo view]]; // Get the distance for the current and previous touches. CGFloat currentDistance = sqrt( pow(touchLocationOne.x - touchLocationTwo.x, 2.0f) + pow(touchLocationOne.y - touchLocationTwo.y, 2.0f)); CGFloat previousDistance = sqrt( pow(previousLocationOne.x - previousLocationTwo.x, 2.0f) + pow(previousLocationOne.y - previousLocationTwo.y, 2.0f)); // Get the delta of the distances. CGFloat distanceDelta = currentDistance - previousDistance; // Next, position the camera to the middle of the pinch. // Get the middle position of the pinch. CGPoint pinchCenter = ccpMidpoint(touchLocationOne, touchLocationTwo); // Then, convert the screen position to node space... use your game layer to do this. pinchCenter = [yourLayer convertToNodeSpace:pinchCenter]; // Finally, call the scale method to scale by the distanceDelta, pass in the pinch center as well. // Also, multiply the delta by PINCH_ZOOM_MULTIPLIER to slow down the scale speed. // A PINCH_ZOOM_MULTIPLIER of 0.005f works for me, but experiment to find one that you like. [self scale:yourlayer.scale - (distanceDelta * PINCH_ZOOM_MULTIPLIER) scaleCenter:pinchCenter]; } }
Réponse : André Si tous les elfes viennent du même parent, vous pouvez les mettre à l'échelle pour coordonner les différents parents et assurer la corrélation entre eux.
Réponse : Mohammad Alabid Le code suivant peut redimensionner la position du calque de 2 fois,
Réponse : Michael Fredrickson
(Meilleure réponse)
Il est facile d'obtenir l'effet de zoom, il suffit de définir l'attribut d'échelle de la couche principale du jeu, mais il y a encore certains détails auxquels il faut prêter attention.
Lors de la mise à l'échelle d'un calque, la position du calque sera augmentée dans son ensemble. Si vous souhaitez obtenir un effet de défilement dans le jeu, vous devez effectuer les réglages suivants :
. Vous pouvez définir le point d'ancrage dans la couche sur ccp(0.0f, 0.0f), puis calculer la distance à laquelle la couche s'élève, puis réinitialiser les paramètres pour la ramener à son état d'origine.
Il est très simple d'implémenter le zoom Pinch, il suffit de détecter les touchesMoved puis d'appeler la routine de mise à l'échelle.
Réponse : André
Si tous les elfes viennent du même parent, vous pouvez les mettre à l'échelle pour coordonner les différents parents et assurer la corrélation entre eux.
Réponse : Mohammad Alabid
Le code suivant peut redimensionner la position du calque de 2 fois,