gpt4 book ai didi

ios - cocos2d中如何在不同的CCSpriteBatchNode之间切换 Sprite

转载 作者:行者123 更新时间:2023-12-01 19:12:17 25 4
gpt4 key购买 nike

我在 cocos2d 中制作游戏,我有一只鸡作为使用 CCSprite 的角色。这只鸡有多个图像做不同的 Action 。

有太多的 Action 图像,我不得不为 Sprite 使用多个 plist 文件。

我的问题是我可以在不同的 Sprite 之间切换

    [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:
@"chicken-1to3.plist"];

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:
@"chicken-4to5.plist"];

spriteSheet1to3 = [CCSpriteBatchNode
batchNodeWithFile:@"chicken-1to3.png"];
spriteSheet4to5 = [CCSpriteBatchNode
batchNodeWithFile:@"chicken-4to5.png"];
[self addChild:spriteSheet1to3 z:1];
[self addChild:spriteSheet4to5 z:2];

NSMutableArray *chickenManAni1Imgs = [NSMutableArray array];
NSMutableArray *chickenManAni2Imgs = [NSMutableArray array];
NSMutableArray *chickenManAni3Imgs = [NSMutableArray array];
NSMutableArray *chickenManAni4Imgs = [NSMutableArray array];
NSMutableArray *chickenManAni5Imgs = [NSMutableArray array];

for(int i = 1; i <= 9; ++i) {
[chickenManAni1Imgs addObject:
[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
[NSString stringWithFormat:@"chicken-1-%d.png", i]]];
}
for(int i = 1; i <= 19; ++i) {
[chickenManAni2Imgs addObject:
[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
[NSString stringWithFormat:@"chicken-2-%d.png", i]]];
}
for(int i = 1; i <= 21; ++i) {
[chickenManAni3Imgs addObject:
[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
[NSString stringWithFormat:@"chicken-3-%d.png", i]]];
}
for(int i = 1; i <= 16; ++i) {
[chickenManAni4Imgs addObject:
[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
[NSString stringWithFormat:@"chicken-4-%d.png", i]]];
}
for(int i = 1; i <= 36; ++i) {
[chickenManAni5Imgs addObject:
[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
[NSString stringWithFormat:@"chicken-5-%d.png", i]]];
}

chickenManAni1 = [CCAnimation
animationWithSpriteFrames:chickenManAni1Imgs delay:0.04f];
chickenManAni2 = [CCAnimation
animationWithSpriteFrames:chickenManAni2Imgs delay:0.04f];
chickenManAni3 = [CCAnimation
animationWithSpriteFrames:chickenManAni3Imgs delay:0.04f];
chickenManAni4 = [CCAnimation
animationWithSpriteFrames:chickenManAni4Imgs delay:0.04f];
chickenManAni5 = [CCAnimation
animationWithSpriteFrames:chickenManAni5Imgs delay:0.04f];

chickenMan = [CCSprite spriteWithSpriteFrameName:@"chicken-5-1.png"];
chickenMan.position = ccp(winSize.width/2, winSize.height/2);

[spriteSheet4to5 addChild:chickenMan];

[chickenMan runAction:[CCRepeatForever actionWithAction:
[CCAnimate actionWithAnimation:chickenManAni5 restoreOriginalFrame:NO]]];
chickenManAniRunning = 1;

这是我尝试更改 Sprite 时的代码
        [chickenMan stopAllActions];
[spriteSheet4to5 removeChild:chickenMan cleanup:YES];
[spriteSheet1to3 addChild:chickenMan];

[chickenMan runAction:[CCRepeatForever actionWithAction:
[CCAnimate actionWithAnimation:chickenManAni2 restoreOriginalFrame:NO]]];

之后我收到此错误:
'CCSprite 没有使用相同的纹理 ID'

更新 :我正在使用两个不同的 Sprite :
    chickenMan1to3 = [CCSprite spriteWithSpriteFrameName:@"chicken-1-1.png"];
chickenMan1to3.position = ccp(winSize.width/2, winSize.height/2);
[chickenMan1to3 setVisible:YES];

chickenMan4to5 = [CCSprite spriteWithSpriteFrameName:@"chicken-5-1.png"];
chickenMan4to5.position = ccp(winSize.width/2, winSize.height/2);
[chickenMan4to5 setVisible:NO];

我这样切换它们:
        [chickenMan1to3 stopAllActions];
[chickenMan1to3 setVisible:NO];
[chickenMan4to5 setVisible:YES];
[chickenMan4to5 runAction:[CCRepeatForever actionWithAction:
[CCAnimate actionWithAnimation:chickenManAni4 restoreOriginalFrame:NO]]];

最佳答案

使用两个 Sprite ,每个批处理节点一个。从另一个批处理节点切换到动画时,将动画 Sprite 设置为可见并隐藏另一个。为了使它们同步动画,将两个 Sprite 添加到一个 ccnode,然后就位置、 Action 和其他逻辑而言,它将代表你的鸡角色。

如果小鸡是批处理节点中唯一的 Sprite 子节点,您可以简单地删除批处理节点,因为批处理仅在您拥有相同 Sprite 和纹理的多个实例时才有帮助。

关于ios - cocos2d中如何在不同的CCSpriteBatchNode之间切换 Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15694562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com