Problem(e) mit Canvas und OnKeyPress

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Jim92
Beiträge: 24
Registriert: Sa 29. Jan 2011, 13:09

Problem(e) mit Canvas und OnKeyPress

Beitrag von Jim92 »

Hallihallo, ich mal wieder.

Im Zuge eines neuen Projektes versuche ich ein kleines Spiel à la Legend of Zelda und ähnliche (aber nicht in diesem Umfang) zu programieren. Hab jetzt schon Klassen für die einzelnen Objekte der Welt erstellt und lass diese mit Canvas zeichnen. Funktioniert sowet ganz gut. Natürlich muss es auch einen Protagonisten geben, den der Spieler bewegt und hier fangen jetzt meine Probleme an:

1. Ich zeichne die Figur in ein Shape, bei dem die Eigenschaft Visible auf false steht. Die Figur soll mit dem Shape bewegt werden. Dazu habe ich folgenden Prozedur geschrieben:

Code: Alles auswählen

Case mRichtung of
  1: Shape1.Top:=Shape1.Top-4;
  2: Shape1.Left:=Shape1.Left-4;
  3: Shape1.Left:=Shape1.Left+4;
  4: Shape1.Top:=Shape1.Top+4;
end;
{Jetzt kommen dann die Zeilen zum Zeichnen des Charakters}
Wenn ich das Shape bewege, bleibt ein Bild des Charakters an der alten Position des Shapes (war ja auch zu erwarten). Meine Frage: Wie bekomm ich das weg?

2. Gesteuert werden soll das Shape über die Pfeiltasten. Dazu folgende Zeilen:

Code: Alles auswählen

procedure Form1.Button1KeyPress (Sender: TObject; var Key: Word, ShiftTaste: Shift);
begin
  //Der Standardrahmen halt
  If Key=37 then mRichtung:=2;
  If Key=38 then mRichtung:=1;
  If Key=39 then mRichtung:=3;
  If Key=40 then mRichtung:=4;
end;
Bei Key=38 und Key=40 (also rauf und runter) funktioniert das auch hervorragend, nur bei links und rechts (37 für links, 39 für rechts) tut sich nichts. Woran könnte das liegen? (ausgeführt wird die Bewegung über die Prozedur oben, die in einem Timer eingefügt ist.)

3. Die Prozedur zu Frage 2 ist für einen Button. Eigentlich soll die aber für das Form abgelaufen werden. Nur tut sich dabei nichts. Es soll halt nichts ausgewählt sein müssen. Wie kann ich das umsetzen?

Ich bedanke mich für eure Hilfe, aus dem was ich hier so gefunden habe (auch unter zu Hilfe nahme von Google) bin ich nicht schlau geworden. Und für die die sich denken ich übernehme mich hier: der Mensch wächst an seinen Aufgaben.

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Problem(e) mit Canvas und OnKeyPress

Beitrag von Maik81ftl »

du schreibst, das du mit einem Timer arbeitest? habe dieses auch schon mal gehabt, ich vermude mal, das der Timer zu Träge ist.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

Jim92
Beiträge: 24
Registriert: Sa 29. Jan 2011, 13:09

Re: Problem(e) mit Canvas und OnKeyPress

Beitrag von Jim92 »

Maik81ftl hat geschrieben:du schreibst, das du mit einem Timer arbeitest? habe dieses auch schon mal gehabt, ich vermude mal, das der Timer zu Träge ist.
zu Träge für welche der Funktionen?

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Problem(e) mit Canvas und OnKeyPress

Beitrag von Maik81ftl »

auf was steht denne der interwall?
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

Eclipticon
Beiträge: 292
Registriert: Sa 5. Feb 2011, 20:38
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
CPU-Target: 32Bit
Wohnort: Wien

Re: Problem(e) mit Canvas und OnKeyPress

Beitrag von Eclipticon »

Jim92 hat geschrieben:3. Die Prozedur zu Frage 2 ist für einen Button. Eigentlich soll die aber für das Form abgelaufen werden. Nur tut sich dabei nichts. Es soll halt nichts ausgewählt sein müssen. Wie kann ich das umsetzen?
TForm.OnKeyDown funktioniert bei mir zu diesem Zweck wunderbar.

Jim92
Beiträge: 24
Registriert: Sa 29. Jan 2011, 13:09

Re: Problem(e) mit Canvas und OnKeyPress

Beitrag von Jim92 »

Also der Timer hat 'nen Intervall von 250, der macht das also 4 mal pro Sekunde. Auf diese Weise soll erreicht werden das sich der Char mit einer Geschwindigkeit von einem Feld/Sekunde bewegt. So bleibt die Bewegung relativ flüssig und der Timer überholt sich eigentlich auch nich selbst.
Eclipticon hat geschrieben:TForm.OnKeyDown funktioniert bei mir zu diesem Zweck wunderbar.
Leider reagiert das bei mir aber nicht. Ich kann auf den Tasten rumdrücken und Hämmern wie ich will, es passiert nichts.

Übrigens ist mir oben ein Fehler unterlaufen: Die Prozedur ist nicht ButtonKeyPress, sondern ButtonKeyDown

Eclipticon
Beiträge: 292
Registriert: Sa 5. Feb 2011, 20:38
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
CPU-Target: 32Bit
Wohnort: Wien

Re: Problem(e) mit Canvas und OnKeyPress

Beitrag von Eclipticon »

Jim92 hat geschrieben:
Eclipticon hat geschrieben:TForm.OnKeyDown funktioniert bei mir zu diesem Zweck wunderbar.
Leider reagiert das bei mir aber nicht. Ich kann auf den Tasten rumdrücken und Hämmern wie ich will, es passiert nichts.
Sorry, TForm.KeyPreview := True hatte ich vergessen ...

Jim92
Beiträge: 24
Registriert: Sa 29. Jan 2011, 13:09

Re: Problem(e) mit Canvas und OnKeyPress

Beitrag von Jim92 »

Die Idee von Eclipticon hat funktioniert und das Problem mit den Richtungen hab ich auch gelöst. Bleibt nur noch das erste mit dem Zeichnen. Hat da jemand 'ne Idee?
[Edit:] Hab's gelöst. Danke für die Tipps.

Antworten