raumschiffe, raketen etc drehen ... (bes. fetze gefragt)
Übersicht

![]() |
AlfadurBetreff: raumschiffe, raketen etc drehen ... (bes. fetze gefragt) |
![]() Antworten mit Zitat ![]() |
---|---|---|
aloa...
ihr müßt mir helfen, denn ich komme nicht weiter... und dabei probiere ich schon solange rum... *Seufz* situation : mein raumschiff steht in der mitte, mit der nase nach rechts...das is die 0° stellung ... das gegnerische raumschiff steht etwas weiter rechts, auch in der 0° stellung, ergo mit der nase nach rechts....tja, alles was ich jetzt gerne hätte, wäre das das feindliche raumschiff sich langsam aber sicher mit der nase um 180° dreht, und am ende mit der nase richtung mein eigenes raumschiff zeigt. das is natürlich einfach, aber irgendwie schaff ichs nicht das für jede beliebige position zu machen. also wenn mein schiff bei 100,100 steht und das feindliche bei 500,434 und ca 67° (zeigt ca nach unten-unten-rechts) drauf hat ... mich würde mal interessieren wie fetze das problem gelöst hat, ich hab mir startrade noch nicht angeschaut (läd noch) ... aber irgendwie muß er ja auch vor dem problem gestanden haben ... |
||
A Cray is the only computer that runs an endless loop in less than four hours. |
![]() |
Blatolo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du den Winkel haben willst den du haben musst um auf einen bestimmten Punkt zu zeigen ist die ATAN2 Funktion sehr hilfreich.
Winkel#=(ATAN2(y#,x#)+360) MOD 360 y und x sind die Abstände der Punkte, also x=ziel_x-start_x y=ziel_y-start_y Dabei ist nach rechts zeigen schon die 0° Stellung und der Winkel wird im Uhrzeigersinn größer. Hoffe dass es das ist was du meintest |
||
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
tja, das is nur ein teil davon, und zwar der teil den ich schon selbst gelöst hatte. also den winkel in den das feindliche schiff zeigen muß, den hab ich schon selbst rausgefunden, mit der von dir genannten formel...
ich hab mir mal den code zum austesten, wer es probieren will braucht noch ein bild, "raumschiff1.bmp" ... das kann ja zu testzwecken jedes bild sein, hauptsache man weiß wo vorne und hinten ist ... Code: [AUSKLAPPEN] Graphics 800,600 SetBuffer BackBuffer() Const stepsize=5 Const pixcount=360/stepsize Dim raumschiff(1,pixcount) imgraumschiff=LoadImage("raumschiff1.bmp") MaskImage imgraumschiff,255,0,255 For i=0 To pixcount raumschiff(1,i)=CopyImage(imgraumschiff) MidHandle(raumschiff(1,i)) RotateImage(raumschiff(1,i),i*stepsize+90) MaskImage raumschiff(1,i),255,0,255 Next x1#=400 y1#=400 dir1#=0 x2#=500 y2#=300 dir2#=0 Local dx#,dy# Local wneu# Local walt# Function curveangle#(newangle#,oldangle#,increments#) If (oldangle+360)-newangle<NEWANGLE-OLDANGLE Then OLDANGLE=360+OLDANGLE If (newangle+360)-oldangle<OLDANGLE-NEWANGLE Then NEWANGLE=360+NEWANGLE oldangle=oldangle-(oldangle-newangle)/increments Return oldangle End Function Color 255,255,255 While Not KeyHit(1) Cls DrawImage raumschiff(1,dir1/stepsize),x1,y1 DrawImage raumschiff(1,dir2/stepsize),x2,y2 dx#=x2#-x1# dy#=y2#-y1# walt#=dir1# wneu#=(ATan2(dx#,dy#)+360) Mod 360 inc#=5 dir1=curveangle#(wneu,walt,inc) If dir1>360 Then dir1=dir1-360 If dir1<0 Then dir1=dir1+360 Text 10,30,"DIR1 : "+dir1,False,False Text 10,90,"WINKEL : "+wneu,False,False If KeyDown(200) Then y2=y2-10 If KeyDown(208) Then y2=y2+10 If KeyDown(203) Then x2=x2-10 If KeyDown(205) Then x2=x2+10 Flip 0 Wend End mit den cursortasten bewegt man eins der raumschiff und das andere soll sich nach möglichkeit immer zu dem jeweiligen hindrehen... aber irgendwie.... ach mann ... *Seufz* |
||
A Cray is the only computer that runs an endless loop in less than four hours. |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo, hab doch schom mal was mit einem Panzer hier als beispiel gecodet
mit genau diesem thema! ich habs....Code: [AUSKLAPPEN] Graphics 800,600,16,2
SetBuffer BackBuffer() Dim Panzer (360) ;PanzerGrafik_berechnen > 360 Einzelbilder < Rect 9,0,2,20 Rect 0,10,20,20,1 Flip Panzer(0) = CreateImage (20,30) GrabImage Panzer(0),0,0 MidHandle Panzer(0) For z= 1 To 359 panzer(z) = CopyImage (Panzer(0)) RotateImage panzer(z),z MidHandle Panzer(z) Text 500,500,z Flip Cls Next x= 400: y= 30 Repeat If MouseHit(1) Then x= MouseX () Y= MouseY () ;Winkel bezieht sich auf den Panzer winkel = Objekt_richtung_grad(x,y ,400 ,300) End If ;Geschuetz_turm_drehen (posPanzer,Winkel ) so könnte die heißen If posPanzer > Winkel And posPanzer -180 < Winkel Then posPanzer = posPanzer -1 If posPanzer > Winkel And posPanzer -180 > Winkel Then posPanzer = posPanzer +1 If posPanzer < Winkel And posPanzer +180 < Winkel Then posPanzer = posPanzer -1 If posPanzer < Winkel And posPanzer +180 > Winkel Then posPanzer = posPanzer +1 If posPanzer = Winkel -180 Or posPanzer -180 = Winkel Then posPanzer = posPanzer +1 If posPanzer < 0 Then posPanzer =359;Damit es im Kreis läuft If posPanzer > 359 Then posPanzer = 0 If posPanzer = Winkel Then Line x,y ,400 ,300 ;Schuss Oval x-5,y-5,10,10,1 ;Klickpunkt malen DrawBlock Panzer(posPanzer),400,300;Panzer malen Text 100,30, posPanzer + " Panzer" Text 100,60, winkel + " Grad" Flip Cls Until KeyHit (1) End Function Objekt_richtung_grad(Zielpunkt_X,Zielpunkt_Y,Ausgangspunkt_X,Ausgangspunkt_Y ) grad =ATan2(Zielpunkt_Y -Ausgangspunkt_Y, Zielpunkt_X -Ausgangspunkt_X)+90; +90 verschiebt die 0Grad Position If grad < 0 Then grad = grad+360 Return grad End Function hoffe es hilft dir... |
||
[BB2D | BB3D | BB+]
|
![]() |
Fetze |
![]() Antworten mit Zitat ![]() |
---|---|---|
So, die bisher hier geposteten Ansätze sollten dir helfen. Da du danach gefragt hast, erkläre ich dir auch nochmal mein (eigentlich blödes ![]() Ich überprüfe ob der Winkel des anzugreifenden Schiffen zum gerade berechneten Schiff größer oder kleiner ist, als der Winkel des gerade berechneten Schiffes. Dann setze ich eine Variable auf 0, 1 oder 2: Bei 0 ist der Winkel gleich dem Winkel zum Ziel und das raumschiff dreht sich nicht. Bei eins ist der Winkel des Ziels kleiner als der des berechneten Schiffes und das Raumschiff dreht sich folglich nach links, rechts bei 2(bedingungen kannste dir ja denken). Hoffe, das hat dir geholfen(auch wenn ichs nicht glaube ![]() |
||
![]() |
AlfadurBetreff: leute... |
![]() Antworten mit Zitat ![]() |
---|---|---|
mann bin ich doof...doof dooooof.....doooooooooooof. so genug. eigentlich dachte ich immer, mir passiert sowas nicht...aber....ich hatte einfach bei atan2 das y mit dem x vertauscht... und deswegen bin ich nich weiter gekommen. danke für eure hilfe, das panzerbeispiel hat mir dann ein licht aufgehen lassen.... das hat mein startrade konkurrenzprodukt ein ganzes stück weiter gebracht .-) | ||
A Cray is the only computer that runs an endless loop in less than four hours. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group