leute, ich bin mal wieder am verzweifeln
ich hab meinen code jetzt so geändert, dass er eine raute erzeugt, so:
|
C-/C++-Quelltext
|
1
2
3
4
5
|
void TileToWorld(SVector pTile, SVector pSize, SVector* pWorld)
{
pWorld->X = pSize.X/2-pTile.X*64+pTile.Y*64-64;
pWorld->Y = (pTile.X+pTile.Y)*32;
}
|
wieder das gleiche problem: anhand der weltkoordinaten das tile bestimmen. Ich versuchs gerade so:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
void WorldToTile(SVector pWorld, SVector pSize, SVector* pTile)
{
//Punkt um 45° rotieren
float Angle = 45.0f*D3DX_PI/180.0f;
float Radius = sqrt(pow(pWorld.X-pSize.X/2.0f, 2.0f) + pow(pWorld.Y-pSize.Y/2.0f, 2.0f));
int X = static_cast<int>(pWorld.X + sin(Angle)*Radius);
int Y = static_cast<int>(pWorld.Y + cos(Angle)*Radius);
int lenght = static_cast<int>((pSize.X-sqrt(pow(pSize.X/2.0f, 2.0f) + pow(pSize.Y/2.0f, 2.0f)))/2.0f);
X -= lenght;
Y -= lenght;
X/=72; //bei Rautengröße 128*64 ist das die Seitenlänge
Y/=72;
pTile->X = X;
pTile->Y = Y;
}
|
ich drehe den punkt um 45°, was auch funktioniert, jetzt versuch ich mir vorzustellen, das ganze feld zu drehen und dann einfach zu gucken in welchen quadrat der punkt liegt, was bei quadraten ja deutlich einfacher ist als bei rauten... geht aber nicht, ich hab irgendwelche fehler drinn, könnt ihr mir vielleicht tipps geben, wie das besser geht? (oder überhaupt erstmal geht
)