Hi, ich bins wieder mal
Also Ausgangsstellung meines Problemes:
Ich habe eine PictureBox in einem Panel, welche ich mit Hilfe von Buttons in diesem Panel rumbewege habe.
Nun will ich ein Level höher gehen und die PictureBox nur mit den Pfeiltasten aufder Tastatur bewegen.
Fehler:
Es wird kein Fehler vom Compiler ausgegeben. Sobald ich das Projekt kompiliere und das Objekt mit den Pfeiltasten bewegen will, geschieht nichts. Also das Programm reagiert gar nicht erst auf die Pfeiltasten.
Infos:
WinXP
VC++.Net 2003 (Form wurde im Designer erstellt)
Mein bisheriger Code:
|
C Quellcode
|
1
2
3
|
this->Load += new System::EventHandler(this, frmGame_Load);
//Eventhandler für die Pfeiltasten, hier könnte der Fehler liegen
this->KeyDown += new System::Windows::Forms::KeyEventHandler(this, frmGame_KeyDown);
|
|
C Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
private: System::Void frmGame_Load(System::Object * sender, System::EventArgs* e)
{
//Spieler laden
picSpieler->Image = Image::FromFile("smiley.png");
//Timer anhalten, weil er beim Laden der Form anfängt zu ticken :S
gameTimer->Stop();
//Stop-Button disablen
btnStopTimer->Enabled = false;
}
private: System::Void frmGame_KeyDown(System::Object * sender, System::Windows::Forms::KeyEventArgs * f)
{
//Ränder des Panels deklarieren um Überschreitung zu verhindern
int maxX = 375;
int minX = -1;
int maxY = 239;
int minY = -1;
//Hilfsvariable für Endlosschleife
bool bolSpielen = true;
//Spielfunktion, ermöglicht es per Pfeiltasten
//den Spieler zu bewegen. Dazu wird eine EndlosSchleife
//benutzt.
do
{
//Location des Spielers ermitteln (Point)
Point spielerLoc = Point(picSpieler->get_Location());
//X- und Y-Koordinate des Spielers in Variablen speichern
int spielerX = Convert::ToInt32(spielerLoc.get_X());
int spielerY = Convert::ToInt32(spielerLoc.get_Y());
switch(f->KeyCode){
case System::Windows::Forms::Keys::Up:
if((spielerY - 15) > minY){
picSpieler->Location = Point(spielerX, spielerY - 15);
}
if((spielerY - 15) <= minY){
}
break;
case System::Windows::Forms::Keys::Right:
if((spielerX + 15) < maxX){
picSpieler->Location = Point(spielerX + 15, spielerY);
}
if((spielerX + 15) >= maxX){
}
break;
case System::Windows::Forms::Keys::Down:
if((spielerY + 15) < maxY){
picSpieler->Location = Point(spielerX, spielerY + 15);
}
if((spielerY + 15) >= maxY){
}
break;
case System::Windows::Forms::Keys::Left:
if((spielerX - 15) > minX){
picSpieler->Location = Point(spielerX - 15, spielerY);
}
if((spielerX - 15) <= minX){
}
break;
}
}while(bolSpielen = true);
}
|
Kann mir hier jemand weiterhelfen?
Habe keine grosse Ahnung von diesen KeyEventArgs und Eventhandlern, ich vermute, dass ich da gepatzt habe.
Danke im voraus.
Gruss jott