cocos2d从精灵表中加载随机图像

时间:2012-03-28 14:48:01

标签: ios cocos2d-iphone

好的,所以我正在构思一个我想要制作的游戏并且玩了一点但是遇到了问题。我正在学习iOS编程和学习cocos2d。

我有大约20张图片。它们的大小都是64x64。基本上它们被分为5种不同的形状(方形,圆形等),每种形状有5种不同的颜色。我希望能够做到的是随意将它们纵向放在屏幕上。每列只会有一个下降。屏幕上可能有重复,我实际上想要那样。虽然它是随机的,但我想控制一种新颜色的引入。

我一直在绞尽脑汁想出如何做到这一点。正如我所说,我对此很陌生,所以任何帮助都会非常棒。

如果我可以如此大胆,那么任何答案都可以采用格式“解释就像<罢工>我是5 我只做了大约1年”

2 个答案:

答案 0 :(得分:0)

首先,看看这个tutorial about sprites sheets:它将向您展示如何创建精灵表并将其加载到内存中。 (由于本教程旨在构建动画,因此您可以跳过第4点和第5点)。

现在,如果您有精灵表,那么创建精灵的方法是:

CCSprite* sprite = [CCSprite spriteWithSpriteFrameName:@"frameName.png"];

然后你可以将它添加到你的图层/场景。

关于随机选择:您可以保留图像名称列表(例如NSArray)然后随机(即使用srand生成随机索引)选择{{1}来自它的价值。

答案 1 :(得分:0)

使用Cocos2D时,使用Sprite的最佳方法是Sprite Sheets。也就是说,两种文件的组合:

  1. 一个plist文件,其中包含N个精灵的所有坐标以及有关精灵,大小,名称等的所有不同数据。
  2. 包含所有精灵的png文件
  3. 您可以使用不同类型的软件制作精灵表,例如:

    • Zwoptex
    • Sprite Helper
    • Sprite Packer
    • 精灵大师
    • Texture Packer

    关于性能,当使用精灵表时,您将需要使用CCSpriteBatchNode,因为API文档说明(read here):

      

    CCSpriteBatchNode 可以引用一个且仅一个纹理(一个图像文件,一个纹理图集)。只有该纹理中包含的CCSprit可以添加到CCSpriteBatchNode中。添加到CCSpriteBatchNode的所有CCSprit都在一个OpenGL ES绘制调用中绘制。 如果未将CCSprit添加到CCSpriteBatchNode,那么每个CCSprit都需要进行OpenGL ES绘制调用,效率较低。

    使用Sprite Sheet的代码:

    [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"sprite.plist"];
    
    CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"sprite.png"];
    [self addChild:spriteSheet];
    

    希望这有帮助。