Delphi-PRAXiS
Seite 98 von 103   « Erste     4888969798 99100     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Andorra 2D [Ver. 0.4.5.1, 31.12.08] (https://www.delphipraxis.net/81314-andorra-2d-%5Bver-0-4-5-1-31-12-08%5D.html)

Vasco da Gama 1. Sep 2009 19:36

Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
 
Weiß das niemand? Nichtmal der gute Igel? :gruebel:
mfG :dp: trotzdem

igel457 1. Sep 2009 19:49

Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
 
1. Ja du kannst einem Sprite mehrere Bilder zuweisen, wenn du eine entsprechende Klasse davon ableitest, die das unterstützt.
2. Das musst du entsprechend Umrechnen. Du kennst die Größe des Viewports, die Größe des Koordinatensystems und die Position deiner Spriteengine.

Vasco da Gama 2. Sep 2009 11:44

Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
 
Hi Andreas, vielen Dank für deine Antwort.

zu 1.:
Das bekomme ich wohl vorerst nicht hin.

zu 2.:
Da viel mir jetzt was auf.
mit
Delphi-Quellcode:
   p := Mouse.CursorPos;
   Showmessage('X: '+IntToStr(p.X) +#13#10+ 'Y: '+IntToStr(p.Y));
im MouseDown Ereignis des Forms erhalte ich immer Werte, relativ zu dem Punkt, der zuletzt angeklickt wurde.
Kann sich das jemand erklären, bzw. kennt da jemand eine Lösung?

mfG und Danke :dp:

fui-tak 2. Sep 2009 14:07

Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
 
Meiner Erfahrung nach gibt Mouse.CursorPos die Koordinaten der Maus auf dem Bildschirm an, also den Abstand von oberer und linker Monitorkante

Vasco da Gama 2. Sep 2009 15:37

Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
 
Hi, tatsächlich hast du Recht, ich weiß auch nicht, was da vorhin falsch war.
Allerdings, bei folgender DoMove procedure
Delphi-Quellcode:
procedure TEinheit.DoMove(TimeGap: Double);
var A, B, AB, BB: Integer;
begin
inherited DoMove(TimeGap);
A := round(X);
B := round(X+200);
AB := round(Y);
BB := round(Y+200);


if (Aim.X in [A..B]) and (Aim.Y in [AB..BB]) then // er bleibt stehen
begin
  AnimActive := false;
  AnimLoop := false;
  FXSpeed := 0;
  FYSpeed := 0;
  case FDirection of //das kommt später
    dirS: AnimPos := 64;
    dirSW: ;
    dirW: ;
    dirNW: ;
    dirN: ;
    dirNE: ;
    dirE: ;
    dirSE: ;
  end;


end
else // er läuft weiter
begin
    X := X + FXSpeed * TimeGap;
    Y := Y + FYSpeed * TimeGap;
end;

Collision;
end;
bleibt die Figur niemals stehen...

Weiters durchläuft er auch ein Haus bei folgender DoCollision:
Delphi-Quellcode:
procedure TEinheit.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
inherited;
  if (Sprite is THaus) then
  begin
    AnimActive := false;
    AnimLoop := false;
    FXSpeed := 0;
    FYSpeed := 0;
    case FDirection of
      dirS: AnimPos := 64;
      dirSW: ;
      dirW: ;
      dirNW: ;
      dirN: ;
      dirNE: ;
      dirE: ;
      dirSE: ;
    end;
  end;

end;

Vasco da Gama 2. Sep 2009 17:57

Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
 
kleine ergänzung:

Aim wird so gesetzt:
Delphi-Quellcode:
procedure TEinheit.Gehen(P: TPoint);
begin
  FYSpeed := 0;
  FXSpeed := 0;
  Aim := p;
  p.X := p.X - round(X);
  p.Y := p.Y - round(Y);
  FXSpeed := Speed * p.X / sqrt(p.X * p.X + p.Y * p.Y);
  FYSpeed := Speed * p.Y / sqrt(p.X * p.X + p.Y * p.Y);
  AnimLoop := true;
  AnimActive := true;
  SetLength(Form2.men, Length(Form2.men)+1);
  Form2.men[Length(Form2.men)-1] := TEinheit.Create(Form2.AdSpriteEngine2);

end;
und zu gehen komm ich so, in der MouseDown procedure:
Delphi-Quellcode:
if (Button = mbRight) then
  begin
    if Length(men) > 0 then
    begin
    for i := 0 to Length(men)-1 do
    begin
      if men[i].angeklickt then
      begin
          men[i].Gehen(P);
      end;
    end;
    end;

  end;

Vasco da Gama 3. Sep 2009 11:48

Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
 
Hat sich erledigt, konnte das Problem lösen.

Vasco da Gama 5. Sep 2009 18:21

Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
 
Jetzt hab ich aber eine weitere Frage.
Eine Klasse wurde von TImageSprite abgeleitet.
im DoMove dieser rufe ich ganz am Ende:
Delphi-Quellcode:
Collision;
auf.
An diese Stelle komme ich immer, allerdings wird die DoCollision procedure niemals ausgeführt. Muss ich für Kollisionen noch etwas beachten?

Danke mfG

XXcD 5. Sep 2009 18:41

Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
 
Schau dir mal die Demo von WormHunter an.
Ich glaube die müsste dir da weiterhelfen

Vasco da Gama 5. Sep 2009 18:46

Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
 
Hi, diese Demo hab ich mir bereits angeschaut, allerdings konnte ich nur feststellen, dass ich am Ende von DoMove, Collision; aufrufen muss.
Und dann in DoCollision die genaue Behandlung.(if sprite is ... etc.)
Genau dies mache ich auch, muss ich für Kollisionen eventuell irgendwelche Befehle ich die Idle procedure schreiben?

mfG


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr.
Seite 98 von 103   « Erste     4888969798 99100     Letzte »    

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 by Thomas Breitkreuz