CCRender纹理视差滚动bug

时间:2014-04-12 10:32:35

标签: objective-c cocos2d-iphone

问题在于纹理...... 在大约20秒后滚动纹理错误。图像会失去质量并产生模糊效果。

这是一个链接,您可以在其中查看该错误的屏幕截图 https://code.google.com/p/cocos2d-iphone/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Priority%20Milestone%20Component%20Owner%20Summary&groupby=&sort=&id=1516

这是代码

-(CCSprite *)stripedSpriteWithColor1:(ccColor4F)c1 color2:(ccColor4F)c2 textureWidth:(float)textureWidth
                       textureHeight:(float)textureHeight stripes:(int)nStripes {

    // 1: Create new CCRenderTexture
    CCRenderTexture *rt = [CCRenderTexture renderTextureWithWidth:textureWidth height:textureHeight];

    // 2: Call CCRenderTexture:begin
    [rt beginWithClear:c1.r g:c1.g b:c1.b a:c1.a];

    // 3: Draw into the texture


    // Layer 1: Stripes

    CGPoint vertices[nStripes*6];
    ccColor4F colors[nStripes*6];

    int nVertices = 0;

    CCSprite *noise= [CCSprite spriteWithFile:@"Noise.jpg"];

    [noise visit];


    CC_NODE_DRAW_SETUP();



    nVertices = 0;

    vertices[nVertices] = CGPointMake(0, 0);
    colors[nVertices++] = (ccColor4F){0, 0, 0, 0};

    vertices[nVertices] = CGPointMake(textureWidth, 0);
    colors[nVertices++] = (ccColor4F){0, 0, 0, 0};

    vertices[nVertices] = CGPointMake(0, textureHeight);
    colors[nVertices++] = (ccColor4F){0, 0, 0, gradientAlpha};

    vertices[nVertices] = CGPointMake(textureWidth, textureHeight);
    colors[nVertices++] = (ccColor4F){0, 0, 0, gradientAlpha};

    glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, vertices);
    glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_FLOAT, GL_TRUE, 0, colors);
    glBlendFunc(CC_BLEND_SRC, CC_BLEND_DST);*/
    //glDrawArrays(GL_TRIANGLE_STRIP, 0, (GLsizei)nVertices);

    // layer 3: top highlight
    float borderHeight = textureHeight/16;
    float borderAlpha = 0.6f;
    nVertices = 0;

    vertices[nVertices] = CGPointMake(0, 0);
    colors[nVertices++] = (ccColor4F){0, 0.4, 0.2, borderAlpha};

    vertices[nVertices] = CGPointMake(textureWidth, 0);
    colors[nVertices++] = (ccColor4F){0, 0.4, 0.2, borderAlpha};

    vertices[nVertices] = CGPointMake(0, borderHeight);
    colors[nVertices++] = (ccColor4F){0, 0.4, 0.2, 0};

    vertices[nVertices] = CGPointMake(textureWidth, borderHeight);
    colors[nVertices++] = (ccColor4F){0, 0.4, 0.2, 0};

    glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, vertices);
    glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_FLOAT, GL_TRUE, 0, colors);
    glBlendFunc(CC_BLEND_SRC, CC_BLEND_DST);
    glDrawArrays(GL_TRIANGLE_STRIP, 0, (GLsizei)nVertices);

    // 4: Call CCRenderTexture:end
    [rt end];

    // 5: Create a new Sprite from the texture
    return [CCSprite spriteWithTexture:rt.sprite.texture];
}


and here is the call

CCSprite *stripes = [self stripedSpriteWithColor1:color3 color2:color4
                                         textureWidth:IS_IPHONE_5 ? 512:256 textureHeight:256 stripes:4];
    ccTexParams tp2 = {GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_CLAMP_TO_EDGE};
    [stripes.texture setTexParameters:&tp2];

0 个答案:

没有答案