Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Andorra 2D Probleme (https://www.delphipraxis.net/138497-andorra-2d-probleme.html)

Vasco da Gama 11. Aug 2009 13:23


Andorra 2D Probleme
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi, im Anhang ist mein komplettes Projekt, also bitte nicht irgendwie verarbeiten. ;)

Ich habe dabei einige Probleme:

Vollbild wird bei Form2 nicht aktiviert.

Der Junge auf Form2 läuft nur nach rechts, nicht nach links(das haus sollte er eigentlich ignorieren...)

Und wie schaff ichs überhaupt, dass der junge aufhört zu rennen, wenn er angekommen ist?

Würde mich freuen, wenn ihr euch das Projekt mal durchschaut, mfG


EDIT: dann würde mich auch noch interessieren, wie ich sachen an den Cursor "anhängen" kann...

danke, mfG

Vasco da Gama 12. Aug 2009 17:01

Re: Andorra 2D Probleme
 
4 mal runtergeladen, keine antwort...
wenn keiner helfen kann, gibts dann sowas wie ein Andorra Forum oder bin ich hier in der DP an der besten Adresse?

Vasco da Gama 14. Aug 2009 11:06

Re: Andorra 2D Probleme
 
Fortschritt:

Damit das Vollbild klappt muss es vor AdDraw.Initialize

Aber... damit habe ich nicht mehr mein gewolltes projekt, sondern es wird sofort das zweite Fenster maximiert, allerdings ist es schwarz.. klicke ich nun irgendwo hin, komme ich zum ersten Fenster, aber grau(clBtnFace) ohne meine GUI...
weiß jemand warum?

igel457 14. Aug 2009 11:13

Re: Andorra 2D Probleme
 
Wenn du DirectX verwendest wird beim Vollbildmodus nur ein Overlay erzeugt, an der Größe des Fensters ändert sich nichts. Du musst dein Formular vor der Initialisierung noch an die Größe anpassen.

Vasco da Gama 14. Aug 2009 13:43

Re: Andorra 2D Probleme
 
Vielen Dank für deine Antwort, ist es auch ohne DirectX möglich? Ich habe mich nämlich noch überhaupt nicht mir DX beschäftigt...
zur besseren Übersicht, eine Liste mit den (noch) aktuellen Problemen:

1. Form 2 öffnet sich zu früh, fenster sind Schwarz bzw. grau

2. Der Junge auf Form zwei läuft nicht wie gewollt(nicht nach links, wenn nach rechts, weiß ich nicht, wie ich ihn zum stoppen bringe)

neue probleme, die sich inzwischen aufgetan haben:

3. Bei AdDraw.Canvas.Textout wird #13#10 genauso ignoriert, wie beim normalen Canvas, aber hier möchte ich es nicht mit pattis lösung ersetzen(vorerst...)

4. ich wollte bei der Wormhunter Demo für mich ergänzen, dass er nicht durch die Bäume läuft, grundsätzlich recht einfach, er hat zwar das bild als würde er stehen, allerdings 'schwebt' er weiter...

danke an alle, die sich hier die mühe machen. mfg

Vasco da Gama 15. Aug 2009 10:02

Re: Andorra 2D Probleme
 
Zitat:

Zitat von Vasco da Gama
1. Form 2 öffnet sich zu früh, fenster sind Schwarz bzw. grau

2. Der Junge auf Form zwei läuft nicht wie gewollt(nicht nach links, wenn nach rechts, weiß ich nicht, wie ich ihn zum stoppen bringe)

neue probleme, die sich inzwischen aufgetan haben:

3. Bei AdDraw.Canvas.Textout wird #13#10 genauso ignoriert, wie beim normalen Canvas, aber hier möchte ich es nicht mit pattis lösung ersetzen(vorerst...)

4. ich wollte bei der Wormhunter Demo für mich ergänzen, dass er nicht durch die Bäume läuft, grundsätzlich recht einfach, er hat zwar das bild als würde er stehen, allerdings 'schwebt' er weiter...

Punkt 4 ist erledigt, kleiner Fehler von mir...

Aber das andere, besonders 1 und 2 bekomm ich im Moment einfach nicht hin.

Edit: fürs zweite der Quellcode:
Delphi-Quellcode:
procedure TEinheit.Gehen(P: TPoint);
begin
  if (P.X > X) then
    begin
      AnimActive  := true;
      AnimStart   := 0;
      AnimStop    := 7;
      AnimSpeed   := 15;
      XSpeed      := 150;
      DoMove(Form1.AdPerCounter.TimeGap);
      angeklickt  := false;


        if (P.Y > Y) then
        begin
          AnimActive  := true;
          AnimStart   := 16;
          AnimStop    := 23;
          AnimSpeed   := 15;
          YSpeed      := 150;
          angeklickt  := false;
        end
        else
        if (P.Y < Y) then
        begin
          AnimActive  := true;
          AnimStart   := 8;
          AnimStop    := 15;
          AnimSpeed   := 15;
          YSpeed      := 150;
          angeklickt  := false;
        end;
      end
    else
    if (P.X < X) then
    begin
      AnimActive  := true;
      AnimStart   := 24;
      AnimStop    := 31;
      AnimSpeed   := 15;
      XSpeed      := -150;
      angeklickt  := false;
      DoMove(Form1.AdPerCounter.TimeGap);
      begin
        if (P.Y > Y) then
        begin
          AnimActive  := true;
          AnimStart   := 16;
          AnimStop    := 23;
          AnimSpeed   := 15;
          YSpeed      := 150;
          angeklickt  := false;
        end
        else
        if (P.Y < Y) then
        begin
          AnimActive  := true;
          AnimStart   := 8;
          AnimStop    := 15;
          AnimSpeed   := 15;
          YSpeed      := -150;
          angeklickt  := false;
        end;
      end;
    end;
