【发布时间】:2012-02-12 02:58:14
【问题描述】:
如何在多个位置拥有相同的精灵 Cocos2d 请帮忙 我找遍了,找不到答案
【问题讨论】:
标签: cocos2d-iphone sprite
如何在多个位置拥有相同的精灵 Cocos2d 请帮忙 我找遍了,找不到答案
【问题讨论】:
标签: cocos2d-iphone sprite
只需创建多个 Sprite(CCSprite 实例)。它们都可以使用相同的纹理(位图文件)。
CCSprite * mySprite1;
CCSprite * mySprite2;
CCSprite * mySprite3;
// create several sprites from the same bitmap file
mySprite1 = [CCSprite spriteWithFile:@"spriteBitmap.png"];
mySprite2 = [CCSprite spriteWithFile:@"spriteBitmap.png"];
mySprite3 = [CCSprite spriteWithFile:@"spriteBitmap.png"];
mySprite1.position = ccp(100, 100);
mySprite2.position = ccp(200, 200);
mySprite3.position = ccp(300, 300);
【讨论】:
你不能将同一个 CCSprite 作为一个子节点添加到多个 CCNode,但你可以让 Cocos2D 多次渲染同一个 CCSprite。 要实现这一点,您需要创建 CCNode 的子类,它将存储对 CCSprite 的引用并在其 -draw 方法中应用所需的转换来绘制它。 例如
-(void)draw
{
[super draw];
CGPoint initialPosition = [_node position];
float initialScale = [_node scale];
[_node setScale:self.scale];
[_node setPosition:self.position];
[_node visit];
[_node setPosition:initialPosition];
[_node setScale:initialScale];
}
如果您需要画中画外观,您可能必须使用 glScissor。
然后,每次您想要渲染原始 CCSprite 的额外副本时,您只需添加一个此类的实例。
【讨论】:
将方法放在 for 循环中。
在方法内部创建 CCSprite 并对其进行修改。
这最适合静态精灵,因为我不知道如何在方法之外访问它们。
【讨论】: