Hallo, ich möchte in meinem Spiel ein Sprite an eine zufällige Position setzten. Allerdings soll diese Position 100px entfernt von der "Hauptperson" sein. Ich würde aber ungern sqrt() verwenden, weil die Funktion ja sehr Performance aufwendig ist. Also hab ich mir überlegt, dass ich einfach prüfe ob die Differenz der Random- und Hauptpersonwerte größer als 71 ist (auf beiden Achsen). Wenn sie größer als 71 (oder genauer 70.71067) sind, dann ist das Sprite ja 100px weg.
Hier ist der Code den ich verwende. Er funktioniert allerdings nicht. Kann mir jemand sagen wieso? Hab ich einen Fehler im Code gemacht oder ist es logischen Denkfehler?
Vielen Dank
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#define ABS(a) (((a) < 0) ? -(a) : (a)) // absolute value
void RandomCoordinats(sf::Sprite &sprite)
{
int maxwidth = App.GetWidth() - sprite.GetSize().x;
int maxheight = App.GetHeight() - sprite.GetSize().y;
int ixValue = 0;
int iyValue = 0;
do
{
ixValue = rand() % maxwidth + 1;
iyValue = rand() % maxheight + 1;
}while(ABS(m_pHero->GetPosition().x - ixValue) > 71 && ABS(m_pHero->GetPosition().y - iyValue) > 71);
sprite.SetPosition(ixValue, iyValue);
}
|
EDIT: Noch eine Frage: wäre es schlau einen Counter einzubauen, der nach dem 5 Schleifendurchlauf oder so abbricht? Weil theoretisch könnte man ja in einer Endlosschleife landen... Oder ist die Wahrscheinlichkeit viel zu gering?