天道酬勤,学无止境

如何在 cocos2d-x 中调整动画精灵的大小(How to resize the the animating sprite in cocos2d-x)

问题

我想更改正在动画的 Sprite 的大小。 我怎样才能做到这一点 ? 我试图通过使用 setScale 属性来改变它的大小,但它在这里不起作用。 我在哪里做错了?

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); 
回答1

像这样试试。 它工作正常。

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>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 在不缩小内容的情况下调整精灵大小(Resize sprite without shrinking contents)
    问题 我用 UIBezierPath 创建了一个大圆圈,并使用它把它变成了一个精灵, let path = UIBezierPath(arcCenter: CGPoint(x: 0, y: 0), radius: CGFloat(226), startAngle: 0.0, endAngle: CGFloat(M_PI * 2), clockwise: false) // create a shape from the path and customize it let shape = SKShapeNode(path: path.cgPath) shape.lineWidth = 20 shape.position = center shape.strokeColor = UIColor(red:0.98, green:0.99, blue:0.99, alpha:1.00) let trackViewTexture = self.view!.texture(from: shape, crop: outerPath.bounds) let trackViewSprite = SKSpriteNode(texture: trackViewTexture) trackViewSprite.physicsBody = SKPhysicsBody(edgeChainFrom
  • 如何区分动画与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招聘面试试题参考
    from http://edu.9miao.com/group/1/thread/155最初原文:http://www.cnblogs.com/xxiaoye/p/3950185.html作者:xxiaoye 昨天听了腾讯2015校招的在线宣讲会,看到了游戏技术大拿Steven,他总结了需要的达人得爱技术,能坚持,够挑剔。马上校招了,加油吧,骚年~   网上关于cocos2d-x的面试题比较少,这里搜集和整理了一写网上关于cocos2d-x游戏开发的面试题。希望对找工作的同学有帮助。如有错误,请拍砖 1、Cocos2d-x是怎样实现跨平台?AppDelegate 作为跨平台程序入口,在这之上做了另一层的封装,封装了不同平台的不同实现。比如我们通常认为一个程序是由 main 函数开始运行,那我们就去找寻,我们看到了在 proj.linux 目录下存在 main.cpp 文件。在main.cpp 中 CCApplication::sharedApplication()–>run(); 这一句看起,这一句标志着, cocos2d-x 程序正式开始运行,现在定位到 sharedApplication() 方法的实现,在CCAplication类中我们可以看到从 sharedApplication() 方法,在调用 run() 方法,在这之前,我们需要调用到它的构造函数,否则不能运行
  • 使用与原始尺寸不同的纹理为 SKSpriteNode 设置动画(Animate an SKSpriteNode with textures that have a size different from the original)
    问题 我想使用来自 SKTextureAtlas 的纹理为 SKSpriteNode 设置动画,使用SKAction.animateWithTextures(textures,timePerFrame,resize,restore) 。 但是,图集中的纹理的大小比原始纹理稍大(基本上是角色移动)。 当动作运行时,纹理要么被压缩以适应精灵的原始大小,要么在我将resize设置为false时重新false ,这会改变角色的位置。 不过,我想要的是将纹理锚定在左下角(或右下角,取决于方向),以便除了纹理的额外部分外,角色的位置不会发生变化。 我已经尝试在运行动作之前更改精灵的锚点,但显然这也适用于原始纹理。 另外,我想改变原始纹理的大小会对物理行为产生影响,我想避免这种影响。 有没有人有关于如何做到这一点的建议? 谢谢! 大卫 回答1 这会工作 编辑所有纹理以匹配最大尺寸纹理的大小。 只需使用 alpha 通道给较小的纹理一些填充,即可为您提供透明背景。 例如,请注意第一个纹理如何有很多负空间(来自 CartoonSmart.com) 创建具有特定大小的物理体。 例如,您可以在没有填充的情况下加载纹理并获取大小。 然后根据需要将其放置在带有填充的新的和改进的纹理上。 因此,在使用新调整大小的纹理正常创建 Sprite 之后,您可以/// load a texture to be a
  • 四、cocos2dx动画Animation介绍
    qinning199原创,欢迎转载,转载请注明:http://www.cocos2dx.net/?p=22 一、帧动画 你可以通过一系列图片文件,像如下这样,创建一个动画: CCAnimation *animation = CCAnimation::create(); //从本地文件系统中加载图片文件到CCSpriteFrame中区,然后添加到CCAnimation中 for (int i = 1; i < 15; i++) { char szImageFileName[128] = {0}; sprintf(szImageFileName, "Images/grossini_dance_%02d.png", i); animation->addSpriteFrameWithFileName(szImageFileName); } animation->setDelayPerUnit(2.8f / 14.0f); // 这个动画包含14帧,将会持续2.8秒. animation->setRestoreOriginalFrame(true); // 14帧播放完之后返回到第一帧 CCAnimate *action = CCAnimate::create(animation); sprite->runAction(action); // 运行精灵对象
  • Cocos2d-x:如何绘制调整大小的矩形?(Cocos2d-x: How can I draw a resizing rectangle?)
    问题
  • 在 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
  • Unity NGUI 组件简介
    文章目录 Unity NGUI一. NGUI基础1.1 导入NGUI插件1.2 基本UI资源1.3 制作UI图集1.4 制作UI字体1.5 UIRoot、UIPanel 和 UICamera 组件1.6 Depth (深度) 二. 核心组件2.1 UISprite (精灵)2.2 UILabel (标签)2.3 UITexture (纹理)2.4 UIButton (按钮)2.5 UISlider (进度条)2.6 UIInput (输入框)2.7 UIScrollView (滚动视图)2.8 UIToggle (复选框)2.9 UIPopupList (下拉菜单) 三. UI动画3.1 渐隐渐现动画 (透明度动画)3.2 颜色变化动画 (变色动画)3.3 位置变换动画 (位移动画)3.4 旋转变化动画 (旋转动画)3.5 大小变化动画 (缩放动画)3.6 动画控制组件 (UIPlayTween)3.7 动画控制组件 (UIPlayAnimation) 四. 其他组件4.1 拖动摄像机浏览大界面4.2 UIGrid 自动排列UI组件4.3 UIDragObject 直接拖动物体4.4 UIDragResize 通过拖动自由改变控件大小4.5 UISpriteAnimation 序列帧精灵动画 五. 实战5.1 屏幕自动适应5.2 多相机协作5.3 巧用九宫格减少UI资源5.4
  • 如何在Libgdx中调整精灵的大小?(How to resize a sprite in Libgdx?)
    问题 我在sprite.setSize(float x, float y)使用方法sprite.setSize(float x, float y)遇到问题。 它不影响子画面的大小。 无论我传递给setSize()方法,它们都是固定的。 这是我的代码: public class GameScreen implements Screen { OrthographicCamera camera; SpriteBatch batch; Texture carTexture; Sprite carSprite; public GameScreen() { } @Override public void render(float delta) { // TODO Auto-generated method stub Gdx.gl.glClearColor(0,0,0,0); Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); batch.begin(); carSprite.setSize(16, 32); batch.draw(carSprite, 0 , 0); batch.end(); camera.update(); } @Override public void resize(int width, int height) { // TODO Auto
  • 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实例了。从这个意义上来说
  • 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
  • 如何从有和没有背景大小的文件夹创建精灵(使用指南针)(How to create a sprite from a folder with and without background-size (using Compass))
    问题 我想在两个不同的场景中使用 Compass 生成的图标精灵。 使用原始大小的图标。 使用与使用 CSS3 属性background-size的较小版本相同的图标。 我首先这样做: $logo-spacing: 20px; @import "logo/*.png"; @include all-logo-sprites; 现在我可以使用一般创建的 CSS 类,如.logo-twitter等。 两个实现了我可以使用的第二个结果(darren131 / gist:3410875 - 在 Compass 中调整精灵大小): @mixin resize-sprite($map, $sprite, $percent) { $spritePath: sprite-path($map); $spriteWidth: image-width($spritePath); $spriteHeight: image-height($spritePath); $width: image-width(sprite-file($map, $sprite)); $height: image-height(sprite-file($map, $sprite)); @include background-size(ceil($spriteWidth * ($percent/100)) ceil(
  • 如何在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
  • 如何在 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-
  • 如何在不剪裁行/子视图的情况下为 tableView 调整大小设置动画?(How do you animate the resizing of a tableView without its rows/subviews getting clipped?)
    问题 编辑:我最初问这个问题是关于一般视图大小调整的,但我现在意识到它更特定于 tableViews。 假设一个tableView 原本有一帧(0 0, 320 460),也就是说,它填满了整个iPhone 屏幕。 为了调整 tableView 的高度和动画调整大小,我将以下代码映射到按钮: [UIView beginAnimations:@"Animation" context:nil]; [UIView setAnimationDuration:3]; CGRect rect = self.table.bounds; rect.size = CGSizeMake(320, 200); self.table.bounds = rect; self.table.center = CGPointMake(160, 100); [UIView commitAnimations]; 这段代码将使表格的高度向下动画,但是......在任何动画发生之前,表格将剪掉所有不适合新边界的表格单元格。 因此,给定一个原本适合 10 行的 tableView,上面的动画代码将导致以下事件序列: tableView 立即删除底部 5 行。 请注意,它只删除行 - tableView 的背景仍然延伸到底部。 tableView 按预期为表格的其余部分设置高度变化的动画。 这不是我正在寻找的行为。
  • canvas、cocos基础知识
    文章目录 canvas基础使用cocos2d基本功能创建导演(Director)、场景(Scene)、层(layer)、精灵(sprite)精灵的操作场景的操作ui组件 cc、node的常用方法 canvas基础 基本操作 context.save()//保存状态 context.restore()//回复状态 context.moveTo()//开始点 context.lineTo()//画直线 context.beginPath()//开始一条新路径 context.closePath()//闭合一条路径 context.lineWidth//线宽 context.strokeStyle//边颜色 context.fillStyle//填充颜色 context.lineCap//线端点样式 butt round square context.lineJoin//连接点样式 miter bevel round context.arc()//画圆 var a=context.createLinearGradient(x,y,x0,y0)//线性渐变 a.addColorStop(stop,color)//渐变颜色 var a= context.createRadialGradient(x0 , y0 , r0 , x1 , y1 , r1 );//径向渐变 var a
  • 检查动画是否在 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
  • 如何在调整 UIView 大小时设置动画(How to animate while resizing UIView)
    问题 我在网上看到了一些资料,但仍然无法到达我想要的地方。 我需要向下动画我的视图,使其高度更大。 到目前为止,这是我的代码。 这里发生的事情是,不是我的视图调整大小,它只是稍微改变它的位置。 如果我将属性而不是“bounds.size”更改为“transform.scale.y”,它会好一点,只是这次它向上和向下扩展视图,而不仅仅是向下扩展。 我不喜欢的另一件事是:这些键只是 CALayer 属性吗? 我在哪里可以找到这些键的列表? 我真的很感激这里的帮助。 谢谢! int x = self.btnHead.frame.origin.x; int y = self.btnHead.frame.origin.y; int height = self.btnHead.frame.size.height; int width = self.btnHead.frame.size.width; CABasicAnimation *resizeAnimation = [CABasicAnimation animationWithKeyPath:@"bounds.size"]; [resizeAnimation setToValue:[NSValue valueWithCGSize:CGSizeMake(width,height+50)]]; resizeAnimation.fillMode
  • 如何调整 Twitter 的 Bootstrap 2 模态窗口的大小和动画?(How to resize and animate Twitter's Bootstrap 2 modal window?)
    问题 我想问一下是否有人可以给我一些想法来动态调整bootrap 2模态窗口的大小,平滑动画效果。 我正在考虑让它像 colorbox 一样工作,当模态的内容发生变化时,它会根据内容尺寸改变其宽度和高度。 回答1 什么应该触发调整大小? 看这里:https://stackoverflow.com/a/245011/1596547 你可以用它来调整你的模态。 见:http://bootply.com/71672 对于 Twitter 的 Bootstrap 3,请参见:https://stackoverflow.com/a/18042644/1596547 html : <div class="container"> <!-- Button to trigger modal --> <a href="#myModal" role="button" class="btn" data-toggle="modal">Launch demo modal</a> <!-- Modal --> <div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> <div class="modal-header">
  • 如何创建可平滑调整大小的圆形UIView?(How do I create a smoothly resizable circular UIView?)
    问题 我正在尝试创建一个UIView,它显示一个半透明的圆,其边界内具有不透明的边框。 我希望能够以两种方式更改界限-在-[UIView animateWithDuration:animations:]块内以及每秒触发几次的捏合手势识别器动作中。 我已经根据SO上其他地方的答案尝试了三种方法,但没有一种是合适的。 在layoutSubviews设置视图图层的拐角半径可提供平滑的平移,但是在动画过程中视图不会保持圆形。 似乎cornerRadius不能设置动画。 在drawRect:绘制圆形drawRect:给出一致的圆形视图,但是如果圆形太大,则由于设备花费太多时间重画圆形,因此捏捏手势的大小会变得不稳定。 添加一个CAShapeLayer并在layoutSublayersOfLayer设置其path属性,由于path不能隐式动画,因此它不会在UIView动画内进行动画处理。 我是否可以创建一个始终为圆形并可以平滑调整大小的视图? 我可以使用其他一些类型的层来利用硬件加速吗? 更新 当我说我想更改-[UIView animateWithDuration:animations:]块中的界限时,一个评论者要求我进一步解释我的意思。 在我的代码中,我有一个包含圈子视图的视图。 圆视图(使用cornerRadius的版本)会覆盖-[setBounds:]以设置拐角半径: -(void