Cocos2D загрузить случайное изображение из листа спрайта - PullRequest
0 голосов
/ 28 марта 2012

Хорошо, я создаю концепцию для игры, которую хочу сделать, и немного поиграл, но столкнулся с проблемой.Я изучаю программирование на iOS и изучаю cocos2d.

У меня около 20 изображений.Они все одинакового размера 64х64.В основном они сгруппированы в 5 различных форм (квадрат, круг и т. Д.), Каждая из которых имеет 5 различных цветов.То, что я хочу сделать, это случайно сбросить их на экране в портретной ориентации.Там будет только один на столбец падения.На экране могут быть дубликаты, я действительно этого хочу.Пока это случайно, я хочу контролировать введение нового цвета.

Я действительно ломал голову, чтобы понять, как это сделать.Как я уже сказал, я довольно новичок в этом, поэтому любая помощь будет очень полезна.

Если бы я мог быть таким смелым, можно ли получить ответы в формате «Объясните это как I'm 5 Я занимаюсь этим только около года "

Ответы [ 2 ]

0 голосов
/ 02 апреля 2012

При использовании Cocos2D лучший способ использования спрайтов - использование листов спрайтов. То есть комбинация двух типов файлов:

  1. Файл plist со всеми координатами N спрайтов и различными данными о спрайтах, размере, имени и т. Д.
  2. png файл со всеми спрайтами

Вы можете создать спрайт-лист с различными типами программного обеспечения, например:

  • Zwoptex
  • Помощник Спрайта
  • Sprite Packer
  • Спрайт Мастер
  • Упаковщик текстур

Что касается производительности, при использовании таблицы спрайтов вам нужно будет использовать CCSpriteBatchNode, как указано в документации API ( читайте здесь ):

A CCSpriteBatchNode может ссылаться на одну и только одну текстуру (один файл изображения, один атлас текстуры). Только CCSprites, которые содержатся в этой текстуре, могут быть добавлены в CCSpriteBatchNode. Все CCSprites, добавленные в CCSpriteBatchNode, отрисовываются в одном вызове отрисовки OpenGL ES. Если CCSprites не добавляются в CCSpriteBatchNode, то для каждого из них потребуется вызов отрисовки OpenGL ES, что является менее эффективным.

Код для использования Sprite Sheet:

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

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

Надеюсь, это поможет.

0 голосов
/ 28 марта 2012

Сначала взгляните на это учебное пособие о листах спрайтов : оно покажет вам, как создавать листы спрайтов и загружать их в память.(Поскольку учебное пособие направлено на создание анимации, вы можете пропустить пункты 4 и 5).

Теперь, если у вас есть спрайт-листы, вы создаете спрайт:

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

и затем вы можете добавить его в свой слой / сцену.

О случайном выборе: вы можете сохранить список имен изображений (скажем, NSArray) и затем случайным образом (т. Е. Использоватьsrand для генерации случайного индекса) выберите из него значение @"frameName.png".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...