Cocos2D 2.x: запуск действия CCWave заставляет спрайт исчезнуть

Я могу без проблем запускать действия CCWave на спрайтах, за исключением этого конкретного случая. Я инициализирую свой класс с CCSprite, который я добавляю в CCRenderTexture. Спрайт создается путем добавления текстур спрайта плиток в CCRenderTexture и последующего удаления плиток. Я могу добавить спрайт в CCRenderTexture как дочерний элемент без проблем, но если я добавлю функцию CCWave и запустил ее, спрайт исчезнет.

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

        // 2: Call CCRenderTexture:begin
        [rt beginWithClear:0 g:0 b:0 a:0];

        /* this is a loop where I get all tiles 
           within a bounding object's rectangle */

        CGPoint tileCoord;

        for(int w = 0; w < (width / tilePxWidth); ++w){

            for(int h = (height / tilePxWidth); h > 0; --h){

                tileCoord = [TileCoord tileCoordForPosition:ccp(x + (w * tilePxWidth),
                                                                y + (h * tilePxWidth))
                                                    withMap:theMap];



                CCSprite *backgroundTileSprite = [self.background tileAt:tileCoord];

                CCSprite *copiedSprite = [CCSprite spriteWithTexture:backgroundTileSprite.texture
                                                                rect:backgroundTileSprite.textureRect];

                [copiedSprite.texture setAliasTexParameters];

                copiedSprite.position = ccp(8 + (w * tilePxWidth),
                                           (8 + (h * tilePxWidth)) - 16);

                // 3: Visit to update renderTexture (rt)
                [copiedSprite visit];

                [self.background removeTileAt:tileCoord];

            }


        }


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

        // 5: Create a new sprite from the texture
        waterLine.tilesSprite = [CCSprite spriteWithTexture:rt.sprite.texture];


        [theMap addChild:waterLine.tilesSprite z:[[theMap layerNamed:@"background"] zOrder]-1];

        waterLine.tilesSprite.flipY = YES;

        waterLine.tilesSprite.anchorPoint = CGPointZero;

        waterLine.tilesSprite.position = ccp(x,y);



        [waterLines insertObject:waterLine atIndex:waterLineNum];

        // if I add the code below, the sprite no longer shows up!

        id waveEffect = [CCWaves actionWithDuration:25
                                               size:CGSizeMake(1,10)
                                              waves:3
                                          amplitude:8
                                         horizontal:NO
                                           vertical:YES];

        [waterLine.tilesSprite runAction:[CCRepeatForever actionWithAction:waveEffect]];

Несколько дополнительных деталей, которые могут вас заинтересовать. У меня в этой игре прозрачный фон, поэтому он может работать отдельно от игры, когда я выполняю переходы между сценами.

Некоторые вещи в моем делегате:

CCGLView *glView = [CCGLView viewWithFrame:[window_ bounds]
                                   pixelFormat:kEAGLColorFormatRGBA8
                                   depthFormat:GL_DEPTH24_STENCIL8_OES
                            preserveBackbuffer:NO
                                    sharegroup:nil
                                 multiSampling:NO
                               numberOfSamples:0];


[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888];

glView.opaque = NO;
glClearColor(0.0f,0.0f,0.0f,0.0f);

[CCTexture2D PVRImagesHavePremultipliedAlpha:YES];

person Chewie The Chorkie    schedule 10.06.2015    source источник


Ответы (1)


Я только что сообразил, что этот эффект нужно делать на spriteSheet, а не на спрайте.

person Chewie The Chorkie    schedule 11.06.2015