Bild in Richtung eines anderen drehen!

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

ke^kx

Betreff: Bild in Richtung eines anderen drehen!

BeitragDi, Nov 16, 2004 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich benutze ein Bild, dass man in 8 Richtungen drehen kann und habe schon dinge wie vorwärtsfahren usw dabei. Mein Problem ist aber, dass ich für die Gegner eine Funktion benötige mir der ich das Bild in Richtung des Spielers drehen kann.
Was mir fehlt ist eigentlich der Ansatz, denn auf den bin ich auch nach tagelangen festhängen nicht gekommen. Am besten wäre eigentlich eine Formel (ich denke mal, dass die mit Cos und Sin ist, hab aber davon keine Ahnung^^) mit der man dann auch 360 Wege einbauen kann.

Danke schonmal für eure Hilfe,
Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM

Hubsi

BeitragDi, Nov 16, 2004 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Const speed=2

Graphics 640,480,16,1
SetBuffer BackBuffer()

While Not KeyHit(1)
Cls
Color 255,0,0
Oval 315,235,10,10,0
Color 0,255,0
Oval MouseX(),MouseY(),10,10,0
w#=ATan2(320-MouseX(),240-MouseY())+180
Text 100,100,"Winkel: "+w#
If KeyDown(57) ; Bewegen
   MoveMouse MouseX()-Sin(w#)*speed,MouseY()-Cos(w#)*speed
EndIf

Flip
Wend
End
Edit: Bug ausgebessert. Ich musste das auch eben erst durch probieren rausfinden, aber jetzt klappts Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

eXceptION

BeitragDi, Nov 16, 2004 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
winkel# = ATan2(y2 - y1, x2 - x1)
bildframe% = winkel# * anzahlframes% / 360
Norweger...

Spreche aber verdammt gut 8086

Hubsi

BeitragDi, Nov 16, 2004 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
eXceptION hat Folgendes geschrieben:
Code: [AUSKLAPPEN]
winkel# = ATan2(y2 - y1, x2 - x1)
bildframe% = winkel# * anzahlframes% / 360
Das wird Probleme geben da winkel# hier einen Wert zwischen -180.0 und 180.0 übergeben wird Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

eXceptION

BeitragDi, Nov 16, 2004 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
wie auch immer... Razz
Code: [AUSKLAPPEN]
winkel# = ATan2(y2 - y1, x2 - x1) + 180
Norweger...

Spreche aber verdammt gut 8086

DA

BeitragDi, Nov 16, 2004 23:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich will ja eigentlich nicht stören, aber ich hätte da noch eine kleine frage zu Hubsis code.

Hubsi hat Folgendes geschrieben:

Code: [AUSKLAPPEN]
w#=ATan2(320-MouseX(),240-MouseY())+180


Wieso die 180° am ende?


Thx
DarkAngel
Deutscher Blitz Basic Chat
 

hot-bit

Gast

BeitragDi, Nov 16, 2004 23:05
Antworten mit Zitat
Hoi..

Warum probierst du nicht einfach mal aus, was passiert, wenn du die 180 weglässt. Oder wenn du andere Werte dafür einsetzt ?

DADURCH könnte dir vielleicht der Knopf aufgehen Smile

War nicht böse gemeint. Aber durchs Probieren lernt man sehr viel ...

Toni

DA

BeitragDi, Nov 16, 2004 23:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Edit: Habe shit geschrieben, wollte eigentlich was ganz anderes schreiben.

Also, ich habe die 180° verändert, und habe auch schon sofort den unterschied bemerkt. Aber warum die 180°?
Ich sehe den unterschied nur im Kopf verstehe ich es nicht!
So, endlich mein Gott war das schwierig Laughing .

Thx
DarkAngel
Deutscher Blitz Basic Chat

D2006

Administrator

BeitragMi, Nov 17, 2004 0:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

https://www.blitzforum.de/viewtopic.php?t=6509

MfG
D2006

PS: 2 Leute sollten sich jetzt angesprochen fühlen ...

eXceptION

BeitragMi, Nov 17, 2004 1:00
Antworten mit Zitat
Benutzer-Profile anzeigen
ein zirkel geht vom -PI zu PI in radianen...

in graden wird das DIREKT übersetzt, -180 zu 180...

wenn wir +180 machen, wird es 0 zu 360...
Norweger...

Spreche aber verdammt gut 8086
 

ke^kx

BeitragMi, Nov 17, 2004 17:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke @ll, dass ihr mir so schnell geholfen habt.

@D2006:
Beziehst du dich auf die Lösungsvorschläge oder auf die Noops?

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM
 

ke^kx

BeitragDo, Nov 18, 2004 19:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach, shit. Ich bin doch zu blöd um es hinzubekommen (bitte mich nicht als Noop abtuen, nur weil ich die Winkelfunktionen noch nicht in Mathe hatte).
Ich versuch es bis jetzt so zu regeln:
Pseudo:
Code: [AUSKLAPPEN]

w# = ATan2(x1 - x2, y1 - y2) + 180
      
If w# = Winkel1
   Goto auserhalb
ElseIf w# > Winkel1
   Drehen_links ()      
ElseIf w# < Winkel1
   Drehen_rechts ()
EndIf

.auserhalb


Weil schon das mit dem Hindrehen noch nicht funzte hab ich noch das hier eingefügt:

Code: [AUSKLAPPEN]

Robo(RoboA, 10) = w#


Aber auch nachdem ich sehr häufig die Werte verändert hatte funktionierte es nicht. (Ich benutze jetzt doch 360°)

Bitte helft mir wieder,
Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM

simi

BeitragDo, Nov 18, 2004 21:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiss nicht, wie du das genau meinst, aber vielleicht hilft dir das:
Code: [AUSKLAPPEN]

Graphics 640,480,32,2
Global x#,y#
SetBuffer BackBuffer()
While Not(KeyHit(1))
     
       Oval 200,200,200,200,0
      mx=MouseX()
      my=MouseY()
      Rect mx,my,10,10
      mix=300-mx
      miy=300-my
      winkel = ATan2(miy,mix)
      x= 300- Cos(winkel)*100
      y= 300- Sin(winkel)*100
      Text 10,10,winkel
      Oval x,y,10,10,1
   Flip
   Cls
Wend
End

End


Sonst, wenn sich der Spieler nicht auf einen Ruck drehen soll, würde ich auch mit sin/cos machen, dass er sich auf einem kleinen Kreis bewegt, und wenn er dann im Richtigen Winkel ist, auf das Objekt zuläuft...

cu simi
 

ke^kx

BeitragDo, Nov 18, 2004 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ne, das meine ich auch nicht.
Noch mal genauer:
Ich habe ein Bild, dass lässt sich in 360 Richtungen drehen. Was ich jetzt möchte ist, dass ich das Bild zu einem anderen drehe:

<< ()
<< ()

Die Pfeile stehen für die jetztige Blickrichtung, die Klammern für das Bild in dessen Richtung das andere gedreht werden soll.
Also soll es hinterher so aussehen:

>> ()
>> ()

Wenn es einen speziellen Befehl in 3D dafür gibt könnt ich den auch benutzen. Wenn ihr eine Formel wisst, wäre das noch besser.

Vielen Dank im voraus,
Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM

Hubsi

BeitragDo, Nov 18, 2004 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit Atan2() den Winkel berechnen, ist dieser größer 180 nach rechts drehen, ist er kleiner entsprechend nach links bis es +/- einer gewissen Toleranz passt. Code siehe oben Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

simi

BeitragDo, Nov 18, 2004 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
2. Versuch: Vielleicht so:
Code: [AUSKLAPPEN]

Graphics 640,480,32,2
Global x#,y#
Image = CreateImage(200,200,360)
Color 255,255,255
For z = 0 To 359
   SetBuffer ImageBuffer(image,z)
   x= 100+Cos(z)*100
   y= 100+Sin(z)*100
   Oval x,y,10,10,1
Next
SetBuffer BackBuffer()
While Not(KeyHit(1))
      
       Oval 200,200,200,200,0
      mx=MouseX()
      my=MouseY()
      Rect mx,my,10,10
      mix=300-mx
      miy=300-my
      winkel = ATan2(miy,mix)
      DrawImage image,200,200,winkel+179
      Flip
   Cls
Wend
End


wird jetzt durch ein Bild gemacht....
(Weiss, ein bisschen gross Wink )

cu simi
 

ke^kx

BeitragFr, Nov 19, 2004 17:14
Antworten mit Zitat
Benutzer-Profile anzeigen
So hab ich es versucht, aber es hat noch nicht geklappt. Ich probiers noch mal weiter.

Jiriki

[Edit]
@Simi:
Es geht nicht um das Bild , sondern darum, wie ich ein Bild in die gewünschte Richtung drehen kann.
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragFr, Nov 19, 2004 18:03
Antworten mit Zitat
Benutzer-Profile anzeigen
schau mal hier nach da ist ein komplettes beispiel dabei
www.blitzforum.de/viewtopic.php?t=353
[BB2D | BB3D | BB+]
 

ke^kx

BeitragFr, Nov 19, 2004 18:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, funktioniert, einwandfrei. Endlich kann ich weitermachen^^

Danke an alle, die hier gepostet habe,
Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group