PDA

Pogledaj cijelu verziju : Problem C++ igre (SDL lib...)



19-06-2009, 13:59
Evo, nakon nekog vremena sam se ponovo vratio na forum... Moj problem je sljedeći:
U C++ radim uz pomoć SDL-a igru. Iam klasu "Player" u kojoj su kao public pohranjene koordinate (2D):

Class Player
{
private:
( neke misc varijable)
public:
int playerX;
int playerY;
(jos neke varijable)
}
I klasu "NPC" vrlo slicnu prethodnoj klasi. Igrac ima pixel based movement, tj. nešto ovakvo:


if (tipkaGore())
{
playerY-=1
}

Animacije za igračev lik nisu upitne i moguće ih je lako riješiti jer se aktiviraju putem tipki na tipkovnici (npr. Pritisnuta razmaknica, lik napada...), međutim animacije za NPCove su malo veći problem, jer one nisu kontrolirane tipkovnicom, nego one mijenjaju x i y koordinate u glavnom loopu konstantno dok ne dodju do igračeva lika. Ako je igra gledana iz izometrijske perspektive (znači top down rotacije ne dolaze u obzir), kako da riješim "rotaciju" NPCova s obzirom na smjer? (npr. ako se kreće prema dolje -> sprite se promijeni u sliku NPCa koji se kreće prema dolje, itd.)?

Luka
19-06-2009, 14:03
Ako sam dobro shvatio, pitaš kako rješiti reagiranje npceva na igrača?

Jedan način je da napraviš "update" funkciju u klasi za NPCa, koju ćeš pozivati u svakom frameu. Ona će provjeriti podatke o igraču i ovisno o njima napraviti što želiš (npr. promijeniti svoju animaciju).

19-06-2009, 14:06
Ako sam dobro shvatio, pitaš kako rješiti reagiranje npceva na igrača?

Jedan način je da napraviš "update" funkciju u klasi za NPCa, koju ćeš pozivati u svakom frameu. Ona će provjeriti podatke o igraču i ovisno o njima napraviti što želiš (npr. promijeniti svoju animaciju).

Hvala na odgovoru, ali krivo si shvatio pitanje... :D
Nije meni problem reagiranje NPCova i igrača, nego određivanje smjera NPCa. Eo slike:
http://www.imagesforme.com/out.php/i549210_pitanje.jpg

Nadam se da kužite...

Luka
19-06-2009, 14:31
Aha, kut. Znaš trigonometriju?

Kut između y-osi i smjera NPCa iznosi: arctangent(x/y). S tim da imaš 4 slučaja, ovisno o kvadrantu u kojem se nalazi igrač u odnosu na NPCa koji je središte sustava.

19-06-2009, 14:57
Aha, kut. Znaš trigonometriju?

Kut između y-osi i smjera NPCa iznosi: arctangent(x/y). S tim da imaš 4 slučaja, ovisno o kvadrantu u kojem se nalazi igrač u odnosu na NPCa koji je središte sustava.
Otprilike sam shvatio...malo ću još progooglati. Hvala.

sabljar
19-06-2009, 21:56
float x = igrac.x - NPC.x;
float y = igrac.y - NPC.y;
float c = sqrt(x*x + y*y);
float b = abs(x);
float deg = asin(b/c)*(180/pi);
if (x<=0&&y>=0) k=0;
else if (x<0&&y<0) k=1;
else if (x<=0&&y<=0) k=2;
else k=3;
deg += k*90;

Evo ovo sam nešto osmislio.
Prvo se pretvara iz pravokutnog koord. sustava u Kartezianov sustav tako da je NPC središte sustava.
Pomoću trigonometrije se izračunava kut koji iznosi od 0-90.
Potom se traži u kojem je kvadrantu igrač i kutu se dodaje iznos k*90.

20-06-2009, 18:50
Ovo mi je pomoglo da shvatim, hvala.