cocos2d-x-2.1.4用到CCSpriteFrameCache的时候,应该怎么初始化CCSprite* sprite呀?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cocos2d-x-2.1.4用到CCSpriteFrameCache的时候,应该怎么初始化CCSprite* sprite呀?相关的知识,希望对你有一定的参考价值。

用到plist文件和精灵帧,但是精灵应该初始化为谁呢?还是应该创建CCSpriteBatchNode对象呢?
CCSpriteFrameCache* frameCache = CCSpriteFrameCache::sharedSpriteFrameCache();
frameCache->addSpriteFramesWithFile("grossini.plist");

CCSprite* sprite =???
sprite->setPosition(ccp(240,160));
addChild(sprite);
for (int i=1;i<15;i++)


CCString* fileName = CCString::createWithFormat("grossini_dance_%02d.png",i);
CCSpriteFrame* spriteFrame = frameCache->spriteFrameByName(fileName->getCString());
animation->addSpriteFrame(spriteFrame);

animation->setDelayPerUnit(0.5f);
animation->setLoops(-1);

CCAnimationCache* animationCache = CCAnimationCache::sharedAnimationCache();
animationCache->addAnimation(animation,"Dance");
CCAnimate* animate = CCAnimate::create(animationCache->animationByName("Dance"));

sprite->runAction(animate);

CCSprite* sprite =CCSprite.createWithSpriteFrameName("grossini_dance_01.png")
sprite->setPosition(ccp(240,160));
addChild(sprite);
参考技术A 用create函数加载一个精灵啊,也就是加载一个png图片,然后给定坐标,最后添加到图层当中。

CCSprite 不会隐形-iphone

【中文标题】CCSprite 不会隐形-iphone【英文标题】:CCSprite doesn't go invisible -iphone 【发布时间】:2013-05-03 06:25:54 【问题描述】:

在.h文件中

CCSprite *backwheels;

in .m file

    backwheels = [CCSprite spriteWithFile:@"wheels_back.png"];
    backwheels.position = ccp(400,120);
    [self addChild:backwheels];

-(void) showGameOver 
      backwheels.visible = false;

但是当游戏结束时,backWheels 仍然出现在场景中..? ! 有什么帮助吗?! 注意:我也合成了后轮,但仍然不适合我。

【问题讨论】:

showGameOver 会被调用吗? 是的,当然.. 我还有另一个 CCSprite 对象,它也驻留在 showGameOver 方法中,当我写 cannon.visible = false 时它不可见; 我没有看到其余代码的唯一可能原因是您的后轮指针没有指向屏幕上显示的实际精灵 但是我也合成了但是还是不行。 从 Xcode 4.5 开始,您不再需要合成属性。合成与否与问题无关。尝试检查 showGameOver 方法 - 你能改变你的后轮的任何其他东西,除了可见性。我很确定你不能改变它的旋转、比例或颜色。检查一下 【参考方案1】:

我可以给你一个快速修复。这不是最好的方法,最好的方法是找出导致这种行为的确切原因,但是如果不查看您的其余代码,我就无法做到这一点。无论如何,这就是您可以在showGameOver 方法中访问后轮精灵的方式。当您创建精灵时,请以这种方式进行:

 backwheels = [CCSprite spriteWithFile:@"wheels_back.png"];
 backwheels.position = ccp(400,120);
 backwheels.tag = 100; // whatever integer value you wish
[self addChild:backwheels];

然后你在showGameOver 中检索它:

backwheels = [self getChildByTag:100];
backwheels.visible = false;

我相信它会起作用的。

【讨论】:

你不会相信,但这对我也不起作用。它在 showGameOver 方法中向我显示警告“从 CCNode * 分配给 CCSprite* 的不竞争指针类型” 尝试 CCNode *test = [self getChildByTag:100]; test.visible = false; 还是一样..我不知道为什么它不起作用..我发誓我没有为后轮编写任何代码,除了上面提到的代码.. :(跨度> 在创建后立即检查后轮的地址:backwheels = [CCSprite spriteWithFile:@"wheels_back.png"]; NSLog(@"%p", 后轮);以及您通过标签检索到的对象的地址 NSLog(@"%p", [self getChildByTag:100);并告诉我他们是否相等 问题已解决..!! @Andrey Cheernukha 非常感谢您宝贵的时间.. :)【参考方案2】:

你总是可以改变精灵的不透明度,即

-(void) showGameOver 
      backwheels.opacity = 0.0f;

然后当您希望它重新出现时,将其更改为

backwheels.opacity = 1.0f;

【讨论】:

【参考方案3】:

使用移除子节点:

[self removeChild:backwheels cleanup:YES];

【讨论】:

为什么要投反对票???如果要从视图中删除所有子项,还可以使用 [self removeAllChildrenWithCleanup:YES]; 我没有投反对票。但是如果我有足够的声誉,我会的。无论如何,当我使用可见或 setVisible 属性时,这意味着我想稍后使用那个 CCsprite 对象..移除孩子不是解决方案。

以上是关于cocos2d-x-2.1.4用到CCSpriteFrameCache的时候,应该怎么初始化CCSprite* sprite呀?的主要内容,如果未能解决你的问题,请参考以下文章

用另一个 CCSprite/CCNode 剪辑 CCSprite/CCNode - Cocos2D

设置 CCSprite 的框架?

CCSprite 带有图像文件和声音文件

在 CCSprite 中淡入图像?

cocos2d CCSprite 碰撞问题

CGRect 随 CCSprite 旋转而变化?