08/15 GTA Steuerung Panzer

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Rallimen

Sieger des 30-EUR-Wettbewerbs

Betreff: 08/15 GTA Steuerung Panzer

BeitragMi, Feb 25, 2004 9:54
Antworten mit Zitat
Benutzer-Profile anzeigen
habe absichtlich das erstmal mit einem Panzer gemacht ,
da dieser ja auf der Stelle drehen kann !
die Beschleunigung ist auch noch linear, aber für Anfänger sollte es zu gebrauchen sein!

BlitzBasic: [AUSKLAPPEN]

Graphics 800,600,16,1
Const ESC = 1,Hoch= 200,Runter=208,Links = 203,Rechts=205 , Space = 57
Const Gas#= 0.06, Traegheit#=0.02, Speedmax=3,Lenkspeed = 2
Const debugmode = 1
Dim Panzer (360);PanzerGrafik_berechnen max 360 Einzelbilder <
Panzer(0) = CreateImage (40,20)
Rect 20,9,20,2:Rect 0,0,20,20,1 : GrabImage Panzer(0),0,0
For z = 0 To 359 Step Lenkspeed
panzer(z) = CopyImage (Panzer(0))
RotateImage panzer(z),z
HandleImage Panzer(0),10,10
Next;PanzerGrafik_berechnen max 360 Einzelbilder ......fertig

;startposition
positionX# = 400 : positionY# = 300

SetBuffer BackBuffer()
While Not KeyDown(ESC);#######################################
; tasten abfrage
Grad=(Grad+(KeyDown(Rechts)-KeyDown(Links))*Lenkspeed+360)Mod 360
Speed#=Speed#+(KeyDown( Hoch)-KeyDown(Runter))*Gas#
If (KeyDown(Hoch)+KeyDown(Runter)) = 0 Then
If Speed# > 0 Then Speed# = Speed# - Traegheit# ;langsam werden
If Speed# < 0 Then Speed# = Speed# + Traegheit# ;langsam werden
If Speed# < Traegheit# And Speed# > (Traegheit#*-1) Then Speed# = 0; völliger Stillstand
End If
If speed#> Speedmax Then speed#= Speedmax
If speed#< (Speedmax*-1) Then speed#= (Speedmax*-1)

;Position ändern Panzer
positionX# = positionX# + Cos(Grad) *speed#
positionY# = positionY# + Sin(Grad) *speed#

