kleines Spiel in C++ (Borland) - Kollisionsabfrage
-
Hallo,
Ich hab ein kleines Problem:
Ich versuche ein kleines Spiel zu programiern, das auf ImageIists aufgebaut ist.Ich habe ein 2-Dim.-Array aus dem lese ich Informationen aus (mein Spielfeld) und lass dieses dann in Form von Grafiken ausgeben (wenn im Array 1 steht dann wird an der Position die Grafik 1 ausgegeben).
Nun will ich eine Kollisionsabfrage machen, das hab ich bis jetzt:
if(Key == 'W'){ laufY=laufY-16; //laufX un Y sin die Spielerkoordinaten int xT, yT; xT= laufY/16; // weil immer 16 schritte yT= laufX/16; if(map[xT][yT]==1){ // 1= Begehbar FGui->Image1->Canvas->Brush->Color = clWhite; //alles löschen FGui->Image1->Canvas->FillRect(Rect(0,0,600,600)); FGui->drawMap(); //map zeichnen FGui->playerA->Draw(FGui->Image1->Canvas,laufX,laufY,1,true); //spieler zeichen } if(map[xT][yT]==0) // 0= nicht begehbar {laufY=laufY+16;} //wert auf den alten wert zurück setzen dass nichts veränderd wird }
Das ist nur der Teil vom Code, bei dem der Spieler nach oben läuft. Die 16 ganz oben kommt daher, weil mein Charakter immer 16er schritte geht.
Map ist mein Spielfeld, laufX/Y sind die Koordinaten von meinem Spieler.
Mein Problem ist jetz, dass ich nie nach oben laufen kann, ich verstehe aber nicht wieso.
Vielleicht weis ja jemand von euch bescheid.
Schonmal danke im voraus.Mfg,
Mick
-
Wird der Codeteil denn überhaupt erreicht? Mach mal eine Debugausgabe dorthin.
-
Dir ist aber schon klar, dass man bei Dir das grosse w drücken muss?! Soll das so sein?
-
Rostfrei[] schrieb:
Dir ist aber schon klar, dass man bei Dir das grosse w drücken muss?!
Nur wenn er WM_CHAR abfängt. In WM_KEYDOWN wird da kein Unterschied gemacht, da muß man den Shift-Status zusätzlich abfragen.
winuser.h schrieb:
/*
* VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39)
* 0x40 : unassigned
* VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A)
*/Die Verwendung des Debuggers kann ich sehr empfehlen.
-
das ist egal ob W oder w ohne der kollision funktionierts
for(int j=0; j < 8; j++) { int i=0; for(i=0; i < 8; i++) { FGui->ImageList1->Draw(FGui->Image1->Canvas,x,y,map[j][i],true); x=x+32; } y=y+32; x=0; }
das hier Zeichnet meine karte in ein Image - wüsste jemand eine Alternative wie ich eine Kollision machen könnte?
Ich zeichne ja aus meinem Array raus dann hab ich in dem Image ganz viele kleine Tiles nun möchte ich irgentwie herrausfinden wo mein player steht und wissen auf welcher Koordinate des Arrays er ist.
So wie ich es gemacht hab funktionierts ja leider nicht
-
hat keiner eine Idee?
-
Zu allererst würd ich vorschlagen wenn die Kollisionsabfrage gegen eine Wand prüfen soll diese vor dem setzen der neuen Spielerposition zu machen.
Sind denn die Ränder auch als solche wie von dir erwartet durch 0 belegt? Bzw. anders gefragt, welchen Inhalt haben die Felder, die begehbar sind?