タイルマップを正常に生成して動作しますが、スクロールしたいときにタイルの一番上の行が移動し、すべてのタイルが画面からドラッグされます.説明するのは難しいです.
これがタイルだと想像してください: X
XXXXXXXXXXXXXXXXXXXXXXXXXXX //カメラが動いているときにタイルごとに削除を開始します。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX //他のすべてのタイルを私のラインの上に移動させます。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
私のコードを見てください:
public void Draw(SpriteBatch spriteBatch)
{
currentLevel = level1;
//Its here i need the value from Player class!
int currentX = cameraX; //The current x cordiate to draw the tile too
int currentY = 0; //The current y cordiate to draw the tile too
for (int i = 0; i < currentLevel.Length; i++)
{
/*
* A switch statement to see if the current level1[i] is either a grass, sky or stone tile
*/
switch(currentLevel[i])
{
case 1:
//Draw a sky tile
spriteBatch.Draw(tileSheet, new Rectangle(currentX, currentY, 32, 32), skyTile, Color.White);
break;
case 2:
//Draw a grass tile
spriteBatch.Draw(tileSheet, new Rectangle(currentX, currentY, 32, 32), grassTile, Color.White);
break;
case 3:
//Draw a stone tile
spriteBatch.Draw(tileSheet, new Rectangle(currentX, currentY, 32, 32), stoneTile, Color.White);
break;
}
//Add 32 to the current cordinate so we don't draw to the same spot all the time
currentX = currentX + 32;
if (currentX >= 896) //If we hit the width of the map we want:
{
//Start drawing from X cordinate zero
cameraX = 0;
currentX = cameraX;
//And Y cordinate + 32
currentY = currentY + 32;
//This will make so we draw one line and when we hit a full line on the map then we draw next line and soo on.
}
}
}
CameraX 変数は、Player クラスの getter です。キーボードの左ボタンを押している間、減少します。
配列から描画したタイル マップを次に示します (1 = 空、2 = 草、3 = 石:
int[] level1 = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 1, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 1, 1, 1, 1, 1, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3};
何か案は?