Winkel stimmt nicht

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

jj2

Betreff: Winkel stimmt nicht

BeitragMi, Aug 01, 2007 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
Ich will gerade ein Bild an ein anderes ausrichten.
Aber i-was stimmt nicht.
Das bild dreht sich immer nur bis zu einem bestimmten winkel und danach spinnt es.

Code: [AUSKLAPPEN]

For g.gegner=Each gegner
      ColorG3D(255,255,255,1,g\hoehe)
      If typ=0 Then DrawImage3D (gegner1,g\x+p_x,g\y+p_y,0,0,437,259,0,g\winkel)
      g\abstand=Abs(p_x+g\x)+Abs(p_y+g\y)
      ;Höhe angleichen
      If g\abstand < 2000 Then
         If g\hoehe< p_hoehe Then g\hoehe=g\hoehe+0.002
         If g\hoehe> p_hoehe Then g\hoehe=g\hoehe-0.002
      EndIf
      ;Folgen
      If g\abstand < 2000 Then
         g\winkel = ATan2(g\y-p_y,g\x-p_x)
      EndIf
   Next


p_x+y sind die player koordinaten und g\x+y die gegner koordinaten.
Aber i-wie dreht sich der gegner nur am anfang richtig.

Wäre nett wenn ihr mir helfen könntet.

mfg
jj2
...:::ICH WOHNE IN DER GESÜNDESTEN STADT DEUTSCHLANDS:::...
Meine Pages : www.lpbase.de
mein projekt :Authority von Impulse Soft
User posted image
 

Beatenvoy

BeitragMi, Aug 01, 2007 21:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Winkel = ATan2(y1-y2,x1-x2) Mod 360 ?????

jj2

BeitragMi, Aug 01, 2007 21:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, geht trotzdem nicht.
Ich glaube, dass es i-wie daran liegt dass der 0 punkt in bb3d in der mitte des bildschirms ist.

So, also habe ich zum spass mal das Bild in der Mitte des Bildschirms gezeichnet und siehe da, es hat funktioniert.

Könnt ihr mir sagen warum und wie ich das ändern kann?


mfg
jj2
...:::ICH WOHNE IN DER GESÜNDESTEN STADT DEUTSCHLANDS:::...
Meine Pages : www.lpbase.de
mein projekt :Authority von Impulse Soft
User posted image

Willi die Rübe

BeitragMi, Aug 01, 2007 22:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Den Bildschirm Nullpunkt kannst du mit Origin X, Y verschieben, aber normal befindet er sich oben links. Ist das Image auch mittig ausgerichtet? (HandleImage img, x, y )
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon
Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX

At the Farewell Party visit: MySpace | Homepage

jj2

BeitragMi, Aug 01, 2007 22:34
Antworten mit Zitat
Benutzer-Profile anzeigen
sry aber wir sind in 3D
...:::ICH WOHNE IN DER GESÜNDESTEN STADT DEUTSCHLANDS:::...
Meine Pages : www.lpbase.de
mein projekt :Authority von Impulse Soft
User posted image

Willi die Rübe

BeitragMi, Aug 01, 2007 23:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann wäre das die entsprechende Funktion in 3D (nur mal so am Rande)

Code: [AUSKLAPPEN]
Function CenterMesh (entity)
   FitMesh entity, -(MeshWidth (entity) / 2), -(MeshHeight (entity) / 2), -(MeshDepth (entity) / 2), MeshWidth (entity), MeshHeight (entity), MeshDepth (entity)
End Function


Auch wenn es unwahrscheinlich ist, dass es damit zusammenhängt. Hast du evt. die Achsen verwechselt? Da man bei normaler Kameraausrichtung oft Y mit Z verwechselt.

Aber irgendwie kommt mir das komisch vor:

Code: [AUSKLAPPEN]
DrawImage3D (gegner1,g\x+p_x,g\y+p_y,0,0,437,259,0,g\winkel)
;[...]
g\winkel = ATan2(g\y-p_y,g\x-p_x)
 

wenn sich der Gegner an g\x+p_x bzw. g\y+p_y befindet,(wieso eigentlich?) dann musst du das auch angeben, also theoretisch:
g\winkel = ATan2(g\y+p_y-p_y,g\x+p_x-p_x)
Was das zur Folge hätte :
g\winkel = ATan2(g\y,g\x)
Was allerdings auch nicht so richtig aussieht ... Embarassed

Probiers mal noch so:
g\winkel = ATan2((...)+360) mod 360
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon
Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX

At the Farewell Party visit: MySpace | Homepage

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Aug 02, 2007 0:48
Antworten mit Zitat
Benutzer-Profile anzeigen
So, ich hab's mal ausprobiert und bin auf folgendes gekommen. Da die Y-Koordinate unter Draw3D ja gespiegelt ist, also mehr bedeutet nach oben, muß bei Atan2 zuerst X und dann Y angegeben werden.

Folgendes Beispiel funktioniert wunderbar:

Code: [AUSKLAPPEN]
Graphics3D 600,600,0,2
SetBuffer BackBuffer()
camera=CreateCamera()

Include "Draw3D.bb"
Origin3D(600,600)

image=LoadImage3D("shoot.png",2)
NativeInit3D()

xp=100
yp=100

ColorN3D(255,255,255,.25,12)

;MAINLOOP
While Not KeyHit(1)

 If MouseHit(1)
  xp=MouseX3D
  yp=MouseY3D
 End If

 winkel#=ATan2(xp-MouseX3D,yp-MouseY3D)
 DrawImage3D(image,xp,yp,0,0,24,24,0,winkel)
 DrawImage3D(image,MouseX3D,MouseY3D,0,0,24,24,0,winkel)

 Line3D(xp,yp,MouseX3D,MouseY3D)

 RenderWorld
 Clear3D()
 Flip
Wend
End

Per Mausklick kannst du noch die Zielposition angeben.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group