天道酬勤,学无止境

How to resize the the animating sprite in cocos2d-x

I want to change the size of a Sprite which is animating. How can I do this ? I tried to change its size by using setScale property but it is not working here. where I am doing wrong ?

CCArray* frames = CCArray::createWithCapacity(3);
CCSpriteFrameCache* frameCache = CCSpriteFrameCache::sharedSpriteFrameCache();


char file[100] = {0};
for (int i = 0; i < 3; i++)
{
    sprintf(file, "bird%d.png", i);
    CCSpriteFrame* frame = frameCache->spriteFrameByName(file);
    frames->addObject(frame);
}

CCAnimation* animation = CCAnimation::createWithSpriteFrames(frames, 0.1);
CCAnimate* animate = CCAnimate::create(animation);
CCRepeatForever* repeat = CCRepeatForever::create(animate);

bird->runAction(repeat);
bird->setScale(0.7); 

评论

Try like this. It's working fine.

CCSprite* pSprite = CCSprite::create("pic2.png");
pSprite->setPosition( ccp(size.width/2, size.height/2) );
this->addChild(pSprite, 0);

//Animation
CCAnimation *animate = CCAnimation::create();
for (int i = 1; i <=3; i++)
{
  char frameName[128] = {0};
  sprintf(frameName, "pic%d.png", i);
  animate->addSpriteFrameWithFileName(frameName) ;
}

animate->setDelayPerUnit(0.1f); // This animation contains 3 frames, will continuous 2.8 seconds.
animate->setRestoreOriginalFrame(true); // Return to the 1st frame after the 3rd frame is played.

