Cocos2d-x (4.0) - целочисленное пиксельное масштабирование - PullRequest
1 голос
/ 24 января 2020

Я только начинаю с Cocos2d и изо всех сил пытаюсь получить правильное масштабирование экрана: у меня есть glview с проектным разрешением 160x144 пикселей, и я хочу иметь возможность масштабировать это окно до целых кратных. Проблема заключается в том, что все ресурсы на экране масштабируются с помощью какого-то билинейного фильтра, что сильно портит внешний вид игры ... Ниже все, что я сейчас написал в своем коде:

// Set the design resolution
glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::SHOW_ALL);
glview->setFrameSize(designResolutionSize.width * SCALE_FACTOR, designResolutionSize.height * SCALE_FACTOR);

, где может быть SCALE_FACTOR 2, 4, 8 ...

Кто-нибудь знает, как это сделать?

1 Ответ

0 голосов
/ 25 января 2020

Иногда вам лучше почистить собственный беспорядок. Я нашел решение для моей проблемы, которое, на первый взгляд, может показаться слишком экстремальным, но это идеально подходит для моих нужд. Просто измените конструктор Texture2D (@ CCTexture2D. cpp), чтобы отключить глобальное сглаживание.

Texture2D::Texture2D()
: _pixelFormat(backend::PixelFormat::DEFAULT)
, _pixelsWide(0)
, _pixelsHigh(0)
, _maxS(0.0)
, _maxT(0.0)
, _hasPremultipliedAlpha(false)
, _hasMipmaps(false)
, _antialiasEnabled(false)  // <<< CHANGE HERE!
, _ninePatchInfo(nullptr)
, _valid(true)
, _alphaTexture(nullptr)
{
    backend::TextureDescriptor textureDescriptor;
    textureDescriptor.textureFormat = PixelFormat::NONE;
    _texture = static_cast<backend::Texture2DBackend*>(backend::Device::getInstance()->newTexture(textureDescriptor));
}

Вот как это выглядит:

Antialiasing on/off

...