Image zur Maus drehen....Längeren weg

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

ToeB

Betreff: Image zur Maus drehen....Längeren weg

BeitragSa, Mai 12, 2007 13:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab für meinen 2D-Spaceshooter ein schiff image:
Code: [AUSKLAPPEN]
Dim ship(360)

Dieses Lade und Rotiere es, sodass es 361 Bilder sind.
Jetzt hab ich dass mit dem Winkel (Maus) :
Code: [AUSKLAPPEN]
w = -ATan2(MouseX()-schiff_x,MouseY()-schiff_y)+180
If winkel < Abs(w) Then winkel = winkel + 10
If winkel > Abs(w) Then winkel = winkel - 10

Gemalt wird das schiff so :
Code: [AUSKLAPPEN]
DrawImage ship(winkel),schiff_x,schiff_y

Dieser code bewirkt, dass sich das Image langsam zur maus dreht.
Jetzt sind die winkel aber so eingeteilt :
Zitat:
360/0/1

Ich will damit sagen dass 360 und 1 neben einander liegen und wenn ich jetzt den Mauswinkel auf 1 und "winkel" auf 360 dann geht macht der folgendes :Zitat:
360=>350=>340,... => 1
Dass ist aber doof, weil der könnte ja sich direct so drehen : Zitat:
360=>0=>1

Wie kann ich das machen dass erst geprüft wird, was kürzer ist : Mit minus rechenen oder mit plus.

thx und mfg
Crack
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Mai 12, 2007 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
mit ein bischen suchen habe ich das von mir gefunden

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
    Text 500 ,500," Berechne Panzer : " + z
    If z Mod 10 = 0 Then Flip
    Cls
Next

x = 400 : y = 30 ; damit der zielpunkt zu sehen ist

Repeat
    If MouseDown (1) Then
        x = MouseX ()
        Y = MouseY ()   ;Winkel bezieht sich auf den Panzer
        winkel = Objekt_richtung_grad (x,y ,400 ,300)
    End If
    posPanzer = (posPanzer + drehAufZiel (pospanzer,winkel) + 360) Mod 360
    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
    grad = (grad + 360) Mod 360
    Return grad
End Function

Function drehAufZiel (pospanzer,winkel)
    If posPanzer > Winkel Then
        If posPanzer - 180 < Winkel Then Return - 1
     Else
        If posPanzer + 180 < Winkel Then Return - 1
    End If
    Return 1
End Function

Die Function drehAufZiel ist das Herzstück sozusagen
[BB2D | BB3D | BB+]
 

$tankY

BeitragSa, Mai 12, 2007 17:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist total überflüssig 361 (!) Bilder zu erstellen, 359 Reichen völlig, wobei 0 360 entspricht.

ToeB

BeitragSa, Mai 12, 2007 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Heyy, cool danke ! Du hast mir sehr geholfen !!

Very Happy

@$tankY :

Doch dass hab ich extra so gemacht wegen des winkels...(Maus winkels)


~Edit~
@Rallimen :

Wofür steht denn das "pospanzer" ??
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Mai 12, 2007 18:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Pospanzer ist der Winkel des Panzers und Winkel ist der wohin er sich drehen soll
[BB2D | BB3D | BB+]

ToeB

BeitragSa, Mai 12, 2007 18:13
Antworten mit Zitat
Benutzer-Profile anzeigen
ja hab ich auch bemerkt (aber leider erst dann als der Threat schon geschrieben war ... Sad )

trotzdem danke für den Code ! Der hat mir sehr weiter geholfen !


~EDIT~

Nochmal ne frage Embarassed ...
Wie kann ich das ganze so übertragen, dass ich das auch ohne Function machen kann, weil mit Function ruckkelt dass dann immer so, wenn mein schiff den winkel der maus "getroffen" hat...
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Rallimen

Sieger des 30-EUR-Wettbewerbs

Betreff: rad

BeitragSo, Mai 13, 2007 0:41
Antworten mit Zitat
Benutzer-Profile anzeigen
das liegt an deiner 10Grad Begrenzung!!
Einfach wenn Gradisstanz kleiner 10 then funktion oder so....
[BB2D | BB3D | BB+]
 

Beatenvoy

BeitragSo, Mai 13, 2007 0:57
Antworten mit Zitat
Benutzer-Profile anzeigen
schau das mal an !


Code: [AUSKLAPPEN]
Mod((Atan(yBild0 - yBild1,xBild0 -xBild1)+360),360)

ToeB

BeitragSo, Mai 13, 2007 15:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Beatenvoy hat Folgendes geschrieben:
schau das mal an !


Code: [AUSKLAPPEN]
Mod((Atan(yBild0 - yBild1,xBild0 -xBild1)+360),360)



hää ? Was soll ich denn damit ??

thx und mfg
Crack
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Silver_Knee

BeitragSo, Mai 13, 2007 19:31
Antworten mit Zitat
Benutzer-Profile anzeigen
keine ahnung aber die syntx ist falsch:
(ATan(yBild0 - yBild1,xBild0 -xBild1)+360) mod 360

Und das ganze gibt den winkel ATan(...) auf einer skala von 0 bis 360 zurück

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group