Графика HD и SD на сетчатке - PullRequest
3 голосов
/ 13 января 2012

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

Во-первых, пожалуйста, поправьте меня, если я ошибаюсь.С включенным отображением сетчатки Cocos2d попытается найти файлы -hd (например, Dog-hd.png) и использовать их.Если он не может найти ничего, то он будет загружать оригинальный Dog.png БЕЗ масштабирования его на 2. Моя проблема в том, что у меня нет (или не хочу) всей графики в высоком разрешении, ноЯ все еще хочу, чтобы все было того же размера, что и раньше, с несколькими объектами в HD.Если я просто оставлю SD-графику такой, какая она есть, она будет выглядеть на 1/2 больше, чем раньше, на дисплее Retina.

Что я могу сделать, чтобы заставить ее распознавать SD-графику и масштабировать ее2 автоматически в коде?Спасибо!

Ответы [ 3 ]

2 голосов
/ 13 января 2012

Какао справляется с этим довольно легко. Используйте myImage.png для стандартного и myImage@2x.png для изображений сетчатки. При загрузке изображения из xib, раскадровки или UIImage imageNamed: оно автоматически выберет правильное изображение. Кроме того, изображения, отображаемые в формате, отличном от исходного, будут автоматически отображаться с более высоким разрешением на дисплеях с сетчаткой и с более низким разрешением на дисплеях без сетчатки.

0 голосов
/ 14 января 2012

Если вы хотите использовать увеличенную SD-графику в приложении Cocos2d с поддержкой Retina, необходимо изменить свойство масштаба узла:

// upscaling a sprite that uses SD image
sprite.scale *= CC_CONTENT_SCALE_FACTOR();

У вас есть два способа узнать, использует ли спрайтHD текстура.Во-первых, вы просто знаете это и применяете приведенный выше код ко всем спрайтам, которые не используют изображения HD.Во-вторых, вы можете проверить наличие -hd версии образа.

NSString* imageFile = @"someimage.png"
CCSprite* sprite = [CCSprite spriteWithFile:imageFile];
NSString* fullFile = [CCFileUtils fullPathFromRelativePath:imageFile];
if ([fullFile hasSuffix:@"-hd.png"])
{
    // upscaling sprite because it uses an SD image
    sprite.scale *= CC_CONTENT_SCALE_FACTOR();
}

Не проверено, но должно работать.

0 голосов
/ 13 января 2012

Вы можете использовать только одну графику как для SD, так и для HD, она будет нормально работать с дисплеем без сетчатки, но на сетчатке будет выглядеть немного размыто ... но с производительностью проблем нет, если вы собираетесь использовать cocos2d.

вы должны использовать ccp для позиционирования, boundingBox для размера контента и избегать статических значений в вашем коде ... я думаю, что все будет хорошо.:)

если у вас возникли какие-либо проблемы по этому поводу, вы можете оставить новый комментарий или вопрос здесь.

Спасибо

...