2013-10-05 4 views
0

Я пишу простую игру, используя cocos2d с объективом-c. В этой игре я даю случайные позиции вражеским спрайтам. Чтобы избежать дублирования разных врагов, я пишу чек, чтобы убедиться, что CGRect нового спрайта с его случайным положением не перекрывается с другим CGRect спрайтов.Как получить размер CCSprite до его инициализации?

Мои вопросы: как вы можете получить размер CGRect перед инициализацией нового спрайта? И как это сделать, если вы используете файл ccbi (cocosbuilder) для инициализации спрайта?

Прежде чем инициализировать новый спрайт, я инициализирую временный спрайт с помощью файла png, который показывает первый кадр врага (каждый кадр имеет одинаковый размер). Затем просто используйте его размер следующим образом: tempSprite.boundingBox. Хотя он работает хорошо, я думаю, что это неэффективно, чтобы сделать tempSprite перед инициализацией всех новых спрайтов.

Теперь я пытаюсь преобразовать свою игру с помощью cocosbuilder (потому что использование ccbi-файла упрощает настройку анимации). Как узнать размер спрайта до инициализации? Я думаю, что я все еще могу сделать tempSprite, используя [CCBReader nodeGraphFromFile: @ "enemySprite.ccbi"] и используя tempSprite.boundingBox, чтобы получить его размер. Но правильно ли это сделать? Он очень бесполезен для ресурсов ЦП и памяти. update: Я пробовал свой путь, который не работает. Поскольку значение размера boundingBox равно (0,0) (правильное значение позиции).

+0

Разве спрайты и кешируют уже спрайты? Если это так, то для инициализации не потребуется дополнительных ресурсов для получения размера. –

+0

Да, я могу получить нужный размер из файла png, который является первым фреймом, например. Однако у меня была другая проблема. Поскольку размер файла ccbi равен 0, я не могу его трогать (прикосновение к текстуре не считается «затронутым»). – ArtS

ответ

0

Я нашел решение самостоятельно. Проблема вызвана тем, что я неправильно понял структуру экземпляра, созданного ccbi-файлом. Это CCNode с CCSprite, поскольку он является переменной, а не просто CCSprite. CCNode имеет размер (0,0) (он работает как контейнер для CCSprite), а CCSprite имеет нужный размер и правильную позицию.

Я назначил CCSprite переменной CCSprite * в CocosBuilder. И используйте CCSprite.boundingBox, чтобы проверить наличие конфликта. Это решает все проблемы.