AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi DelphiX: Durch Delay bewegen sich die Figuren nicht
Thema durchsuchen
Ansicht
Themen-Optionen

DelphiX: Durch Delay bewegen sich die Figuren nicht

Ein Thema von Die Muhkuh · begonnen am 9. Sep 2004 · letzter Beitrag vom 12. Sep 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#1

DelphiX: Durch Delay bewegen sich die Figuren nicht

  Alt 9. Sep 2004, 11:56
Hi,

am besten hier ladet das Game (ca. 500kb, im Rar format) mal runter. Dann seht ihr was ich meine.

Mein Problem ist:

Ich benutze die procedure"Delay" (von Luckie oder von Hagen ist egal, da bei beiden der gleiche Fehler passiert), damit beim "Männchen bauen" nicht sofort fertig sind. Das Prob ist nun, wenn ich ein Männchen gebaut habe und ich baue ein zweites, dann bleibt das andere Männchen stehen, bis das zweite fertig gebaut ist.

Mein Code:

Delphi-Quellcode:
case FigurType of
    ftArbeiter:
    begin
      OnProgress := true;

      repeat
        FBuild := FBuild + 3;
        Util.Delay(500);
      until FBuild > 99;

      if FBuild > 99 then
      begin
        FBuild := 0;

        with TArbeiter.Create(DX.SpriteEngine.Engine) do
        begin
          X := Self.X;
          Y := Self.Y + 64;
        end;
      end;
    end;
  end;

  OnProgress := false;
Sleep kann ich nicht benutzen, da sonst das genze programm einschläft.

Meine Frage:

Wie bekomm ich es hin, dass das / die andere / anderen Männchen weiter laufen?
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#2

Re: DelphiX: Durch Delay bewegen sich die Figuren nicht

  Alt 10. Sep 2004, 09:49
*push*
  Mit Zitat antworten Zitat
Benutzerbild von Spezi1980
Spezi1980

Registriert seit: 11. Aug 2003
Ort: Dresden OT Cossebaude
71 Beiträge
 
Delphi 2005 Personal
 
#3

Re: DelphiX: Durch Delay bewegen sich die Figuren nicht

  Alt 10. Sep 2004, 10:33
Hallo,
ich würde das vollkommen ohne Delay lösen. Du nimmst einfach einen Zähler, der im Hauptprogramm im DXTimer hochgezählt wird und beim errechen eines Wertes wird dann Dein FBuild auch hochgezählt.

Ich hab leider kein Delphi hier um die zu zeigen was ich meine.

Gruß
Robert
Robert
Codito, ergo sum.
>>I code, therefore I am<<
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#4

Re: DelphiX: Durch Delay bewegen sich die Figuren nicht

  Alt 10. Sep 2004, 10:35
Zitat von Spider:
Sleep kann ich nicht benutzen, da sonst das genze programm einschläft.
Ich denke, Delay wird die gleichen Auswirkungen haben.

Eine Sache, die man grundsätzlich bei der Programmierung von Spielen verinnerlichen muß ist, dass man nirgends irgendwelche Wartefunktionen einbaut.

Dies wird in der Spieleprogrammierung alles über Schleifen geregelt - das ist zwar recht aufwändig, verhindert aber, dass durch "Warteschleifen" andere Gameaktionen behindert werden. Hierbei ist dann auch die Performance des Rechners zu beachten, die z.B. durch die FPS ausgeglichen wird.

Wobei ich mit Schleifen jetzt keine For Next-Schleifen meine, sondern Konstrukte wie z.B.

Delphi-Quellcode:
iDelay=100*Ausgleichswert;
iCounter:=0;

und dann hast Du irgendwo

inc (iCounter);
if iCounter=iDelay then
begin
      Macheirgendwas(z.B. Sprite bewegen);
      iCounter:=0;
end;
Wichtig ist, den Fluss der sogenannten "Gameloop" nicht zu stören.

Delphi-Quellcode:
While bQuit<>true do
begin
     BewegeGegner;
     BewegePlayer;
     etc.
end;

Gruß Igotcha
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#5

Re: DelphiX: Durch Delay bewegen sich die Figuren nicht

  Alt 10. Sep 2004, 11:22
Hi,

ich hab das jetzt mal so versucht:

Delphi-Quellcode:
procedure THaus.DoBuild(FigurType: TFigurType);
var
  I: Integer;
