2012-03-28 87 views
0

好吧,我想为我想制作的游戏进行概念化,并且玩了一下,但遇到了问题。我正在学习iOS编程和学习cocos2d。cocos2d从精灵图加载随机图片

我有大约20张图片。它们的尺寸都是64x64。基本上它们被分成5种不同的形状(正方形,圆形等),每种形状有5种不同的颜色。我想要做的是随机将它们放在屏幕上。每列只会有一个下降。屏幕上可能有重复的内容,我真的很想。虽然它是随机的,但我想控制新颜色的引入。

我一直在想我该如何做到这一点。正如我所说,我对此很新,所以任何帮助都会非常棒。

如果我能够这么大胆,可以在任何的答案是一个格式为“解释它像 我5 我只一直在做这约1年”

+0

那么如果我把图像分成5组5个,比如A.1-A.5,B.1-B.5,... E.5,那么我想说当一个新的字母(颜色组)是允许的选项。我并不担心这么做的算法,我无法弄清楚是实现它的最好方法。 – TheFityP 2012-03-29 13:59:20

回答

0

首先,看一下这tutorial about sprites sheets:它会告诉你如何创建精灵表并将它们加载到内存中。 (由于本教程旨在构建动画,因此您可以跳过第4点和第5点)。现在

,如果你有地方你的精灵表,你怎样做才能创造一个精灵是:

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

,然后你可以把它添加到您的层/场景。

关于随机选择:您可以保留图像名称列表(例如,NSArray),然后随机(即使用srand生成随机索引)从中选择@"frameName.png"值。

+0

所以我可以用一个只是字符串名称的数组,然后解除引用它们“... spriteWithSpriteFrameName:arrayOfImageNames [randomIndex]];”? – TheFityP 2012-03-29 14:01:28

+0

这就是我想建议的。如果你使用'spriteWithSpriteFrameName',这是最自然的做法,IMO。如果你想根据颜色对图像进行分区,最好的选择是使用一个NSDictionary,其中存储每个颜色名称(字符串),NSArray(或者,如果你喜欢的话,使用普通的c数组)。然后,您随机选择字典键中的颜色,然后选择阵列中与该键关联的颜色的图像。 – sergio 2012-03-31 06:22:36

+0

Oooo我喜欢那个NSDictionary的东西。我应该加载所有的图像,并将它们设置为不可见(这将是25 x 10列),还是应该动态加载它们,以便一次只加载10张图像?我想我的问题是更改与精灵关联的纹理或加载大量精灵的性能是否有较大的提升。 – TheFityP 2012-04-01 12:53:48

0

使用Cocos2D时,使用精灵的最佳方式是使用Sprite Sheets。即两个类型的文件的组合:

  1. 用N精灵的所有坐标和关于子画面,大小,名称所有不同数据A plist文件等
  2. PNG文件的所有精灵

你可以用不同类型的软件精灵表,如:

  • Zwoptex
  • 雪碧助手
  • 雪碧包装机
  • 精灵法师
  • 纹理帕克

关于性能,使用精灵表时,你将需要使用CCSpriteBatchNode,作为API文档状态(read here):

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

代码使用精灵表:

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"sprite.plist"]; 

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

希望这有助于。