本日は技術ネタです。AndEngineでスプライトにゴミが出る現象についてです。
以下の画像のような現象です。
拡大してみてもらえば分かると思いますが、スプライトの端に線が出てしまっています。
このままではカッコ悪すぎです。この前紹介した本のサンプルゲームでも良く見ると出ているときがあります。
よく調べていくと右と下に出るようなので、UVの値が微妙なのが原因かと思って調べたらやっぱり当りっぽいです。
AndEngine GLES2
TextureRegion.java
public void updateUV() { final ITexture texture = this.mTexture; final float textureWidth = texture.getWidth(); final float textureHeight = texture.getHeight(); final float x = this.getTextureX(); final float y = this.getTextureY(); this.mU = x / textureWidth; this.mU2 = (x + this.mTextureWidth) / textureWidth; this.mV = y / textureHeight; this.mV2 = (y + this.mTextureHeight) / textureHeight; // this.mU = (x + 0.5f) / textureWidth; // this.mU2 = (x + this.mTextureWidth - 0.5f) / textureWidth; // // this.mV = (y + 0.5f) / textureHeight; // this.mV2 = (y + this.mTextureHeight - 0.5f) / textureHeight; }
227行からコメントアウトされています。
これを下のようにします。
public void updateUV() { final ITexture texture = this.mTexture; final float textureWidth = texture.getWidth(); final float textureHeight = texture.getHeight(); final float x = this.getTextureX(); final float y = this.getTextureY(); // this.mU = x / textureWidth; // this.mU2 = (x + this.mTextureWidth) / textureWidth; // // this.mV = y / textureHeight; // this.mV2 = (y + this.mTextureHeight) / textureHeight; this.mU = (x + 0.5f) / textureWidth; this.mU2 = (x + this.mTextureWidth - 0.5f) / textureWidth; this.mV = (y + 0.5f) / textureHeight; this.mV2 = (y + this.mTextureHeight - 0.5f) / textureHeight; }
これで直りました。
しかーし! なぜコレでうまくいくのか分かりません。
元のソースでも問題ないように思えるのですが・・・。
それに何でコメントにしていたのでしょうか?
その意味も分かりません。
むむぅ。
話は変わって、ソースコードの表示がめちゃくちゃじゃん!!
でも、もう眠いので終了。