![]() |
Buttons während Endlosschleife betätigen
Servus Leute,
wie der Titel schon verrät habe ich ein Problem, dass ich in meinem Projekt (Snake) während der Endlosschleife keine anderen Buttons ausführen kann. Ich habe bisher schon mit deiesem Befehl probiert
Code:
Jedoch hat es dann auch andere Prozeduren unterbrochen wie z.B., dass mein Spielfeldrand, welcher durch eine Canvas-Prozedur gezeichnet wird einfach verschwunden ist.
Application.ProcessMessages;
Hier der Code der Schleife:
Code:
procedure TForm1.Start();
var s:integer; begin s:=0; snake := TSnake.Create; snake.InitSnake(70,50); snake.Richtung:=2; Label3.Caption:='0'; while s=0 do begin snake.FoodListener(); snake.KeyListener(); snake.MoveSnake(); sleep(100 - (((snake.length - 3) div 2)*8)); s:=snake.SnakeListener(); end; end; |
AW: Buttons während Endlosschleife betätigen
was denkst du was du noch bedienen kannst wenn du mit Sleep deine Anwendung quasi anhältst ?
gruss |
AW: Buttons während Endlosschleife betätigen
Mhh. Das stimmt auch wieder. Aber gibt es dann eine Alternative zu dem Sleepbefehl, der auch seine Aufgabe erledigt eine kurze Pause einzufügen.
|
AW: Buttons während Endlosschleife betätigen
Du könntest alternativ einen Timer mit einem kleinen Interval starten, der immer jeweils einen nächsten Schritt ausführt (also z.B. Snake.X := Snake.X + 1 und PaintSnake).
Dann bleibt Deine Anwendung bedienbar und mit der ButtonBehandlung kannst Du Deinen Timer ausschalten. Nur mal so als Anregung. Du kannst zwar nicht sicher sein, dass der Timer wirklich in dem gewünschten Zyklus feuert, aber vielleicht läuft es insgesamt ja flüssig genug. EDIT: Der "professionelle Weg" wäre übrigens, die Fortschritte in einem Thread zu berechnen. Das wird aber dann schon komplizierter. |
AW: Buttons während Endlosschleife betätigen
Hast Du schon eine Kombination aus Sleep (kurzes Intervall!) und ProcessMessages versucht?
|
AW: Buttons während Endlosschleife betätigen
Warum hat Snake eigentlich einen KeyListener?
Wenn man eine Taste drückt, sollte die Form wissen was damit zu geschehen hat. Und wenn der Tastendruck für Snake gedacht ist dann reicht man ihn entsprechend weiter. Ungefähr so: (pseudoCode)
Code:
Wenn die Schlange zu lang wird könnte es ein Zeitproblem geben, Aber für den Anfang sollte es gehen.
if Keypressed=vk_CurUp then snake.newposV(1);
if Keypressed=vk_CurDwn then snake.newposV(-1); if Keypressed=vk_Esc then application.terminate; usw. (Die DOS-Version hatte übr. einen Timer) Gruß K-H |
AW: Buttons während Endlosschleife betätigen
Zitat:
Aber das möchte ich bei seinem Code bezweifeln. gruss |
AW: Buttons während Endlosschleife betätigen
Naja es ist doch offensichtlich das er die Steuerung von dem Form an snake weiterreicht.
Oder etwa nicht? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:42 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