![]() |
Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
Weiß das niemand? Nichtmal der gute Igel? :gruebel:
mfG :dp: trotzdem |
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. |
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:
im MouseDown Ereignis des Forms erhalte ich immer Werte, relativ zu dem Punkt, der zuletzt angeklickt wurde.
p := Mouse.CursorPos;
Showmessage('X: '+IntToStr(p.X) +#13#10+ 'Y: '+IntToStr(p.Y)); Kann sich das jemand erklären, bzw. kennt da jemand eine Lösung? mfG und Danke :dp: |
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
|
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:
bleibt die Figur niemals stehen...
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; 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; |
Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
kleine ergänzung:
Aim wird so gesetzt:
Delphi-Quellcode:
und zu gehen komm ich so, in der MouseDown procedure:
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;
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; |
Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
Hat sich erledigt, konnte das Problem lösen.
|
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:
auf.
Collision;
An diese Stelle komme ich immer, allerdings wird die DoCollision procedure niemals ausgeführt. Muss ich für Kollisionen noch etwas beachten? Danke mfG |
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 |
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. |
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