Entwickler-Ecke

Multimedia / Grafik - Der Start-Screen


Delete - Fr 11.06.10 22:30
Titel: Der Start-Screen
Ich bin gerade dabei ein etwas größes Spiel für die Schule zu schreiben. Alles sehr einfach gehalten, aber es soll dennoch ein wenig KLasse besitzen. Das eigentliche Spiel ist auch schon fertig.

Doch nun möchte ich einen Start-Screen einbauen. Darum hab ich mir gedacht, mach ich einfach 2 Bilder, die sich abwechseln! Also einfach ins Formcreate eine Schleife!


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
while (start = true) do
  begin
    sleep (2000);
    counter := counter + 1;
    if counter mod 2 = 1 then
    begin
      Img_menu_start.visible := true;
      Img_menu_clean.visible := false;
    end
    else
    begin
      Img_menu_start.visible := false;
      Img_menu_clean.visible := true;
    end;
  end;


Und dann ins KeyPress die Abfrage!


Delphi-Quelltext
1:
2:
if (start = true) and (key = 'VK_Return'then
    start := false;


Aber es will einfach nicht funktionieren. Das Fenster zeigt sich gar nicht erst. Ich denke, weil das Formcreate nicht durchlaufen kann!


Jann1k - Sa 12.06.10 00:15

Sleep ist für sowas auch nicht geeignet, da es die Anwendung praktisch einfriert, nimm lieber einen Timer, den du dann bei Bedarf abschalten kannst.


MaPsTaR - Sa 12.06.10 01:30

Ich würde einen Timer im OnShow-Event der Form aktivieren, der die Bilder wechselt und dann deaktiviert wird, wenn Enter gedrückt wird.
Da könntest du dann eigentlich Timer1.Enabled testen und kannst die Variable start rausnehmen.

Soweit ich weiß, kann das nicht funktionieren...

Delphi-Quelltext
1:
2:
if (start = true) and (key = 'VK_Return'then
    start := false;
, da key vom Typ Char ist.

Schreib die Abbruchbedingung in OnKeyDown und...

Delphi-Quelltext
1:
2:
3:
4:
5:
if (Timer1.Enabled) and (key = vk_Return) then
begin
  Timer1.Enabled := false;
  //
end;


Booleanvergleiche nicht auf true oder false!


Delete - Sa 12.06.10 12:04

user profile iconMaPsTaR hat folgendes geschrieben Zum zitierten Posting springen:
Ich würde einen Timer im OnShow-Event der Form aktivieren, der die Bilder wechselt und dann deaktiviert wird, wenn Enter gedrückt wird.
Da könntest du dann eigentlich Timer1.Enabled testen und kannst die Variable start rausnehmen.

Soweit ich weiß, kann das nicht funktionieren...

Delphi-Quelltext
1:
2:
if (start = true) and (key = 'VK_Return'then
    start := false;
, da key vom Typ Char ist.

Schreib die Abbruchbedingung in OnKeyDown und...

Delphi-Quelltext
1:
2:
3:
4:
5:
if (Timer1.Enabled) and (key = vk_Return) then
begin
  Timer1.Enabled := false;
  //
end;


Booleanvergleiche nicht auf true oder false!


Ich hab mal deinen Rat befolgt, aber hab ich jetzt das Problem, dass sich das Fenster nicht zeit.
Es wird zwar als aktiv in der Taskleiste angezeigt, aber es erscheint nicht auf dem Bildschirm. Ich hab Probeweise nur die Schleife rausgenommen und festgestellt, dass es an der Schleife im OnShow liegt!

Aber möchte ich ja auch mein Spiel spielen und dafür muss ich es sehen.


ALF - Sa 12.06.10 12:41

Hi, mal ganz einfach.
Im Onshow - Event deiner Form, schreibst Du dies

Delphi-Quelltext
1:
Timer1.Enabled := True;                    

In Der Timer1 Procedure schreibst Du die Bilderwechsel rein.
Aber nicht als Schleife!
Und im OnKeyDown - Event Deiner Form kommt die genannte Abbruchbedingung rein.

Grundsetzlich muss man sich folgendes merken :!:
Es muss standart mässig, alles was in einer Procedure steht, die Procedure komplett durchlaufen werden, damit eine aktuallisierung passieren kann.
Eine sich wiederholende Schleife in einer Procedure verhindert dies! Demzufolge auch keine Aktuallisierung!

Gruss Alf


Hidden - Sa 12.06.10 13:07

user profile iconMaPsTaR hat folgendes geschrieben Zum zitierten Posting springen:
Booleanvergleiche nicht auf true oder false!
Bitte wirklich vermeiden ;) Begründung findet sich hier: Vergleiche auf true/false [http://www.delphi-treff.de/tutorials/objectpascal/programmierung-mit-boolean-werten/page/4/]

lg,


Dude566 - Sa 12.06.10 13:27

Habe gerade sogar eine Videoanleitung gefunden: http://www.youtube.com/watch?v=tFLEAQXszkU


Delete - Sa 12.06.10 13:41

user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
Hi, mal ganz einfach.
Im Onshow - Event deiner Form, schreibst Du dies

Delphi-Quelltext
1:
Timer1.Enabled := True;                    

In Der Timer1 Procedure schreibst Du die Bilderwechsel rein.
Aber nicht als Schleife!
Und im OnKeyDown - Event Deiner Form kommt die genannte Abbruchbedingung rein.

Grundsetzlich muss man sich folgendes merken :!:
Es muss standart mässig, alles was in einer Procedure steht, die Procedure komplett durchlaufen werden, damit eine aktuallisierung passieren kann.
Eine sich wiederholende Schleife in einer Procedure verhindert dies! Demzufolge auch keine Aktuallisierung!

Gruss Alf


Danke ... Hab jetzt alles auf die Reihe bekommen!