![]() |
Re: Einen Winkel errechnen!?
Zitat:
Komme irgendwie nicht so richtig hin, da ich will, dass ein Sprite immer dahin schaut, wo die Maus ist. |
Re: Einen Winkel errechnen!?
Zitat:
|
Re: Einen Winkel errechnen!?
Liste der Anhänge anzeigen (Anzahl: 1)
Es funktioniert trozdem nicht.
Ich geb mal die EXE-File dazu. Dann sieht man den Fehler besser. Der Code für das lautet nämlich so:
Delphi-Quellcode:
Aim.Y-Player.Y ergibt die Gegenkathete
Angle:=trunc((arctan((Aim.Y-Player.Y)/(Aim.X-Player.X)) * 180/pi));
Aim.X-Player.X ergibt die Ankathete |
Re: Einen Winkel errechnen!?
Delphi-Quellcode:
Warum nicht so:
Angle:=trunc((arctan((Aim.Y-Player.Y)/(Aim.X-Player.X)) * 180/pi));
Delphi-Quellcode:
Am sonsten, wenn du uns Code posten würdest, könnten wir hilfreicher sein.
Angle:=Round((arctan((Aim.Y-Player.Y)/(Aim.X-Player.X)) * 180/pi));
|
Re: Einen Winkel errechnen!?
Naja, weil das der COde ist. Somit schaut der Spieler in die Richtung, wo die Maus ist. Sollte er jedenfalls. Ich poste mal den Code, wird aber auch nicht weiterhelfen.
Delphi-Quellcode:
Zwar kann man hier nicht gehen, dass is aber auch unwichtig, da zuerst mal der SPieler in die richtige Richtung schaun muss, was er aber nicht tut
Procedure TPlayer.domove(MoveCount: Integer);
begin Angle:=Round(arctan((Aim.Y-Player.Y)/(Aim.X-Player.X)) * 180/pi); inherited DoMove(MoveCount); X := Cos256(Angle)+200; Y := Sin256(Angle)+200; end; |
Re: Einen Winkel errechnen!?
Zitat:
Delphi-Quellcode:
Procedure TPlayer.domove(MoveCount: Integer);
begin Angle:=Round(arctan((Aim.Y-Player.Y)/(Aim.X-Player.X)) * 180/pi); inherited DoMove(MoveCount); X := Cos256(Angle)*200; Y := Sin256(Angle)*200; {//oder: SinCos(Angle, Y, X); X:= 200*x; Y:= 200*y;} end; |
Re: Einen Winkel errechnen!?
Ich hoffe das hilft:
Delphi-Quellcode:
type TForm1 = class(TForm) GroupBox1: TGroupBox; Label2: TLabel; Label1: TLabel; Label3: TLabel; procedure FormPaint(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; center : tpoint; implementation uses Math; {$R *.dfm} procedure TForm1.FormPaint(Sender: TObject); begin Canvas.FillRect(ClientRect); Canvas.MoveTo(0, height div 2); Canvas.LineTo(width, height div 2); Canvas.MoveTo(width div 2, 0); Canvas.LineTo(width div 2, height); center := point(width div 2,height - height div 2); end; procedure TForm1.FormCreate(Sender: TObject); begin Canvas.Pen.Color := clBlack; end; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var angle,p : extended; begin angle := 0; p := 1; FormPaint(self); Canvas.MoveTo(width div 2, height div 2); Canvas.LineTo(x,y); y := Height - y; Label1.Caption := 'y-center.Y = '+inttostr(y-center.Y); if (x-center.X <>0) then begin Angle := ArcTan((y-center.Y)/(x-center.X)) * 180 / pi; Label3.Caption := 'x-center.X = '+inttostr(x-center.X); if (angle<0)and(x-center.X<0) then angle := 180 + angle else if (x-center.X<0)and(y-center.Y<0) then angle := 180 + angle else if (y-center.y<0) then angle := 360 + angle; Label2.Caption := 'Current angle: '+Floattostr(angle)+ ' degrees.'; end; end; |
Re: Einen Winkel errechnen!?
Danke, hat sehr geholfen. Wusste schon, worans liegt. Nämlich an den 360°, nicht 90°.
Jetzt hab ich nur noch ein Problem. Der richtige Winkel wird angezeigt, doch das Bild dreht sich nicht richtig. Hier ist der Code:
Delphi-Quellcode:
Nach dem Label2 das richtige ausgibt, stimmt nur irgendwas mit den letzten 2 Zeilen nicht.. Vielleicht sieht jemand was
if (Aim.x-Player.X <>0) then
begin Player.Angle := trunc(ArcTan((Aim.y-Player.Y)/(Aim.x-Player.X)) * 180 / pi); if (Player.Angle<0)and(Aim.x-Player.X<0) then Player.Angle := 180 + Player.Angle else if (Aim.x-Player.X<0)and(Aim.y-Player.Y<0) then Player.Angle := 180 + Player.Angle else if (Aim.y-Player.y<0) then Player.Angle := 360 + Player.Angle; end; Form1.Label2.Caption:=floattostr((Player.Angle-360)*-1); Player.X := Cos256((Player.Angle-360)*-1)+200; Player.Y := Sin256((Player.Angle-360)*-1)+200; |
Re: Einen Winkel errechnen!?
Wenn du uns jetzt noch verrätst, was sin256 und cos256 ist :wink: .
Ich verstehe auch dein Problem nicht. Du wolltest, dass der Spieler zum Ziel schaut, wozu veränderst du jetzt dessen Position? Und den Sinn hinter einer Addition oder Subtraktion eines Winkel mit 360° entdecke ich auch nicht (eine Funktion, die den Winkel auf 0..359 bringt, hätte ich noch verstanden). |
Re: Einen Winkel errechnen!?
Liste der Anhänge anzeigen (Anzahl: 1)
Also:
sin256, cos256 hab ich beim suchen gefunden (Sprites drehen). Leider kA was die machn. Der Spieler soll immer in die Richtung der Maus schaun. Das ganze ist DelphiX, somit kann man mit Angle den Winkel des Spielers festlegen. Der Winkel wird ja richtig errechnet. Nur das darstellen funktioniert nicht so ganz. Siehe EXE-File |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 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-2025 by Thomas Breitkreuz