Wikel auf verschiebarer Map

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

ToeB

Betreff: Wikel auf verschiebarer Map

BeitragMo, Mai 07, 2007 16:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie berechne ich den winkel für die "Kanone", so dass sie sich immer dem schiff zuwendet ?

Code: [AUSKLAPPEN]

Graphics 1014,768,16,2
SetBuffer BackBuffer()

;Vaiablen
Global MapScrollX
Global MapScrollY
Global winkel=1,w#
Global speed#
Global schiff_x=500 ;x-pos des schiffs
Global schiff_y=330 ;y-pos des schiffs
Global Steuerungs_mode = 2;1 = Tasten;2 = Maus
Dim ship(360)
Dim ship_r(360)
Dim schuss(360)
Dim Kanone(360)

Global schiff=LoadImage("gfx\ship.png")
MaskImage schiff,255,0,255
MidHandle schiff

Global schiff_r = LoadImage("gfx\ship_r.png")
MaskImage schiff_r,255,0,255
MidHandle schiff_r

Global schusspic=LoadImage("gfx\schuss.png")
MaskImage schusspic,255,0,255

Global Stars = LoadImage("gfx\Stars.png")
MaskImage Stars,1,2,3

Global Zieler = LoadImage("gfx\Zieler.png")
MaskImage Zieler,255,0,255

Global Anzeige = LoadAnimImage("gfx\An.png",38,120,0,2)
MaskImage Anzeige,255,0,255

Global Station = LoadImage("gfx\station1.png")
MaskImage Station,255,0,255

Global Kan = LoadImage("gfx\Kanone.png")
MaskImage Kan,255,0,255
MidHandle Kan
;Global schussSnd = LoadSound("snd\schuss.wav")

TFormFilter 0

For i = 0 To 360
  ship(i) = CopyImage(schiff)
    RotateImage ship(i),i
   
  ship_r(i) = CopyImage(schiff_r)
    RotateImage ship_r(i),i
   
  schuss(i) = CopyImage(schusspic)
    RotateImage schuss(i),i
   
  Kanone(i) = CopyImage(Kan)
    RotateImage Kanone(i),i

  Balken(400,300,i)
  Flip
Next
  FreeImage schiff
  FreeImage schusspic
  Cls
Type s
 Field x
 Field y
 Field winkel
 Field speed#
End Type

Global s.s
Global ms_shoot = MilliSecs()
Global shootTime# = 0.2
Global redms = MilliSecs()
Global redt# = 1
Global redwaitms = MilliSecs()
Global redwaittime = 2
Repeat

TileImage Stars,-MapscrollX,-MapScrollY

If KeyHit(2) Then Steuerungs_mode = 1
If KeyHit(3) Then Steuerungs_mode = 2

If Steuerungs_mode = 2 Then
  If speed < 1 And KeyDown(17)=0Then speed = 0
  If KeyDown(17) Then
    speed = speed + 0.15
  Else
    If speed > 0 Then speed = speed - 0.25
  EndIf
  If KeyDown(31) Then
    If speed > 0 Then speed = speed - 0.3
  EndIf
  If speed > 10 Then speed = 10
  w = -ATan2(MouseX()-schiff_x,MouseY()-schiff_y)+180
    winkel = Abs(w)
  If MouseDown(1) Then
    If ms_shoot <= MilliSecs()-(shootTime*1000) Then
      ;PlaySound schussSnd
      s.s=New s
        s\x = ((MapScrollX)+schiff_x)+Sin(winkel)*-7
        s\y = ((MapscrollY)+schiff_y)-Cos(winkel)*-7
        s\winkel = winkel+180
        s\speed = 20
      ms_shoot = MilliSecs()
    EndIf
  EndIf
    DrawImage Zieler,MouseX()-17,MouseY()-17
EndIf

If Steuerungs_mode = 1 Then
  If speed < 1 And KeyDown(200)=0Then speed = 0
  If KeyDown(200) Then
    speed = speed + 0.15
  Else
    If speed > 0 Then speed = speed - 0.25
  EndIf
  If KeyDown(208) Then
    If speed > 0 Then speed = speed - 0.3
  EndIf
  If speed > 10 Then speed = 10
  If KeyDown(203) Then winkel = winkel - Int(speed)
  If KeyDown(205) Then winkel = winkel + Int(speed)
    If winkel < 0 Then winkel = 360
    If winkel > 360 Then winkel = 0
  If KeyDown(57) Then
    If ms_shoot <= MilliSecs()-(shootTime*1000) Then
      ;PlaySound schussSnd
      s.s=New s
        s\x = ((MapScrollX)+schiff_x)+Sin(winkel)*-7
        s\y = ((MapscrollY)+schiff_y)-Cos(winkel)*-7
        s\winkel = winkel+180
        s\speed = 20
      ms_shoot = MilliSecs()
    EndIf
  EndIf
    DrawImage Zieler,(schiff_x+Sin(winkel)*200)-16,(schiff_y-Cos(winkel)*200)-16
EndIf

MapScrollX = MapScrollX + Sin(winkel) * speed#
MapScrollY = MapScrollY - Cos(winkel) * speed#
DrawImage Station,900-MapScrollX,900-MapScrollY
DrawImage Kanone(www),100,100
DrawImage ship(winkel),schiff_x,schiff_y
;If Not redfinish_ms <= MilliSecs() - redfinishtime Then
If redms <= MilliSecs() - (redt*1000) Then
DrawImage ship_r(winkel),schiff_x,schiff_y
If redwait <= MilliSecs() - (redwaittime*1000) Then
redms = MilliSecs()
redwait = MilliSecs()
EndIf
EndIf
;EndIf


For s.s=Each s
  s\x = s\x + Sin(-s\winkel)*s\speed
  s\y = s\y + Cos(-s\winkel)*s\speed
  DrawImage schuss(s\winkel-180),(-MapScrollX)+s\x,(-MapScrollY)+s\y
Next

  Text 1,1 ,"Winkel des Schiffes : "+winkel
If Steuerungs_mode = 1 Then
  Text 1,13,"Steuerung : Pfeiltasten Links/Rechts = Zielen:Pfeiltasten Oben/unten=fahren/bremsen:Leertaste = feuern"
EndIf
If Steuerungs_mode = 2 Then
  Text 1,13,"Steuerung : Maus = Zielen/Feuern: W/S = fahren/bremsen"
EndIf

DrawImage Anzeige,100,650,0
DrawImageRect Anzeige,100,650,0,0,38,120-speed*12,1
Flip
Cls
Until KeyHit(1)
End

Function Balken(x,y,fs)
Local width  =  ImageWidth(Anzeige)
Local height = ImageHeight(Anzeige)
Local plus# = width/Float(100)
DrawImage Anzeige,x,y,0
DrawImageRect Anzeige,x,y,0,0,width,120-(Float(plus#)*fs),1
End Function





Information : Das schiffimage zeigt mit der Spitze nach oben, und das Kanonenimage zeigt mit dem Kanonenrohr nach oben...
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!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Mai 07, 2007 17:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Bin grad bei der Arbeit, so kann ich hier kein ausführlichen Bericht schreiben, aber versuche es mal mit ql:Atan2 . Dieses sollte helfen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

ToeB

BeitragMo, Mai 07, 2007 21:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja ich weiß das auch... Ich hab ja schon die winkelberechnung der Maus für die Schüsse etc. mit Atan2 gemacht. Aba ich grig das auf der Map net hin....
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!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group