環境
cocos2d-x 3.17.2
C++
アンチエイリアス無効化
cocos2d-xではデフォルトでアンチエイリアスが有効になっていて、無効にするためには
auto sprite = Sprite::create("image.png");
sprite->getTexture()->setAliasTexParameters();
このようにSprite
やLabel
のインスタンスを作る度にsetAliasTexParameters()
を呼んであげる必要があります。
(※ただ同じ画像だとアンチエイリアスの設定が共有されるっぽい。)
ドットゲーを作るときなどはいちいち呼ぶのは面倒なのでアンチエイリアス無効をデフォルトにしたいですが、どうやらそういった機能は用意されていないようです。
Sprite
等を継承してコンストラクタでsetAliasTexParameters()
を呼ぶというのもアリですが、
今回はプロジェクト内のcocos2d-xのソースを直接弄ってこれを解決しようと思います。
ソースを書き換える
プロジェクトフォルダ内の
cocos2d/cocos/renderer/CCTexture2D.cpp
cocos2d/cocos/2d/CCFontAtlas.cpp
を編集します。
それぞれクラスTexture2D
, FontAtlas
のコンストラクタの初期化子リストで
_antialiasEnabled
というメンバがtrue
で初期化されています。
これをfalse
にしてやります。
まず、CCTexture2D.cpp
の446行目
, _antialiasEnabled(false)
に変更。
CCFontAtlas.cpp
は54行目で同様に
, _antialiasEnabled(false)
に変更。
例
480×320のウインドウに
次の16×16ピクセルの画像を10倍の大きさで表示してみます。
変更前
変更後
その他
スプライトもフォントもドットなら、アンチエイリアス無効に加えて
glview->setDesignResolutionSize(240, 120, ResolutionPolicy::NO_BORDER);
のように仮想解像度を小さくしてしまうのもいいかと思います。