Я могу без проблем запускать действия 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];