DrawImage Panzer(Grad),Int(positionX#),Int(positionY#)
;####################################################
If debugmode Then Gosub Debug
Flip : Cls:
bwx= bwx +1:If MilliSecs() > oltZeit + 999Then BW = bwx:bwx = 0: oltZeit= MilliSecs() ;FPS
Wend :End;#################################################
.Debug
Text 10,10,"FPS: "+BW:
Text 10,30 ,"Speed: "+Speed#
Text 10,50 ,"Lenkspeed: " + Lenkspeed
Text 10,70 ,"Grad: " +Grad
Return


Kopieren >>> Probieren

Mike Nike

BeitragMi, Feb 25, 2004 13:17
Antworten mit Zitat
Benutzer-Profile anzeigen
if speed#<0 then
solltest du die steuerung nochmals überdenken, denn ein Panzer hat da doch das gleiche "Lenksystem", wie ähnliche andere Fahrzeuge, wie z.B. ein Auto.
Wenn man links/rechts lenkt und rückwärts fährt - da musst du links und rechts vertauschen...
Oder das Ganze war Absicht von dir Shocked
..where the only limit is your imagination.

Travis

BeitragMi, Feb 25, 2004 13:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe diese Änderung mal durchgeführt. Außerdem fährt der Panzer jetzt nicht mehr aus dem Bild heraus, sondern taucht auf der anderen Seite wieder auf.

BlitzBasic: [AUSKLAPPEN]

Graphics 800,600,16,1
Const ESC = 1,Hoch= 200,Runter=208,Links = 203,Rechts=205 , Space = 57
Const Gas#= 0.06, Traegheit#=0.02, Speedmax=5,Lenkspeed = 2
Const debugmode = 1
Dim Panzer (360);PanzerGrafik_berechnen max 360 Einzelbilder <
Panzer(0) = CreateImage (40,20)
Rect 20,9,20,2:Rect 0,0,20,20,1 : GrabImage Panzer(0),0,0
For z = 0 To 359 Step 1
panzer(z) = CopyImage (Panzer(0))
RotateImage panzer(z),z
HandleImage Panzer(0),10,10
Next;PanzerGrafik_berechnen max 360 Einzelbilder ......fertig

;startposition
positionX# = 400 : positionY# = 300

SetBuffer BackBuffer()
While Not KeyDown(ESC);#######################################
; tasten abfrage
If speed# =< 0 Then ; rückwärts
If KeyDown(links) Then Grad = Grad + lenkspeed
If KeyDown(rechts) Then Grad = Grad - lenkspeed
EndIf
If speed# > 0 Then ; vorwärts
If KeyDown(links) Then Grad = Grad - lenkspeed
If KeyDown(rechts) Then Grad = Grad + lenkspeed
EndIf
If Grad > 359 Then Grad = 0
If Grad < 0 Then Grad = 359
Speed#=Speed#+(KeyDown( Hoch)-KeyDown(Runter))*Gas#
If (KeyDown(Hoch)+KeyDown(Runter)) = 0 Then
If Speed# > 0 Then Speed# = Speed# - Traegheit# ;langsam werden
If Speed# < 0 Then Speed# = Speed# + Traegheit# ;langsam werden
If Speed# < Traegheit# And Speed# > (Traegheit#*-1) Then Speed# = 0; völliger Stillstand
End If
If speed#> Speedmax Then speed#= Speedmax
If speed#< (Speedmax*-1) Then speed#= (Speedmax*-1)

;Position ändern Panzer
positionX# = positionX# + Cos(Grad) *speed#
positionY# = positionY# + Sin(Grad) *speed#
If PositionY# > 600 Then PositionY# = 0
If PositionY# < 0 Then PositionY# = 600
If PositionX# > 800 Then PositionX# = 0
If PositionX# < 0 Then PositionX# = 800


DrawImage Panzer(Grad),Int(positionX#),Int(positionY#)
;####################################################
If debugmode Then Gosub Debug
Flip : Cls:
bwx= bwx +1:If MilliSecs() > oltZeit + 999Then BW = bwx:bwx = 0: oltZeit= MilliSecs() ;FPS
Wend :End;#################################################
.Debug
Text 10,10,"FPS: "+BW:
Text 10,30 ,"Speed: "+Speed#
Text 10,50 ,"Lenkspeed: " + Lenkspeed
Text 10,70 ,"Grad: " +Grad
Return
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragFr, Feb 27, 2004 20:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
habt natürlich recht...
ist mir garnicht aufgefallen....hatte da grade nicht viel Zeit zum testen, weil ich auf Seminar muste, sonst wäre mir der Fehler bestimmt noch aufgefallen ...
Danke!

@ Travis
hab den Code aber nochmal leicht abgeändert damit sich der Panzer beim Stillstand auch richtig verhält.. da war noch ein miniBug drin
BlitzBasic: [AUSKLAPPEN]
Graphics 800,600,16,1 
Const ESC = 1,Hoch= 200,Runter=208,Links = 203,Rechts=205 , Space = 57
Const Gas#= 0.06, Traegheit#=0.02, Speedmax=3
Const Lenkspeed = 2; hier nur durch 360 teilbares ; 1,2,3,4,5,6,8,9,10,12,15,18,usw.
Const debugmode = 1
Dim Panzer (360);PanzerGrafik_berechnen max 360 Einzelbilder <
Panzer(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
For z = 0 To 359 Step Lenkspeed
panzer(z) = CopyImage (Panzer(0))
RotateImage panzer(z),z
HandleImage Panzer(0),10,10
Next;PanzerGrafik_berechnen max 360 Einzelbilder ......fertig

;startposition
positionX# = 400 : positionY# = 300

SetBuffer BackBuffer()
While Not KeyDown(ESC);#######################################
; tasten abfrage
If speed# => 0 Then
Grad=(Grad+(KeyDown(Rechts)-KeyDown(Links))*Lenkspeed+360)Mod 360
Else
Grad=(Grad+(KeyDown(Links)-KeyDown(Rechts))*Lenkspeed+360)Mod 360
End If


Speed#=Speed#+(KeyDown( Hoch)-KeyDown(Runter))*Gas#

If (KeyDown(Hoch)+KeyDown(Runter)) = 0 Then
If Speed# > 0 Then Speed# = Speed# - Traegheit# ;langsam werden
If Speed# < 0 Then Speed# = Speed# + Traegheit# ;langsam werden
If Speed# < Traegheit# And Speed# > (Traegheit#*-1) Then Speed# = 0; völliger Stillstand
End If
If speed#> Speedmax Then speed#= Speedmax
If speed#< (Speedmax*-1) Then speed#= (Speedmax*-1)

;Position ändern Panzer
positionX# = positionX# + Cos(Grad) *speed#
positionY# = positionY# + Sin(Grad) *speed#

PositionY# = (PositionY#+GraphicsHeight ()) Mod GraphicsHeight()
PositionX# = (PositionX#+GraphicsWidth ()) Mod GraphicsWidth ()

DrawImage Panzer(Grad),Int(positionX#),Int(positionY#)
;####################################################
If debugmode Then Gosub Debug
Flip : Cls:
bwx= bwx +1:If MilliSecs() > oltZeit + 999Then BW = bwx:bwx = 0: oltZeit= MilliSecs() ;FPS
Wend :End;#################################################
.Debug
Text 10,10,"FPS: "+BW:
Text 10,30 ,"Speed: "+Speed#
Text 10,50 ,"Lenkspeed: " + Lenkspeed
Text 10,70 ,"Grad: " +Grad
Return
[BB2D | BB3D | BB+]
 

x.Force

BeitragSa, März 06, 2004 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke so eine Steuerung kann ich gebrauchen.
Habe jetzt nur Probs wollte den Panzer schiessen lassen hat aber nicht geklappt Embarassed Embarassed aber egal Smile

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, März 08, 2004 0:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt wird scharf geschossen mit SpaceBlitzBasic: [AUSKLAPPEN]
Graphics 800,600,16,2 
Const ESC = 1,Hoch= 200,Runter=208,Links = 203,Rechts=205 , Space = 57
Const Gas#= 0.06, Traegheit#=0.02, Speedmax=3
Const Lenkspeed = 2; hier nur durch 360 teilbares ; 1,2,3,4,5,6,8,9,10,12,15,18,usw.
Const debugmode = 1 :
Global Maxschuss
Dim Schuss#(15,3)
Dim Panzer (360);PanzerGrafik_berechnen max 360 Einzelbilder <
Panzer(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
For z = 0 To 359 Step Lenkspeed
panzer(z) = CopyImage (Panzer(0))
RotateImage panzer(z),z
HandleImage Panzer(0),10,10
Next;PanzerGrafik_berechnen max 360 Einzelbilder ......fertig

;startposition
positionX# = 400 : positionY# = 300

SetBuffer BackBuffer()
While Not KeyDown(ESC);#######################################
; tasten abfrage
If KeyHit(Space) Then schuss_starten(PositionX#,PositionY#,Grad )

If speed# => 0 Then
Grad=(Grad+(KeyDown(Rechts)-KeyDown(Links))*Lenkspeed+360)Mod 360
Else
Grad=(Grad+(KeyDown(Links)-KeyDown(Rechts))*Lenkspeed+360)Mod 360
End If

Speed#=Speed#+(KeyDown( Hoch)-KeyDown(Runter))*Gas#

If (KeyDown(Hoch)+KeyDown(Runter)) = 0 Then
If Speed# > 0 Then Speed# = Speed# - Traegheit# ;langsam werden
If Speed# < 0 Then Speed# = Speed# + Traegheit# ;langsam werden
If Speed# < Traegheit# And Speed# > (Traegheit#*-1) Then Speed# = 0; völliger Stillstand
End If
If speed#> Speedmax Then speed#= Speedmax
If speed#< (Speedmax*-1) Then speed#= (Speedmax*-1)

;Position ändern Panzer
positionX# = positionX# + Cos(Grad) *speed#
positionY# = positionY# + Sin(Grad) *speed#

PositionY# = (PositionY#+GraphicsHeight()) Mod GraphicsHeight()
PositionX# = (PositionX#+GraphicsWidth ()) Mod GraphicsWidth ()

DrawImage Panzer(Grad),Int(positionX#),Int(positionY#)
Schuss_malen()
;####################################################
If debugmode Then Gosub Debug
Flip : Cls:
bwx= bwx +1:If MilliSecs() > oltZeit + 999Then BW = bwx:bwx = 0: oltZeit= MilliSecs() ;FPS
Wend :End;#################################################



Function schuss_starten (x_pos#,y_pos#,grad)
For t= 0 To 15
If Schuss#(t,0)= 0 Then ; freien Schuss gefunden ;bzw Leere variable
Schuss#(t,0) = 1; schuss aktivieren
Schuss#(t,1) = x_pos# + Cos(grad)*20
Schuss#(t,2) = y_pos# + Sin(grad)*20
Schuss#(t,3) = grad ;welche Waffe es ist
Exit ;schleife verlassen da eine gefunden wurde
End If
Next
End Function


Function Schuss_malen() ; alle malen
If debugmode Then Maxschuss = 0
For t= 0 To 15
If Schuss#(t,0) = 1 Then ; Wenn aktiver Schuss dann malen
Schuss#(t,1) = Schuss#(t,1)+ Cos(Schuss#(t,3))*8
Schuss#(t,2) = Schuss#(t,2)+ Sin(Schuss#(t,3))*8
Rect Int(Schuss#(t,1)-1),Int(Schuss#(t,2)-1),2,2,1
If Schuss#(t,1)> 800 Or Schuss#(t,1) < 0 Or Schuss#(t,2)> 600 Or Schuss#(t,2) < 0 Then
Schuss#(t,0) = 0
End If
If debugmode Then Maxschuss = Maxschuss +1
End If
Next
End Function

.Debug
Text 10,10,"FPS: " + BW
Text 10,30,"Speed: " + Speed#
Text 10,50,"Lenkspeed: " + Lenkspeed
Text 10,70,"Grad: " + Grad
Text 10,90,"geschosse Max:" + Maxschuss
Return
[BB2D | BB3D | BB+]
 

x.Force

BeitragMo, März 08, 2004 21:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke hast mich ein ganzes Stück weitergebracht in meinem "Projekt" Wink

Unplugged

BeitragMo, März 08, 2004 22:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie macht man aus diesem Panzer nun einen Panzer, den man mit Paint malt? Sprich: Wie bringe ich ein Bild dazu sich genauso, wie dieser Panzer in 360 Richtungen zu drehen? Kann jemand den Code posten?
User posted image
 

x.Force

BeitragDi, März 09, 2004 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit ein bisschen überlegen kommt man da selbst drauf, (ich programmier damit erst eine woche O_o)
Teil 1:
BlitzBasic: [AUSKLAPPEN]

Dim Panzer (360) ; 360 für die Winkel
Panzer(0) = LoadImage ("Panzer.bmp")
For z = 0 To 359 Step Lenkspeed
panzer(z) = CopyImage (Panzer(0))
RotateImage panzer(z),z
MidHandle Panzer(0) ; Setzt Mittelpunkt der Grafik
Next


Bitte nicht schlagen wenn ich was falsch sage O_o

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDi, März 09, 2004 18:42
Antworten mit Zitat
Benutzer-Profile anzeigen
also das ist doch total einfach
ersetzteBlitzBasic: [AUSKLAPPEN]
Panzer(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

durch BlitzBasic: [AUSKLAPPEN]
Panzer(0) = LoadImage ("bild.BMP")
und dieser BlitzBasic: [AUSKLAPPEN]
HandleImage Panzer(0),10,10 
muss dann noch auf den passenden drehpunkt gesetzt werden, falls die grafik abweicht von der Größe
wenn das bild größer ist sollte hier auch noch der wert angepasst werdenBlitzBasic: [AUSKLAPPEN]
    Schuss#(t,1) = x_pos# + Cos(grad)*20 ;<<< *20
Schuss#(t,2) = y_pos# + Sin(grad)*20 ;<<< *20
denn dieser setzt den schuss direkt vor das Rohr

das sollte reichen, denn ich wollte hier kein komplettes Spiel coden!
[BB2D | BB3D | BB+]

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group