Hallo!
ERstmal nen bisschen Code. Ich bin grad dabei, eine 2D-Karte zu proggen. Der Render Funktion übergibt man unter anderem die Startposition auf dem Bildschirm (StartX), das Tile mit dem begonnen werden osll (TileX, TileY) und die genaue Positionierung der Tiles (SmoothX, Y)
Damit meine ich, dass die Karte zwar trotzdem bei StartX beginnen soll, aber nicht direkt mit dem TIleAnfang, sonder zB erst mit Pixel 20, das gibt SmoothX an.
Unten ist der Code mit dem ich das versuche.
Aber wenn ich das ausführe, werden die Tiles zwar gekürzt, aber nicht die Textur, sie wird nur gestaucht.
m_TextureWidthUV[] gibt die Breite eines TIles in uv an.
Könnt ihr mir hlefen?
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
meTile Tile;
if(SmoothX < 0)
{
int Column = 0; // erste Spalte verkleinern
int Zuviel = -SmoothX; // Es wird SmoothX zuviel gezeichnet
DWORD VertCursor = 0;
for(Line = 0; Line < NumTilesToDrawY; Line++)
{
VertCursor = Line * NumTilesToDrawX * 6;
Tile = m_TileData[Layer][Line + TileY][Column + TileX];
m_Vertizes[VertCursor + TOPLEFT].x = StartX;
m_Vertizes[VertCursor + BOTTOMLEFT_T1].x = m_Vertizes[VertCursor + BOTTOMLEFT_T2].x = StartX;
m_Vertizes[VertCursor + TOPLEFT].u += m_TileWidthUV[Tile.TexNumber] * Zuviel / m_TileWidth;
m_Vertizes[VertCursor + BOTTOMLEFT_T1].u = m_Vertizes[VertCursor + BOTTOMLEFT_T2].u = m_Vertizes[VertCursor + TOPLEFT].u;
}
}
|