CCAnimate *animaction = CCAnimate::create(animate);
CCRepeatForever *reptaction = CCRepeatForever::create(animaction);
pSprite->runAction(reptaction);
pSprite->setScale(0.3);

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • cocos2d-x学习笔记(二)序列帧动画实现的几种方法
    一、cocos2d-x帮助文档中关于动画帧动画的实现有两种方法:手动添加序列帧到Animation类使用文件初始化Animation类这里我就不列出来,大家可以看下官方文档http://www.cocos.com/doc/article/index?type=cocos2d-x&url=/doc/cocos-docs-master/manual/framework/native/v3/frame-animation/zh.md 二、有些时候我们需要从plist取出指定的几个图片(而不是全部)来播放动画,接下来我们主要介绍下这种方法:1、首先我们先通过使用SpriteFrameCache来创建精灵帧缓存 SpriteFrameCache::getInstance()->addSpriteFramesWithFile("test.plist");2、假设test.plist中有machine_1.png和machine_2.png这两个精灵图片,通过createWithSpriteFrameName可以获取精灵:auto machine = Sprite::createWithSpriteFrameName("machine_1.png");3、创建一个Vector类型的数据用来存放所需要的精灵帧,通过for循环添加动画精灵Vector<SpriteFrame*>frameVector
  • 检查动画是否在 cocos2d-x 中运行(Check If animation is running in cocos2d-x)
    问题 我目前正在学习 cocos2D-x 并且正在做一些精灵动画。 我的目标是,当单击按钮时,对象会向左移动并带有一些动画。 现在,如果您快速单击多次,动画会立即发生,看起来熊是在希望而不是在走路。 它的解决方案看起来很简单,我应该检查动画是否已经在运行,以及是否不应该运行新动画。 以下是我的代码的一部分。 CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("AnimBear.plist"); CCSpriteBatchNode* spriteBatchNode = CCSpriteBatchNode::create("AnimBear.png", 8); this->addChild(spriteBatchNode,10); CCArray *tempArray = new CCArray(); char buffer[15]; for (int i = 1; i <= 8 ; i++) { sprintf(buffer,"bear%i.png", i); tempArray->addObject(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(buffer)); } CCAnimation
  • Cocos2d-x 背景图片显示不正常(Cocos2d-x Background image is not displaying properly)
    问题
  • cocos2d-x中如何使用box2d进行碰撞检测(how to use box2d for collision detection in cocos2d-x)
    问题 我的两个精灵是滚动和英雄。 我想在 cocos2d-x 中使用 box2d 检测它们的碰撞我已经让两个精灵在屏幕上移动(自动滚动,手动英雄)。 我想要做的就是调用函数intersection(); 当两个精灵碰撞时。 (精灵在 *.h 文件中全局声明) #include "GameScene.h" #include "HomeScene.h" USING_NS_CC; CCScene* GameScene::scene() { // 'scene' is an autorelease object CCScene *scene = CCScene::node(); // 'layer' is an autorelease object GameScene *layer = GameScene::node(); // add layer as a child to scene scene->addChild(layer); // return the scene return scene; } // on "init" you need to initialize your instance bool GameScene::init() { ////////////////////////////// // 1. super init first if (
  • how to use box2d for collision detection in cocos2d-x
    my two sprites are roll and hero. i want to detect their collision using box2d in cocos2d-x i have got both the sprites moving on the screen (roll automatically, hero manually). all i want to do is call the function intersection(); when the two sprites collide. (sprites are declared globally in the *.h file) #include "GameScene.h" #include "HomeScene.h" USING_NS_CC; CCScene* GameScene::scene() { // 'scene' is an autorelease object CCScene *scene = CCScene::node(); // 'layer' is an autorelease object GameScene *layer = GameScene::node(); // add layer as a child to scene scene->addChild(layer);
  • Cocos2d-x 设计模式 (3):管理者模式
    想必读者一看这个题目又要纳闷了,神马又是“管理者模式”啊? 管理者(Manager)就是专门负责管理其它类的实例的类,比如Cocoa里面的NSFontManager、NSInputManager、NSFileManager和NSLayoutManager类。此模式和“二段构建模式”一样,也没有出现在GoF的23个设计模式中,但是《Cocoa设计模式》一书中有提及,感兴趣的读者可以去查阅一下。 1.应用场景: 在cocos2d-x里面有大量的应用,比如之前在介绍单例模式中提到的CCTextureCache, CCSpriteFrameCache, CCAnimationCache和CCShaderCache类。 这些管理者一般被设计成单例类。 为什么管理者类要设计成单例呢?因为管理者一般会采用key-value的形式来管理其它类的实例,每当需要获取一个管理者中的实例时,只需要提供一个惟一的键值字符串就可以得到一个与之对应的惟一实例。如果允许存在多个管理者实例的话,那么每个管理者都会维护各自的key-value pairs。这样显然就不能通过键值字符串来获得惟一对象实例了。 CCSpriteFrameCache类通过定制的plist文件来实例化一系列相关的CCSpriteFrame实例,然后只需要提供精灵帧的名字就可以得到相应的CCSpriteFrame实例了。从这个意义上来说
  • Check If animation is running in cocos2d-x
    I am currently learning cocos2D-x and am doing some sprite animation. My Objective is that when a button is clicked the object moves to left with some animation. Now if you click multiple times rapidly the animation takes place immediately and it looks like the bear is hoping instead of walking. The solution to it looks simple that I should check if animation is already running and if running the new animation should not take place. The following is a part of my code. CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("AnimBear.plist"); CCSpriteBatchNode* spriteBatchNode =
  • Cocos2dx发展历程
    文章目录 Cocos2dx发展历程Python版本Cocos2d-iPhone其他版本的移植Cocos2d-x 从v2.0到v3.0Cocos产品CocosCocos2d-xCocos CreatorOthers Cocos2dx发展历程 原文参考 Python版本 2005-2007 Ricardo和朋友使用Python语言设计并开发多种游戏,在设计新游戏的过程中,每次都要重新开发引擎;2008.02 在阿根廷Los Cocos组建游戏开发团队并开始创建游戏开发引擎;2008.03 在PyCon 2008芝加哥宣布了alpha版本(v0.1),命名Los cocos,之后改名为Cocos2d;2008.07 EuroPython 2008上展示了Cocos2d(v0.3); Cocos2d-iPhone 2008.06 公布用Objective-C编写的Cocos2d for iPhone v0.1;2008.07 使用该开发引擎开发了第一个游戏Sapus Tongue;2008.12 使用该引擎开发的游戏在App Store中已超过40个;2009年初 使用该引擎开发的Stick Wars获得了应用商店排名第一;2011.07 在社区帮助下,发布了cocos2d-iphonev1.0; 其他版本的移植 Java cocos2d-android, cocos2d-android
  • 我怎样才能通过像 Cocos2D 这样的 SpriteKit 倾斜/剪切精灵?(How could I skew/shear a sprite via SpriteKit like Cocos2D?)
    问题 在 Cocos2D-x 中,CCNode 类提供了“skewX”和“skewY”来让我对精灵进行一些扭曲,但是,我在 SpriteKit 的 SKNode 中找不到类似的映射。 我的游戏使用 Flash 移植骨骼动画,其中精灵的定位、缩放、旋转和剪切配置将被分解为游戏引擎的消化。 除了剪切之外,所有其他配置都有解决方案需要在 SpriteKit 中完成。 回答1 您可以使用 CGAffineTransform、CoreImage 过滤器和 SKEffectNode 实现倾斜效果 let transform = CGAffineTransform(a: 1, b: 0.1, c: -0.3, d: 1, tx: 0, ty: 0) let transformValue = NSValue(cgAffineTransform: transform) let transformFilter = CIFilter(name: "CIAffineTransform")! transformFilter.setValue(transformValue, forKey: "inputTransform") let effectNode = SKEffectNode() effectNode.addChild(sprite) // <-- Add sprite to effect node
  • 如何区分动画与ios中的单个精灵表?(how to differentiate animation from single sprite sheet in ios?)
    问题 我正在开发在没有cocos2D帮助的情况下使用精灵表的应用程序。 我使用下面的图像作为精灵表 在弓图片中有许多不同的图像。 我想让它们在不同的位置动画 我已经按照本教程进行操作,但它只有一个动画 UIKit-TexturePacker 我想在没有 cocos2d 帮助的情况下实现这一点(使用 UIKIT)。 任何帮助,将不胜感激。 回答1 您有 2 个选择: 困难的方法您按原样获取精灵表并提取精灵的坐标和大小。 有了这些信息,您必须使用数据创建一个 .plist 文件: <key>green_bird</key> <dict> <key>x</key><real>2</real> <!-- x position in the sheet --> <key>y</key><real>259</real> <!-- y position in the sheet --> <key>w</key><real>126</real> <!-- width in the sheet --> <key>h</key><real>255</real> <!-- height in the sheet --> <key>oX</key><real>13</real> <!-- offset in the sprite, x--> <key>oY</key><real>2</real> <!--
  • 如何在 Cocos2d-X 中交换 CCSprite 对象中的精灵(How to swap the sprite in the CCSprite object in Cocos2d-X)
    问题 我有一个从 CCSprite 继承的对象。 我想从这个对象内部改变图像。 如何更改图像(精灵)而不在 Cocos2d-X 中创建新的 CCSprite 对象? 谢谢,阿德里安。 回答1 mySprite->setTexture(CCTextureCache::sharedTextureCache()->addImage("newImage.png")); 无需更改您的自定义类.. 希望这会有所帮助.. :) 回答2 对我有用: mySprite->setDisplayFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("frame_name")); 在您需要在缓存中加载精灵之前: CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("sprite_atlas.plist"); 回答3 我发现了,我把它留在这里以防有人遇到同样的问题: 在从 CCSprite 对象继承的对象中,编写如下函数 void MyObject::UpdateImage(Char * PngName) { /* Create Image */ CCImage *MyImage = new CCImage(); MyImage-
  • cocos2d-x: loading sprite from another thread not possible, any pattern?
    Facts of my program Cocos2d-x main loop runs in its own thread. Let's call it cocos2d-x-thread. I have a task_scheduler that runs in its own thread, in which you can submit lightweight tasks. Let's call it task_scheduler-thread. Every x milliseconds, a callback is emitted from the task_scheduler thread. Let's call it task_scheduler-tick-callback. What I want to do I want to load a sprite when task_scheduler-tick-callback is emitted, but I cannot do it from that thread, so I will have to submit some kind of work to be performed by cocos2d-x thread. Problem How can I make cocos2d-x-thread, when
  • How to swap the sprite in the CCSprite object in Cocos2d-X
    I have an object that inherited from CCSprite. I want from inside this object to change the image. How do I change the image (sprite) without creating a new CCSprite object in Cocos2d-X? Thanks, Adrian.
  • 在 Cocos2D-x 的多分辨率设置中使用精灵图集(Using sprite atlases in a multi resolution setup in Cocos2D-x)
    问题 我刚刚能够为多分辨率环境设置 Cocos2d-x。 即支持所有/大部分可用的 iPhone 屏幕尺寸。 我的下一步是废弃单个文件(一堆 png)并使用精灵图集(又名精灵表)。 这在 Cocos2D-x 中是如何工作的? 有人有工作样本设置吗? 再一次,谷歌和现有文档(好吧,我认为不存在)让我失望。 回答1 对于 cocos2d-x v3.5... cocos2d-x 测试类始终是查看如何使用 cocos2d-x 完成任务的好地方。 查看 AppDelegate.cpp 在:Cocos2d-x/cocos2d-x-3.5/tests/cpp-tests/Classes/AppDelegate.cpp。 在该类中,测试窗口大小以查看应加载哪一组资产。 这是问题的一部分,决定加载哪些资产。 对于 iOS 视网膜,您可以检查屏幕大小,然后将内容比例因子设置为 1.0(标准分辨率)或 2.0(视网膜分辨率)。 不幸的是,cocos2d-x 似乎从来没有检测过某些屏幕尺寸并为你调用 Director::getInstant()->setContentScaleFactor(2.0),所以我认为我们必须自己做这件事。 我还没有测试过在非苹果设备上设置 contentScaleFactor 的影响...... 查看下面的代码。 尝试在您的 AppDelegate
  • cocos2d-x:不可能从另一个线程加载精灵,任何模式?(cocos2d-x: loading sprite from another thread not possible, any pattern?)
    问题 我的程序的事实 Cocos2d-x 主循环在自己的线程中运行。 我们称之为cocos2d-x-thread 。 我有一个task_scheduler在它自己的线程中运行,您可以在其中提交轻量级任务。 我们称之为task_scheduler-thread 。 每 x 毫秒, task_scheduler线程发出一个回调。 我们称之为task_scheduler-tick-callback 。 我想做的事 我想在发出 task_scheduler-tick-callback时加载一个精灵,但我无法从该线程执行此操作,因此我将不得不提交由cocos2d-x thread执行的某种工作。 问题 我怎样才能让cocos2d-x-thread在收到这项工作时被执行? 因为 cocos2d-x 已经在运行自己的循环,我想不惜一切代价避免将自定义代码注入到 cocos2d-x 生成的项目中。 有什么图案吗? 编辑:想法 -> 在 cocos2d-x 中为每次循环迭代调用的任何回调函数? 那存在吗? 我可以整合打到我工件这样。 回答1 使用它在主线程中执行您的代码: Director::getInstance()->getScheduler()->performFunctionInCocosThread([]{ // your code }); 回答2 实现这一点的最简单(也可能不是最优雅
  • Cocos2D-x 3.0 中的图元和精灵 Z 索引不一致?(Primitives and sprites Z index in Cocos2D-x 3.0 is not consistent?)
    问题 我有两层。 每个层都有一个原始图形,其中包含 OpenGL,如下所示: void Layer1::drawPolygon() { glLineWidth(1); DrawPrimitives::setDrawColor4B(255,255,255,255); DrawPrimitives::setPointSize(1); // Anti-Aliased glEnable(GL_LINE_SMOOTH); // filled poly glLineWidth(1); Point filledVertices[] = { Point(10,120), Point(50,120), Point(50,170), Point(25,200), Point(10,170) }; DrawPrimitives::drawSolidPoly(filledVertices, 5, Color4F(0.5f, 0.5f, 1, 1 ) ); } 当我将这些层添加到场景中并设置 Z 顺序 1 和 2 时,我看到我可以将一个基元置于另一个之上,反之亦然——当我交换 Z 顺序值时。 当我将精灵添加到这些层之一时,奇怪的事情就开始了。 如果我 addChild 一个精灵,那么精灵位于该层的基元之上,而不仅仅是该层。 即使图层具有较小的 Z 索引,无论如何它的精灵位于其他图层的图元之上
  • Using sprite atlases in a multi resolution setup in Cocos2D-x
    I've just been able to setup a Cocos2d-x for a multiresolution environment. Ie supporting all/most of the available iPhone screen sizes. My next step is to scrap the individual files (bunch of pngs) and use sprite atlases (aka sprite sheets) instead. How does this work in Cocos2D-x? Does anyone have a working sample setup? Once again, Google and existing documentation (well, I don't think that exists) fail me.
  • Primitives and sprites Z index in Cocos2D-x 3.0 is not consistent?
    I have two layers. Each layer has a primitive drawing in it with OpenGL like this: void Layer1::drawPolygon() { glLineWidth(1); DrawPrimitives::setDrawColor4B(255,255,255,255); DrawPrimitives::setPointSize(1); // Anti-Aliased glEnable(GL_LINE_SMOOTH); // filled poly glLineWidth(1); Point filledVertices[] = { Point(10,120), Point(50,120), Point(50,170), Point(25,200), Point(10,170) }; DrawPrimitives::drawSolidPoly(filledVertices, 5, Color4F(0.5f, 0.5f, 1, 1 ) ); } When I addChild these layers to a scene and set Z orders 1 and 2, I see that I can bring one primitive on top of another and vice
  • COCOS2D-X:缩放精灵(COCOS2D-X: scale sprite)
    问题 我想按原始图像的高度设置精灵的比例。 然后该精灵的宽度将遵循该图像的原始比例。 我怎样才能做到这一点。 感谢您的帮助。 回答1 CCSprite 有一个成员函数 virtual void setScale(float scale) 参考:setScale 只需创建一个精灵,并调用此函数。 CCSprite* bg = CCSprite::create("background.png"); this->addChild(bg,0); bg->setScale(2.0); bg 精灵将比原点大两倍。 回答2 使用 CCSprite 的 setScale 函数,例如 - CCSprite *Sprite = CCSprite::create(WHEEL_SPRITE); Sprite->setScale(DIRECTOR_VISIBLE_HEIGHT*0.65/Sprite->getContentSize().height); Sprite->setPosition(ccp(DIRECTOR_VISIBLE_WIDTH/2, DIRECTOR_VISIBLE_HEIGHT/2)); this->addChild(Sprite); 回答3 您只能按宽度或高度缩放: sprite->setScaleX()和sprite->setScaleY()
  • 如何在cocos2d for iphone中获取CCSprite的宽度和高度(how to obtain a CCSprite's width and height in cocos2d for iphone)
    问题 这就是问题 xD 给定一个在iphone cocos2d中的CCSprite实例,我可以使用什么方法来获取图像的宽度和高度? 回答1 CCSprite 类有一个边界框属性,它是一个 CGRect: CCSprite *sprite = [CCSprite spriteWithFile: @"file.png"]; int width = [sprite boundingBox].size.width; 我在 CCSprite 子类中添加了宽度和高度方法。 -(CGFloat) width { return [self boundingBox].size.width; } -(CGFloat) height { return [self boundingBox].size.height; } 回答2 原始宽度: sprite.contentSize.width 原始高度: sprite.contentSize.height 当前宽度: sprite.contentSize.width * sprite.scaleX 当前高度: sprite.contentSize.height * sprite.scaleY 回答3 在 cocos2d-x sprite->boundingBox().size.width; sprite->boundingBox().size.height