begin
  case FigurType of
    ftArbeiter:
    begin
      OnProgress := true;

      while FBuild < 99 do //<-- Gucke hier
      begin
        Inc(I);

        if I = 100 then
        begin
          FBuild := FBuild + 3;
          I := 0;
        end;
      end; //<- Gucke hier [ende] ;)

      if FBuild > 99 then
      begin
        FBuild := 0;

        with TArbeiter.Create(DX.SpriteEngine.Engine) do
        begin
          X := Self.X;
          Y := Self.Y + 100;
        end;
      end;

      Anzahl := Anzahl - 1;
    end;
  end;

  OnProgress := false;
end;
Aber da hängt sich das programm auch auf
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#6

Re: DelphiX: Durch Delay bewegen sich die Figuren nicht

  Alt 10. Sep 2004, 11:31
Zitat von Spider:
Hi,

ich hab das jetzt mal so versucht:

Delphi-Quellcode:
procedure THaus.DoBuild(FigurType: TFigurType);
var
  I: Integer;
begin
  case FigurType of
    ftArbeiter:
    begin
      OnProgress := true;

        Inc(I);

        if I = 100 then
        begin
          FBuild := FBuild + 3;
          I := 0;
        end;


      if FBuild > 99 then
      begin
        FBuild := 0;

        with TArbeiter.Create(DX.SpriteEngine.Engine) do
        begin
          X := Self.X;
          Y := Self.Y + 100;
        end;
      end;

      Anzahl := Anzahl - 1;
    (end;) <--- zuviel?!
  end;

  OnProgress := false;
end;
Ich habe da mal was rausgenommen, da ich den Sinn nicht gesehen habe

Es ist natürlich auch schwer, den Ablauf nur anhand dieser einen Procedure zu beurteilen, aber grds. sollte es so laufen.

Und was soll "Anzahl" eigentlich machen? Hier stellt sich jetzt die Frage, ob Anzahl tatsächlich bei jedem Durchlauf verringert werden soll, oder nur, wenn FBuild > 99 ist?

Gruß Igotcha

P.S. Und dann ist da noch irgendwo ein "end" zuviel.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#7

Re: DelphiX: Durch Delay bewegen sich die Figuren nicht

  Alt 10. Sep 2004, 11:51
Hi,


jetzt gehts auch nicht, da ich die "DoBuild" procedure nur einmal aufrufe und nicht beständig.

Anzahl ist die Anzahl der Figuren die noch gebaut werden. Das spielt im moment keine Rollse, da mit dem noch nix angefangen wird. Steht aber eh an der falschen stelle.

Und nein, es ist kein End zuviel

*MFG*

Manu
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#8

Re: DelphiX: Durch Delay bewegen sich die Figuren nicht

  Alt 10. Sep 2004, 13:06
Zitat von Spider:
Und nein, es ist kein End zuviel
Hm und warum sind in Deiner Procedure 7 "ends" und nur 6 "begins" drin
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#9

Re: DelphiX: Durch Delay bewegen sich die Figuren nicht

  Alt 10. Sep 2004, 13:15
Weil ein Case .. Of befehl auch noch ein End benötigt
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#10

Re: DelphiX: Durch Delay bewegen sich die Figuren nicht

  Alt 10. Sep 2004, 14:13
Hi,

bin jetzt bei folgendem Code:

Delphi-Quellcode:
procedure THaus.DoBuild(FigurType: TFigurType);
begin
  I := 0;

  if not OnProgress then
    FBuild := 0;

  case FigurType of
    ftArbeiter:
    begin
      OnProgress := true;

      while FBuild < 100 do
      begin
        I := I + 0.5;
        if I = 1000000 then
        begin
          Application.HandleMessage;
          FBuild := FBuild + 1;
          I := 0;
        end;
      end;

      if FBuild >= 100 then
      begin

        FBuild := 0;

        with TArbeiter.Create(fmaingame.SpriteEngine.Engine) do
        begin
          X := Self.X;
          Y := Self.Y + 100;
        end;

        Anzahl := Anzahl - 1;

        if Anzahl > 0 then
        begin
          DoBuild(ftArbeiter);
        end
        else
          exit;
      end;
    end;
  end;

  OnProgress := false;
  FBuild := 0;
end;
Durch das HandleMessage geht das PRogramm weiter, aber es ruckelt wie die Sau.

Eine Idee ist mir noch gekommen. Vielleicht sollte man das in nem Thread berechnen lassen? Das gefällt mir zwar nicht so, aber wenns nicht anders geht, dann ist das besser als nix.


*MFG*

Manu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:20 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