AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Buttons während Endlosschleife betätigen
Thema durchsuchen
Ansicht
Themen-Optionen

Buttons während Endlosschleife betätigen

Ein Thema von StolenURBike · begonnen am 7. Feb 2017 · letzter Beitrag vom 7. Feb 2017
Antwort Antwort
StolenURBike

Registriert seit: 21. Jan 2017
9 Beiträge
 
#1

Buttons während Endlosschleife betätigen

  Alt 7. Feb 2017, 14:42
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:
 Application.ProcessMessages;
Jedoch hat es dann auch andere Prozeduren unterbrochen wie z.B., dass mein Spielfeldrand, welcher durch eine Canvas-Prozedur gezeichnet wird einfach verschwunden ist.

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;
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Buttons während Endlosschleife betätigen

  Alt 7. Feb 2017, 14:54
was denkst du was du noch bedienen kannst wenn du mit Sleep deine Anwendung quasi anhältst ?

gruss
  Mit Zitat antworten Zitat
StolenURBike

Registriert seit: 21. Jan 2017
9 Beiträge
 
#3

AW: Buttons während Endlosschleife betätigen

  Alt 7. Feb 2017, 14:56
Mhh. Das stimmt auch wieder. Aber gibt es dann eine Alternative zu dem Sleepbefehl, der auch seine Aufgabe erledigt eine kurze Pause einzufügen.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Buttons während Endlosschleife betätigen

  Alt 7. Feb 2017, 14:57
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Geda

Registriert seit: 24. Jul 2015
20 Beiträge
 
Delphi XE8 Professional
 
#5

AW: Buttons während Endlosschleife betätigen

  Alt 7. Feb 2017, 15:45
Hast Du schon eine Kombination aus Sleep (kurzes Intervall!) und ProcessMessages versucht?
Geert
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Buttons während Endlosschleife betätigen

  Alt 7. Feb 2017, 16:37
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:
if Keypressed=vk_CurUp then snake.newposV(1);
if Keypressed=vk_CurDwn then snake.newposV(-1);
if Keypressed=vk_Esc then application.terminate;
usw.
Wenn die Schlange zu lang wird könnte es ein Zeitproblem geben, Aber für den Anfang sollte es gehen.
(Die DOS-Version hatte übr. einen Timer)

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Buttons während Endlosschleife betätigen

  Alt 7. Feb 2017, 17:32
Zitat:
Wenn man eine Taste drückt, sollte die Form wissen was damit zu geschehen hat.
Ja soweit sie denn reagiert.
Aber das möchte ich bei seinem Code bezweifeln.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Buttons während Endlosschleife betätigen

  Alt 7. Feb 2017, 17:59
Naja es ist doch offensichtlich das er die Steuerung von dem Form an snake weiterreicht.
Oder etwa nicht?
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz