![]() |
Suche Hilfe bei Bewegung einer Form
Hallo, bin ein Delphi-Anfänger und ich soll für die Schule das Spiel Snake programmieren. Ich möchte vorerst den Kopf bewegen lassen. Ich kann den Kopf zeichen lassen und auch der Debugger läuft, aber ich kann ihn nicht bewegen. Wo liegt der Fehler?
mTSchlange ist der Kopf und der Schwanz in einem, wird jedoch nicht gezeichnet
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, mTHintergrund, mTSchlange, mTFutter, mTKopf; type TForm1 = class(TForm) Image1: TImage; Timer1: TTimer; {TiGameEngine: TTimer;} procedure FormCreate(Sender: TObject); procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure TiGameEngineTimer (Sender: TObject); private { Private-Deklarationen } Hintergrund : THintergrund; Links,Rechts,Hoch,Runter : Boolean; Kopf : TKopf; public { Public-Deklarationen } Schlange : TSchlange; Futter : TFutter; end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin Hintergrund:= THintergrund.create(Image1); Hintergrund.zeichnen(); Schlange:= TSchlange.create(250,300,Image1,Futter); Kopf:= TKopf.create(250,300,Image1,Futter); Kopf.zeichnen(); Kopf.bewege_links(); Kopf.bewege_rechts(); Kopf.bewege_oben(); Kopf.bewege_unten(); end; procedure TForm1.TiGameEngineTimer (Sender: TObject); begin IF (Links = True) and (Kopf.GetZXPosition > 0) Then begin Kopf.bewege_links(); end; IF (Rechts = True) and (Kopf.GetZXPosition < 649) Then begin Kopf.bewege_rechts(); end; IF (Hoch = True) and (Kopf.GetZYPosition > 0) Then begin Kopf.bewege_oben(); end; IF (Runter = True) and (Kopf.GetZYPosition < 481) Then begin Kopf.bewege_unten(); end; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin IF (Key = VK_LEFT ) Then begin Links := True; end; IF (Key = VK_Right ) Then begin Rechts := True; end; IF (Key = VK_Up ) Then begin Hoch := True; end; IF (Key = VK_Down ) Then begin Runter := True; end; end; procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin IF (Key = VK_Left ) Then begin Links := False; end; IF (Key = VK_Right ) Then begin Rechts := False; end; IF (Key = VK_Up ) Then begin Hoch := False; end; IF (Key = VK_Down ) Then begin Runter := False; end; end; end. |
AW: Suche Hilfe bei Bewegung einer Form
Ist KeyPreview des Formulars auf True, damit der Tastendruck überhaupt im FormKeyDown landet?
|
AW: Suche Hilfe bei Bewegung einer Form
Wie sehen denn die verwendeten Klassen (THintergund etc.) aus? Und gewöhn Dir lieber gar nicht erst an, mit true oder false zu vergleichen, das kann zu falschen Ergebnissen führen.
Die OnKeyDown-Methode würde ich etwas anders schreiben:
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin case Key of VK_LEFT: Links := True; VK_Right: Rechts := True; VK_Up: Hoch := True; VK_Down Runter := True; end; end; |
AW: Suche Hilfe bei Bewegung einer Form
Zitat:
|
AW: Suche Hilfe bei Bewegung einer Form
Ja, ich befürchte, dass er in den Timer gar nicht reinkommt, weil du ja den Finger auf der Taste hast ... Klammer doch mal alles in KeyUp aus und schau ob dann irgendwas passiert, wenn du die Taste nach Links drückst und wieder loslässt.
EDIT : oder passiert da auch schon nix? Kopf.bewege_links(); Kopf.bewege_rechts(); Kopf.bewege_oben(); Kopf.bewege_unten(); |
AW: Suche Hilfe bei Bewegung einer Form
Zitat:
Aber so wie es aussieht ist das doch nur eine Vereinfachung von dem, was ich geschrieben habe.. |
AW: Suche Hilfe bei Bewegung einer Form
Ist es, Du hast uns aber immer noch nicht die Klassen gezeigt.
|
AW: Suche Hilfe bei Bewegung einer Form
Probier es mal mit anderen Tasten, beispielsweise dem Nummernblock oder noch besser Buchstaben. Ich meine Dinge wie die Pfeiltasten sind Sonderfälle, die werden so garnicht normal an die Form durchgereicht.
|
AW: Suche Hilfe bei Bewegung einer Form
Zitat:
Ein Freund meinte außerdem irgendwie, dass der Kopf nur auf den Koordinaten 250, 300 createt wird
Delphi-Quellcode:
Liegt da irgendwo der Fehler?
Kopf:= TKopf.create(250,300,Image1,Futter);
|
AW: Suche Hilfe bei Bewegung einer Form
Woher sollen wir das wissen, wenn wir die Klassen nicht kennen? Ich frag ja nicht umsonst die ganze Zeit danach.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz