Увеличение пиксельной графики в Cocos2D вызывает размытие — iPhone

Когда мой CCSprite, использующий изображение 16x16, масштабируется, возникает сильное размытие.

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

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

Вот код: (mainSprite — CCSprite, а slide1 — CCTexture2D)

slide1 = [[CCTexture2D alloc] initWithImage:[UIImage imageNamed:@"slide1.png"]];
[slide1 setAntiAliasTexParameters];

[mainSprite setTexture:slide1];

Спасибо, любая помощь приветствуется!


person mishajw126    schedule 01.07.2012    source источник


Ответы (3)


Вместо этого вы должны использовать это:

[slide1 setAliasTexParameters];

это скажет вашему спрайту не сглаживать, сохраняя пиксельный вид

(используя cocos2d v2.0 - не уверен, что это работает в предыдущих версиях)

person Kyokai    schedule 23.07.2012

В общем, лучше использовать изображение с более высоким разрешением и МАСШТАБИРОВАНИЕ. Например, если вы собираетесь использовать изображение, которое, когда оно будет максимально большим, будет 32x32. Затем используйте изображение размером 32x32, а когда вам нужно разрешение 16x16, уменьшите его до этого.

person Cliff Ribaudo    schedule 01.07.2012

Ваше изображение слишком маленькое для масштабирования... вот так просто. Если вы не хотите размытия, сделайте изображение большего размера и используйте его.

Когда вы что-то делаете, рекомендуется использовать изображение в масштабе 1:1 (если это не масштабируемое изображение, например, один цвет... или 2 цвета, или линия, или что-то в этом роде). Если у вас есть значок, и вы хотите его увеличить... забудьте об этом... просто сделайте значок большего размера и при необходимости уменьшите масштаб.

person skytz    schedule 01.07.2012
comment
Изображение представляет собой простой пиксель-арт, но при увеличении масштаба оно не состоит из отдельных пикселей, а вместо этого размыто вместе. - person mishajw126; 02.07.2012
comment
тогда ваша проблема в ccBlendFunc. Попробуйте сделать что-то вроде: [yoursprite setBlendFunc: (ccBlendFunc){GL_ONE,GL_ZERO}] - person skytz; 02.07.2012
comment
Спасибо за предложение, но, кажется, это не имеет значения. - person mishajw126; 02.07.2012
comment
ну, я ничего не знаю о функциях смешивания open gl и/или о том, как они работают, но это ваша проблема... посмотри на это - person skytz; 02.07.2012