0

私はタイルベースのゲームを持っています。各タイルテクスチャが読み込まれ、次にそれぞれを並べて描画し、連続した背景を形成します。私は実際にxmlファイルについてこのチュートリアルに従いました。

http://www.xnadevelopment.com/tutorials/looksleveltome/looksleveltome.shtml

テクスチャのソースは50x50です。

ただし、スケールが1(またはそれ以下)の場合にのみ機能します。

結果:通常のサイズ(50ピクセルおよびスケール1) http://imageshack.us/photo/my-images/525/smallzp.jpg/

大きいサイズ(xmlファイルでズームまたは100ピクセル) http://imageshack.us/photo/my-images/577/largeki.jpg/

テクスチャにない線がタイルの間にあることがわかります。ここでは実際にはそれほど悪くはありませんが、私のゲームタイルセットでは、それが実行されます:http: //imageshack.us/photo/my-images/687/zoomedsize.png/

xmlファイルのタイルサイズを大きくしたり、描画時にスケールを変更したり、カメラを使用してズームしたりしても、同じ効果があります。

//zoom code
public Matrix GetTransformation()
{
    return
       Matrix.CreateTranslation(new Vector3(-_pos.X, -_pos.Y, 0)) *
       Matrix.CreateRotationZ(Rotation) *
       Matrix.CreateScale(new Vector3(Zoom, Zoom, 1)) *
       Matrix.CreateTranslation(new Vector3(_device.Viewport.Width * 0.5f, _device.Viewport.Height * 0.5f, 0));
}

//draw
_spriteBatch.Begin(SpriteSortMode.Immediate, 
  BlendState.AlphaBlend, null, null, null, null,
  _camera.GetTransformation());

//for each tile
theSpriteBatch.Draw(mSpriteTexture, Position, Source, 
  Color.Lerp(Color.White, Color.Transparent, mAlphaValue),
  mRotation, new Vector2(mSource.Width / 2, mSource.Height / 2),
  Scale, SpriteEffects.None, mDepth);

これには理由がありますか?ズームしたときに連続したテクスチャを持つように修正する方法はありますか?

4

1 に答える 1

1

問題はサンプラー状態にあり、GPUはポイントの近くの色をサンプリングして補間しようとしています。

spriteBatch.Begin()でSamplerState.PointClampを使用すると、修正されます。

于 2012-05-13T04:21:36.723 に答える