Opengl es CCTransitionPageTurn在使用opengl后不工作

Opengl es CCTransitionPageTurn在使用opengl后不工作,opengl-es,cocos2d-iphone,Opengl Es,Cocos2d Iphone,我正在使用CCTansitionPageTurn在场景之间切换。它适用于大多数场景,但我有一个使用gl绘制的着色场景。开始着色后,CCTransitionPageTurn不适用于任何场景过渡,即使是之前工作正常的场景过渡。(我仍然可以移动到另一个场景,但翻页效果被破坏) 我认为这可能与在调用转换之前更改gl状态有关,但恢复默认gl状态不起作用。代码中可能有很多地方存在问题,但这里有一些代码是我使用gl的地方 /* ColoringGameScene : CCScene, which handle

我正在使用CCTansitionPageTurn在场景之间切换。它适用于大多数场景,但我有一个使用gl绘制的着色场景。开始着色后,CCTransitionPageTurn不适用于任何场景过渡,即使是之前工作正常的场景过渡。(我仍然可以移动到另一个场景,但翻页效果被破坏)

我认为这可能与在调用转换之前更改gl状态有关,但恢复默认gl状态不起作用。代码中可能有很多地方存在问题,但这里有一些代码是我使用gl的地方

/* ColoringGameScene : CCScene, which handles drawing menus and other cool UI things */

// In init
CCLayerColor *layer = [CCLayerColor layerWithColor:ccc4(255, 255, 255, 255)];
[self addChild:layer];
TouchDraw *drawObj = [TouchDraw node];
[drawObj setDrawPoints:_drawPoints];
[layer addChild:drawObj z:999];

// In -(void)ccTouchMoved:(UITouch *) touch withEvent:(UIEvent *)event
// drawPoints, an array of points to draw is updated.  drawObj has a reference to this array


/* In TouchDraw : CCNode, which handles gl drawing */

// In init
glEnable(GL_LINE_SMOOTH);
glEnable(GL_POINT_SMOOTH);
glEnable(GL_POINT_SMOOTH_HINT);
glEnable(GL_LINE_SMOOTH_HINT);
glHint(GL_POINT_SMOOTH_HINT,GL_NICEST);
glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_BLEND_COLOR); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glLineWidth(8);
glPointSize(8);

// elsewhere

-(void)drawCircle:(CGPoint)center radius:(float)r arc:(float)a line:(NSUInteger)segs lineToCenter: (BOOL)drawLineToCenter
{
int additionalSegment = 1;
if (drawLineToCenter)
    additionalSegment++;

const float coef = 2.0f * (float)M_PI/segs;

GLfloat *vertices = calloc( sizeof(GLfloat)*2*(segs+2), 1);
if( ! vertices )
    return;

for(NSUInteger i=0;i<=segs;i++)
{
    float rads = i*coef;
    GLfloat j = r * cosf(rads + a) + center.x;
    GLfloat k = r * sinf(rads + a) + center.y;

    vertices[i*2] = j * CC_CONTENT_SCALE_FACTOR();
    vertices[i*2+1] =k * CC_CONTENT_SCALE_FACTOR();
}
vertices[(segs+1)*2] = center.x * CC_CONTENT_SCALE_FACTOR();
vertices[(segs+1)*2+1] = center.y * CC_CONTENT_SCALE_FACTOR();

glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);

glVertexPointer(2, GL_FLOAT, 0, vertices);  
glDrawArrays(GL_TRIANGLE_FAN, 0, (GLsizei) segs+additionalSegment);

// restore default state
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_TEXTURE_2D);    

free( vertices );
}

-(void)draw
{
[super draw];

    if ([drawPoints count])
{
        for(int i = 0; i < [drawPoints count]; i += 4)
        {
            CGPoint point0 = CGPointFromString([drawPoints objectAtIndex:i]);
            CGPoint point1 = CGPointFromString([drawPoints objectAtIndex:i+1]);
            CGPoint point2 = CGPointFromString([drawPoints objectAtIndex:i+2]);
            CGPoint point3 = CGPointFromString([drawPoints objectAtIndex:i+3]);

            glColor4f(255.0f/255.0f, 0.0f/255.0f, 0.0f/255.0f, 1.0f); // Red
            glLineWidth(8);
            glPointSize(8);

            // various calls to drawCirle and ccDrawCubicBezier

            //default
            glColor4f(0.0f/255.0f, 0.0f/255.0f, 0.0f/255.0f, 0.0f);
        }
    }
}
/*彩色游戏场景:CCScene,用于处理绘图菜单和其他酷炫的UI内容*/
//初始
CCLayerColor*layer=[CCLayerColor layerWithColor:ccc4(255、255、255、255)];
[自添加子对象:层];
TouchDraw*drawObj=[TouchDraw节点];
[drawObj设置drawPoints:_drawPoints];
[layer addChild:drawObj z:999];
//In-(void)ccTouchMoved:(UITouch*)触摸事件:(UIEvent*)事件
//drawPoints,将更新要绘制的点阵列。drawObj具有对此数组的引用
/*在TouchDraw中:CCNode,用于处理总账图形*/
//初始
glEnable(GL_线_光滑);
glEnable(GL_POINT_SMOOTH);
glEnable(GL_POINT_SMOOTH_HINT);
glEnable(总图线光滑提示);
glHint(GL_POINT_SMOOTH_HINT,GL_NICEST);
glTexEnvf(GL_纹理环境、GL_纹理环境模式、GL_混合颜色);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_减去GL_SRC_ALPHA);
线宽(8);
gl点大小(8);
//别处
-(void)绘图圆:(CGPoint)中心半径:(float)r弧:(float)a线:(NSUInteger)segs lineToCenter:(BOOL)drawLineToCenter
{
int additionalSegment=1;
如果(drawLineToCenter)
附加段++;
常量浮点系数=2.0f*(浮点)M_PI/segs;
GLfloat*顶点=calloc(sizeof(GLfloat)*2*(segs+2),1);
如果(!顶点)
回来

对于(i=0;i我是openGL的初学者,但正如我所知,openGL的设置对于您的所有程序都是相同的。您自己的图形的某些代码应该在该设置中更改某些内容。这可能是您的eshue的原因。我不能告诉您更多,但您应该解决这个问题