我目前正在研究XNA遊戲原型。我正試圖實現遊戲世界的等軸測視圖(或者它是否有影像?我不確定這個投影的正確術語 - 見圖片)。世界應該是由立方形瓷磚製成的基於瓷磚的世界(例如類似於我的世界的世界),並且我試圖通過使用精靈在2D中渲染它。XNA等距瓷磚渲染問題
所以我有一個精靈表,包括立方體的頂面,正面和側面(可見面)。我使用3個不同的調用drawSprite,一個用於頂部,一個用於邊,一個用於前部,使用源矩形來選取要繪製的面,並根據目標矩形在屏幕上設置位置轉換爲從3D世界座標轉換爲等軸測圖的公式(拼寫?)。
(樣品精靈: )
這工作好,只要我畫臉,但如果我嘗試繪製每個塊的罰款邊緣(如每片網格),我可以看到,我得到一種隨機的渲染模式,其中一些線被面部本身覆蓋而另一些線不覆蓋。
請注意,對於我的世界表現形式,X從左到右,Y在屏幕內到屏幕外,Z從上到下。
在這個例子中,我只使用頂面的邊緣。這是我得到的(圖片)內容:
我不明白爲什麼有些線條的顯示,有些則不是。 我使用的呈現代碼是(注意在這個例子中我只繪製在每個維度的最上層):
/// <summary>
/// Draws the world
/// </summary>
/// <param name="spriteBatch"></param>
public void draw(SpriteBatch spriteBatch)
{
Texture2D tex = null;
// DRAW TILES
for (int z = numBlocks - 1; z >= 0; z--)
{
for (int y = 0; y < numBlocks; y++)
{
for (int x = numBlocks - 1; x >=0 ; x--)
{
myTextures.TryGetValue(myBlockManager.getBlockAt(x, y, z), out tex);
if (tex != null)
{
// TOP FACE
if (z == 0)
{
drawTop(spriteBatch, x, y, z, tex);
drawTop(spriteBatch, x, y, z, outlineTexture);
}
// FRONT FACE
if(y == numBlocks -1)
drawFront(spriteBatch, x, y, z, tex);
// SIDE FACE
if(x == 0)
drawSide(spriteBatch, x, y, z, tex);
}
}
}
}
}
private void drawTop(SpriteBatch spriteBatch, int x, int y, int z, Texture2D tex)
{
int pX = OffsetX + (int)(x * TEXTURE_TOP_X_OFFRIGHT + y * TEXTURE_SIDE_X);
int pY = OffsetY + (int)(y * TEXTURE_TOP_Y + z * TEXTURE_FRONT_Y);
topDestRect.X = pX;
topDestRect.Y = pY;
spriteBatch.Draw(tex, topDestRect, TEXTURE_TOP_RECT, Color.White);
}
我使用了不同的方法,創建嵌套for循環之後的第二3-層試圖第一個,所以我保持在第一個循環中的頂面繪圖和第二個循環中的邊緣高亮顯示(我知道,這是低效的,我也應該避免有一個方法調用每個瓷磚繪製它,但我只是試圖讓它現在工作)。
結果在某種程度上更好,但仍然無法正常運行,頂行缺少,見圖片:
的爲什麼我有這個問題的任何想法?在第一種方法中,它可能是一種z型戰鬥,但我正在按照精確的順序繪製精靈,所以不應該覆蓋已經存在的東西?
謝謝大家
你在做任何縮放嗎? – 2010-11-30 22:33:25