2011-06-02 1 views
3

J'ai utilisé le code comme suit pour mettre en œuvre l'effet de remplacer les scènes:Comment définir l'orientation CCTransitionPageTurn sur verticale?

[[CCDirector sharedDirector] replaceScene:[CCTransitionPageTurn transitionWithDuration:0.5f scene:alterScene backwards:NO]];

Ensuite, l'effet est inversé pour apparaître comme si la scène entrante est braquée de gauche sur la scène sortante.
Je veux obtenir l'effet de dessus. comment puis-je l'obtenir?

+0

Vous devez d'abord faire pivoter la couche suivante à 90 * et que d'appliquer CCTransitionPageTurn – NIKHIL

Répondre

5

Modifiez cocos2d/CCActionPageTurn3D.m pour échanger x pour y.

/* 
* cocos2d for iPhone: http://www.cocos2d-iphone.org 
* 
* Copyright (c) 2009 Sindesso Pty Ltd http://www.sindesso.com/ 
* 
* Permission is hereby granted, free of charge, to any person obtaining a copy 
* of this software and associated documentation files (the "Software"), to deal 
* in the Software without restriction, including without limitation the rights 
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
* copies of the Software, and to permit persons to whom the Software is 
* furnished to do so, subject to the following conditions: 
* 
* The above copyright notice and this permission notice shall be included in 
* all copies or substantial portions of the Software. 
* 
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 
* THE SOFTWARE. 
* 
*/ 

#import "CCActionPageTurn3D.h" 

@implementation CCPageTurn3D 

/* 
* Update each tick 
* Time is the percentage of the way through the duration 
*/ 
-(void)update:(ccTime)time 
{ 
    float tt = MAX(0, time - 0.25f); 
    float deltaAx = (tt * tt * 500); 
    float ax = -100 - deltaAx; 

    float deltaTheta = - (float) M_PI_2 * sqrtf(time); 
    float theta = /*0.01f*/ + (float) M_PI_2 +deltaTheta; 

    float sinTheta = sinf(theta); 
    float cosTheta = cosf(theta); 

    for(int i = 0; i <=gridSize_.x; i++) 
    { 
     for(int j = 0; j <= gridSize_.y; j++) 
     { 
      // Get original vertex 
      ccVertex3F p = [self originalVertex:ccg(i,j)]; 

      float R = sqrtf(p.y*p.y + (p.x - ax) * (p.x - ax)); 
      float r = R * sinTheta; 
      float alpha = asinf(p.y/R); 
      float beta = alpha/sinTheta; 
      float cosBeta = cosf(beta); 

      // If beta > PI then we've wrapped around the cone 
      // Reduce the radius to stop these points interfering with others 
      if(beta <= M_PI) 
       p.y = (r * sinf(beta)); 
      else 
      { 
       // Force X = 0 to stop wrapped 
       // points 
       p.y = 0; 
      } 

      p.x = (R + ax - (r*(1 - cosBeta)*sinTheta)); 

      // We scale z here to avoid the animation being 
      // too much bigger than the screen due to perspectve transform 
      p.z = (r * (1 - cosBeta) * cosTheta)/7; // "100" didn't work for 

      // Stop z coord from dropping beneath underlying page in a transition 
      // issue #751     
      if(p.z<0.5f) 
       p.z = 0.5f; 

      // Set new coords 
      [self setVertex:ccg(i,j) vertex:p]; 
     } 
    } 
} 
@end 

diff --git a/cocos2d/CCActionPageTurn3D.m b/cocos2d/CCActionPageTurn3D.m 
index ee59500..ccd64eb 100644 
--- a/cocos2d/CCActionPageTurn3D.m 
+++ b/cocos2d/CCActionPageTurn3D.m 
@@ -34,10 +34,10 @@ 
-(void)update:(ccTime)time 
{ 
    float tt = MAX(0, time - 0.25f); 
- float deltaAy = (tt * tt * 500); 
- float ay = -100 - deltaAy; 
+ float deltaAx = (tt * tt * 500); 
+ float ax = -100 - deltaAx; 

    float deltaTheta = - (float) M_PI_2 * sqrtf(time) ; 
    float theta = /*0.01f*/ + (float) M_PI_2 +deltaTheta; 

    float sinTheta = sinf(theta); 
@@ -50,24 +50,24 @@ 
      // Get original vertex 
      ccVertex3F p = [self originalVertex:ccg(i,j)]; 

-   float R = sqrtf(p.x*p.x + (p.y - ay) * (p.y - ay)); 
+   float R = sqrtf(p.y*p.y + (p.x - ax) * (p.x - ax)); 
      float r = R * sinTheta; 
-   float alpha = asinf(p.x/R); 
+   float alpha = asinf(p.y/R); 
      float beta = alpha/sinTheta; 
      float cosBeta = cosf(beta); 

      // If beta > PI then we've wrapped around the cone 
      // Reduce the radius to stop these points interfering with others 
      if(beta <= M_PI) 
-    p.x = (r * sinf(beta)); 
+    p.y = (r * sinf(beta)); 
      else 
      { 
       // Force X = 0 to stop wrapped 
       // points 
-    p.x = 0; 
+    p.y = 0; 
      } 

-   p.y = (R + ay - (r*(1 - cosBeta)*sinTheta)); 
+   p.x = (R + ax - (r*(1 - cosBeta)*sinTheta)); 

      // We scale z here to avoid the animation being 
      // too much bigger than the screen due to perspectve transform 
+0

Merci beaucoup! Ça marche! – Fannic

Questions connexes