Bild richtig zu Maus drehen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

juse4pro

Betreff: Bild richtig zu Maus drehen

BeitragMi, Mai 21, 2008 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,

mein kleines problem ist blöd zu erklären:
ich will, dass sich das raumschiff zur maus dreht, aber nicht synchron.

ich zeig mal denCode: [AUSKLAPPEN]

Function UpdateGame()
   While Not KeyHit(1) Or finish=1
      DrawImage img_ships(0,var_pl_dir),var_pl_x,var_pl_y
      var_pl_x=320:var_pl_y=320
      Line var_pl_x,var_pl_y,var_mx,var_my
      Text 5,5,degree#+"   "+var_pl_dir
      
      Flip:Cls
      
      
      
      var_mx=MouseX()
      var_my=MouseY()
      
      degree#=ATan2(var_pl_y-var_my,var_pl_x-var_mx)+180
      If var_pl_dir>degree
         var_pl_dir=var_pl_dir-1
      ElseIf var_pl_dir<degree
         var_pl_dir=var_pl_dir+1
      EndIf
      
      
      If var_pl_dir>359
         var_pl_dir=0
      EndIf
   Wend
End Function


übrigens: das bild sieht ungefähr so aus:
#
||
||

die # ist die nasenspitze

plz big help
Portfolio |LinkedIn |XING

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Mai 21, 2008 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuch es mal so....
Code: [AUSKLAPPEN]
degree# = ATan2 (var_pl_y - var_my,var_pl_x - var_mx) + 180
If var_pl_dir <> degree
    If var_pl_dir > degree
        If var_pl_dir - 180 < degree# then
            var_pl_dir = var_pl_dir - 1
         else
            var_pl_dir = var_pl_dir + 1
        endif
     else
        If var_pl_dir + 180 < degree# then
            var_pl_dir = var_pl_dir - 1
         else
            var_pl_dir = var_pl_dir + 1
        endif
    endif
endif
[BB2D | BB3D | BB+]

juse4pro

BeitragDo, Mai 22, 2008 16:19
Antworten mit Zitat
Benutzer-Profile anzeigen
dann sagt er mir: array index out of bounds...

wieso?
Portfolio |LinkedIn |XING

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDo, Mai 22, 2008 16:46
Antworten mit Zitat
Benutzer-Profile anzeigen
weil dein Bild Index nur von 0 bis <360 geht.
also nach der If noch

Code: [AUSKLAPPEN]
var_pl_dir =(var_pl_dir+360) mod 360

damit ist sichergestellt das es immer im Bereich ist
[BB2D | BB3D | BB+]

juse4pro

BeitragDo, Mai 22, 2008 18:23
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, es flimmert aber jetzt immer hin und her
Portfolio |LinkedIn |XING

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragFr, Mai 23, 2008 0:33
Antworten mit Zitat
Benutzer-Profile anzeigen
was heißt flimmert immer ?

nomal sollte sich dein bild immer richtig zum Ziel bewegen und flimmern sollte es auch nicht,
oder hast du den Backbuffer() nicht initialisiert ?
Beispielcode
Code: [AUSKLAPPEN]

Graphics 800,600,16,2
Dim Panzer(1,360);PanzerGrafik_berechnen max 360 Einzelbilder <
Panzer(0,0) = CreateImage (40,20) ; also nur die erstellen die wirklich gebraucht werden!
Rect 20,9,20,2:Rect 0,0,20,20,1  : GrabImage Panzer(0,0),0,0
For z = 0 To 359
    panzer(0,z) = CopyImage (Panzer(0,0))
    RotateImage panzer(0,z),z
    HandleImage Panzer(0,0),10,10
Next;PanzerGrafik_berechnen max 360 Einzelbilder  ......fertig

Dim FPS(3):FPS(0)= 60 : FPS(0)=CreateTimer(FPS(0))

SetBuffer BackBuffer()
While Not KeyHit(1) Or finish=1
      DrawImage  Panzer(0,var_pl_dir),var_pl_x,var_pl_y
      var_pl_x=320:var_pl_y=320
      Line var_pl_x,var_pl_y,var_mx,var_my
      Text 5,5,degree#+"   "+var_pl_dir
     
      var_mx=MouseX()
      var_my=MouseY()
     
     degree# = ATan2 (var_pl_y - var_my,var_pl_x - var_mx) + 180
If var_pl_dir <> degree
    If var_pl_dir > degree
        If var_pl_dir - 180 < degree# then
            var_pl_dir = var_pl_dir - 1
         else
            var_pl_dir = var_pl_dir + 1
        EndIf
     Else
        If var_pl_dir + 180 < degree# Then
            var_pl_dir = var_pl_dir - 1
         Else
            var_pl_dir = var_pl_dir + 1
        EndIf
    EndIf
EndIf
var_pl_dir =(var_pl_dir+360) Mod 360
   


Text 9,9,"FPS:"+FPS(1):FPS(2)=FPS(2)+1:If MilliSecs()>FPS(3)+999 Then FPS(1)=FPS(2):FPS(2)=0:FPS(3)=MilliSecs()
WaitTimer (FPS(0))
Flip:Cls:Wend:End
[BB2D | BB3D | BB+]

juse4pro

BeitragFr, Mai 23, 2008 15:45
Antworten mit Zitat
Benutzer-Profile anzeigen
ich meine wenn ich den code habe:
Code: [AUSKLAPPEN]
Graphics 800,600,16,2
Dim Panzer(1,360);PanzerGrafik_berechnen max 360 Einzelbilder <
Panzer(0,0) = CreateImage (40,20) ; also nur die erstellen die wirklich gebraucht werden!
Rect 20,9,20,2:Rect 0,0,20,20,1  : GrabImage Panzer(0,0),0,0
For z = 0 To 359
    panzer(0,z) = CopyImage (Panzer(0,0))
    RotateImage panzer(0,z),z
    HandleImage Panzer(0,0),10,10
Next;PanzerGrafik_berechnen max 360 Einzelbilder  ......fertig

Dim FPS(3):FPS(0)= 60 : FPS(0)=CreateTimer(FPS(0))

SetBuffer BackBuffer()
While Not KeyHit(1) Or finish=1
      DrawImage  Panzer(0,var_pl_dir),var_pl_x,var_pl_y
      var_pl_x=320:var_pl_y=320
      Line var_pl_x,var_pl_y,var_mx,var_my
      Text 5,5,degree#+"   "+var_pl_dir
     
      var_mx=MouseX()
      var_my=MouseY()
     
     degree# = ATan2 (var_pl_y - var_my,var_pl_x - var_mx) + 180
If var_pl_dir <> degree
    If var_pl_dir > degree
        If var_pl_dir - 180 < degree# then
            var_pl_dir = var_pl_dir - 8
         else
            var_pl_dir = var_pl_dir + 8
        EndIf
     Else
        If var_pl_dir + 180 < degree# Then
            var_pl_dir = var_pl_dir - 8
         Else
            var_pl_dir = var_pl_dir + 8
        EndIf
    EndIf
EndIf
var_pl_dir =(var_pl_dir+360) Mod 360
   


Text 9,9,"FPS:"+FPS(1):FPS(2)=FPS(2)+1:If MilliSecs()>FPS(3)+999 Then FPS(1)=FPS(2):FPS(2)=0:FPS(3)=MilliSecs()
WaitTimer (FPS(0))
Flip:Cls:Wend:End



das, weil sich die schiffe sonst zu langsam drehen
Portfolio |LinkedIn |XING

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group