Entwickler-Ecke

Sonstiges (Delphi) - DELPHIX .DEad zu langsam


Ironwulf - Mo 26.12.05 16:18
Titel: DELPHIX .DEad zu langsam
Ich hab da ne Procedure die macht mir weng kummer ;D

Player1Unit ist die varible die mir sagt wieviel Spielfiguren Spieler 1 besitzt
UNitINdex ist ne art Zählvariable mit der ich die Sprites weiter zähle
Sel ist das gewählte Sprite (TSprite)

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
var k: Integer;
begin
  k:= 0;
  UnitIndex:= -1;
  Repeat
    Inc(UnitIndex);
    if UnitIndex < Player1Unit Then
    begin
      Sel:= Form1.DXSpriteEngine1.Engine.Items[UnitIndex];
      If Sel is Tunit Then
      If (TUnit(Sel).Spieler = 1And (TUnit(Sel).Bewegung > 0Then exit;
    end
    else
    begin
      UnitIndex:= -1;
      inc(k);
    end;
  Until k = 2;
end;


wenn ich jetz statt exit, Showmessage('') schreib funktioniert das so wie ichs mir vorstelle, schreibe ich aber was anderes sinnloses rein wie Label1.Caption:= IntToStr(k) funktioniert das ganze wieder rum nicht mehr

Und das ganze soll halt bewirkungen das wenn ich eine Figur verliere das die nächste angewählt wird, und man dann durch eine andere prozedur die nächste figur munter weiter bewegen kann


Christian S. - Mo 26.12.05 17:15

Vielleicht würde ein aussagekräftier Titel mir helfen, das Problem zu verstehen. ;-) Denn so wirklich kapiert habe ich nicht, was Du machen willst :-)


Ironwulf - Mo 26.12.05 17:31

also ich entferne ein spite mit Dead,


Delphi-Quelltext
1:
2:
3:
TUnit(Sel).Dead;
  Player1Unit:= Player1Unit - 1;
  Select.NachGruendung;             //obige Procedure


und dann soll das nächste sprite ausgewählt werden, welches dem Spieler1 gehört und noch bewegungen machen kann

Delphi-Quelltext
1:
If (TUnit(Sel).Spieler = 1And (TUnit(Sel).Bewegung > 0Then exit;                    


und auch genau in der zeile liegt auch das problem wenn ich dort anstatt exit mir eine showmessage('') anzeigen lasse funktioniert das ganze, aber mit exit nunmal nicht, und wenn ich statt exit gar nichts rein schreib gehts auch nich irgendwie nur mit der showmessage


Christian S. - Mo 26.12.05 17:34

Naja, der Unterschied zwischen ShowMessage und Exit sollte schon irgendwie klar sein, oder? Bei Exit verlässt Du die Prozedur ja komplett, bei ShowMessage bleibste drin.

Den Unterschied zwischen ShowMessage und anderen Anweisungen kann ich mir momentan nicht erlären.


Ironwulf - Mo 26.12.05 19:03

so ich habs jetz für mich zufriedenstellend gelöst ;D

Ich hab vor den Aufruf der Prozedur noch eine form die mir gezeigt wird

Delphi-Quelltext
1:
2:
3:
4:
TUnit(Sel).Dead;
Player1Unit:= Player1Unit - 1;
Form3.ShowModal;
Select.NachGruendung;


Das Problem liegt wahrscheinlich daran das die .Dead Prozedur zu langsam ist da mir aufgefallen ist das während "Select.NachGruendung;" ein Sprite mehr existiert als wenn ich danach auf nen button drücke

Ich würd trotzdem gern wissen wie man das umgehn kann
ich hab da an sleep oder so gedacht aber das scheints in meniem Delphi3 nit zugeben...


F34r0fTh3D4rk - Mo 26.12.05 19:07

aus dem grund benutze ich die sprite engine auch nicht, damit hat man später nur probleme, für allem wenn man die sprites dann nach dem dead neu initialisieren will, ich mach das alles per image list, da hab ich zwar keine kollisionsabfrage, aber das sollte man auch so irgendwie gebacken kriegen ;)