end;

Vasco da Gama 18. Aug 2009 12:32

Re: Andorra 2D Probleme
 
Jetzt hab ich mal Einheit.Gehen verschönert:
Delphi-Quellcode:
procedure TEinheit.Gehen(P: TPoint);
begin
  Aim := P;
  AnimLoop := true;

  if (p.x > X) and (p.Y > Y) then   // Südost
  begin
    AnimActive  := true;
    AnimStart   := 40;
    AnimStop    := 47;
    AnimSpeed   := 10;
    XSpeed      := 100;
    YSpeed      := 100;
    DoMove(Form1.AdPerCounter.TimeGap);
  end
  else
  if (p.x > X) and (p.Y < Y) then   // Nordost
  begin
    AnimActive  := true;
    AnimStart   := 16;
    AnimStop    := 23;
    AnimSpeed   := 15;
    XSpeed      := 100;
    YSpeed      := -100;
    DoMove(Form1.AdPerCounter.TimeGap);
  end
  else
  if (p.x > X) and (p.Y = Y) then   // Ost
  begin
    AnimActive  := true;
    AnimStart   := 0;
    AnimStop    := 7;
    AnimSpeed   := 15;
    XSpeed      := 100;
    YSpeed      := 0;
    DoMove(Form1.AdPerCounter.TimeGap);
  end
  else
  if (p.x < X) and (p.Y > Y) then   // Südwest
  begin
    AnimActive  := true;
    AnimStart   := 48;
    AnimStop    := 55;
    AnimSpeed   := 15;
    XSpeed      := -100;
    YSpeed      := 100;
    DoMove(Form1.AdPerCounter.TimeGap);
  end
  else
  if (p.x < X) and (p.Y < Y) then   // Nordwest
  begin
    AnimActive  := true;
    AnimStart   := 24;
    AnimStop    := 31;
    AnimSpeed   := 15;
    XSpeed      := -100;
    YSpeed      := -100;
    DoMove(Form1.AdPerCounter.TimeGap);
  end
  else
  if (p.x < X) and (p.Y = Y) then   // West
  begin
    AnimActive  := true;
    AnimStart   := 56;
    AnimStop    := 63;
    AnimSpeed   := 15;
    XSpeed      := -100;
    YSpeed      := 0;
    DoMove(Form1.AdPerCounter.TimeGap);
  end
  else
  if (p.x = X) and (p.Y > Y) then   // Süd
  begin
    AnimActive  := true;
    AnimStart   := 32;
    AnimStop    := 39;
    AnimSpeed   := 15;
    XSpeed      := 0;
    YSpeed      := 100;
    DoMove(Form1.AdPerCounter.TimeGap);
  end
  else
  if (p.x = X) and (p.Y < Y) then   // Nord
  begin
    AnimActive  := true;
    AnimStart   := 8;
    AnimStop    := 15;
    AnimSpeed   := 15;
    XSpeed      := 0;
    YSpeed      := -100;
    DoMove(Form1.AdPerCounter.TimeGap);
  end
  else
  if (p.x = X) and (p.Y = Y) then
  begin
    AnimActive  := false;
  end;
end;
Naja, ich klicke die Einheit an(linke Maustaste) dann klick ich irgendwo anders hin(rechte maustaste).
er beginnt zu 'gehen'

naja, zuerst springt er etwa 5 Zentimeter dann geht er zwar, aber er dreht sich im kreis....

Also der Sprite bewegt sich richtig, die Bilder sind aber falsch, obwohl die AnimStart und AnimStops 100%ig richtig sind... weiß jemand was ich falsch mache?

freak4fun 22. Aug 2009 01:45

Re: Andorra 2D Probleme
 
Was brauche ich alles zum Ausführen? Andorra habe ich installiert.

Speziell:
- IniLang
- GraphicHint

Auf den ersten Blick fehlt schon mal ein "<=" oder ">=" bei:
Delphi-Quellcode:
if (P.Y > Y) then
  begin
    ...
  end
  else
  if (P.Y < Y) then
  begin
    ...
  end;

Vasco da Gama 26. Aug 2009 08:54

Re: Andorra 2D Probleme
 
Hi, ich habe nach Vorbild der Wormhunter Demo das ding etwas umgebaut....
Delphi-Quellcode:
procedure TEinheit.Gehen(P: TPoint);
begin

  SetDir(round(ArcTan((Y - P.Y) / (X - P.X))));

end;

procedure TEinheit.SetDir(ADirection: Integer);
var
  w:integer;
begin
  //Reset the speed variables
  FYSpeed := 0;
  FXSpeed := 0;


  w := ADirection;
  ShowMessage(IntToStr(w));
  //Set the X and the Y speed
  FXSpeed := round(cos(PI/180*w)*Speed);
  ShowMessage(IntToStr(FXSpeed));
  FYSpeed := round(sin(PI/180*w)*Speed);
  ShowMessage(IntToStr(FYSpeed));
  AnimLoop := true;
  AnimActive := true;
end;
Mit den ShowMessages zeige ich mir Testweise an, ob es vernünftige Werte sind, und das sind sie.
Weiters: Ich habe in der Schule noch nichts über sinus cosinus tangens oder arctangens oder sonst was in der Richtung gelernt, und habe mir die Funktionen aus verschiedenen Codes zusammengebastelt....

Fazit: Die Figur geht erstmal(Die Animationsrichtung leg ich fest, wenn das mal klappt), allerdings bewegt sich der Sprite nicht vom Fleck.... weiß jemand warum :gruebel:

mfG :dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:17 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