CS2D Steuerung

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Stinktier

Betreff: CS2D Steuerung

BeitragSo, Aug 29, 2004 12:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin, moin
Ich programmiere noch nicht allzu lange und habe nun dieses Forum entdeckt.
Ich hab ein paar Tutorials und die Onlinehilfe und ein parr Threads durchforscht.
Allerding hab ich zu diesem Prob nichts gefunden.
Ich hab mir jetzt eine kleine Dim Map erstellt (100, 100) und ein Spieler(mit mehreren Animationen).
Der Spieler ist der Mittelpunkt des Bildschirms(so wie in CS2D).
Ich kann mich mit ihm frei auf der Map bewegen(vorne,rückwärts, rechts, links), aber ihn nicht drehen.
Und ich würde es gern so proggen, das der Spieler sich immer in Richtung Maus dreht(also so wie in CS2D).
Für die Drehung würde ich es so machen wie in den GTA Steuerungs TUTORIALS. Also jede Drehung(1 Grad) in ein Array schreiben.Ich hoffe das ihr das Tutorial kennt und das wisst was ich meine.
Das Rpob ist ich hab ja mehrere Animationen.
Ich hoffe das ich vor Ende der Ferien(morgen -.- ) noch eine Antwort zur Hilfe bekomme.

Hubsi

BeitragSo, Aug 29, 2004 12:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist ein Projekt, welches ich wieder verworfen habe:Code: [AUSKLAPPEN]
AppTitle "Bastard - The final Masaker"
;Stop
Graphics screenwidth,screenheight,screendepth,Modus
SetBuffer BackBuffer()

Const viewwidth=25,viewheight=19,screenwidth=800,screenheight=600,screendepth=16,Modus=1
Global width,height,schiebx,schieby,scrollx,scrolly,maxscrollx,maxscrolly
Global kup=200,kdown=208,kright=205,kleft=203,maxspeed#=3.0
Global fps=CreateTimer(60)

Type einheit
   Field x,y,typ
   Field angle,death
   Field frame,speed#,frametimer
   Field shoottimer,guns,nowgun
   Field munition[25]
End Type

Type schuss
   Field x#,y#,speed#,angle,typ
End Type

Dim map(500,400),man(119,1),tile(1000),reloadtime(25),schussbild(25)

reloadtime(0)=50
TFormFilter False

ChangeDir("gfx") ; Grafiken laden
AutoMidHandle True
cursor=LoadAnimImage("cursor.bmp",16,16,0,4)
MaskImage cursor,255,0,255
man(0,0)=LoadAnimImage("man"+m+".bmp",32,32,0,1)
MaskImage man(0,0),255,0,255
For w=1 To 119
   man(w,0)=CopyImage(man(0,0))
   RotateImage(man(w,0),w*3)
Next

For a=0 To 25
   If FileType("schuss"+a+".bmp")=1
      schussbild(a)=LoadImage("schuss"+a+".bmp")
      MaskImage schussbild(a),255,0,255
   EndIf
Next
AutoMidHandle False

For a=1 To 300
   If FileType(a+".bmp")=1
      tile(a)=LoadImage(a+".bmp")
      MaskImage tile(a),255,0,255
   EndIf
Next

ChangeDir("../")
LoadLevel("data/Kill.map")

; Debug
einheit.einheit=New einheit
einheit\x=100
einheit\y=100
einheit\nowgun=0
einheit\munition[0]=1000

ClsColor 230,230,230
Repeat ; Hauptschleife
WaitTimer(fps)
mx=MouseX()
my=MouseY()
msecs=MilliSecs()
md1=MouseDown(1)
Cls
For y=0 To viewheight+1 ; Map malen
   For x=0 To viewwidth+1
      If map(x+scrollx,y+scrolly)>0 DrawImage tile(map(x+scrollx,y+scrolly)),x*32+schiebx,y*32+schieby
   Next
Next

For einheit.einheit=Each einheit
   x=einheit\x-(scrollx*32-schiebx) ; Kontrollabschnitt
   y=einheit\y-(scrolly*32-schieby)
   u=map(einheit\x/32,(einheit\y-18)/32)
   d=map(einheit\x/32,(einheit\y+16)/32)
   l=map((einheit\x-16)/32,einheit\y/32)
   r=map((einheit\x+16)/32,einheit\y/32)
   m=map(einheit\x/32,einheit\y/32)
   DrawImage man(einheit\angle/3,einheit\typ),x,y,einheit\frame
;   If msecs>einheit\frametimer+120
;      einheit\frame=einheit\frame+1
;      If einheit\frame=6 Then einheit\frame=0
;   EndIf
   If einheit\typ=0 ; Typ lokaler Spieler
      einheit\angle=(ATan2(my-y,mx-x)+270) Mod 360 ; Winkel berechnen
      If einheit\angle>357 Then einheit\angle=357
      
      If KeyDown(kright) And r<=150
         If einheit\speed<maxspeed Then einheit\speed=einheit\speed+0.15
         If x>screenwidth-200 And scrollx<maxscrollx
            schiebx=schiebx-einheit\speed
            If schiebx<=-32 Then scrollx=scrollx+1:schiebx=0
            goright=True
            einheit\x=einheit\x+einheit\speed
         Else
            einheit\x=einheit\x+einheit\speed
            goright=True
         EndIf
      EndIf
      
      If KeyDown(kleft) And l<=150
         If einheit\speed<maxspeed Then einheit\speed=einheit\speed+0.15
         If x<200 And scrollx>0
            schiebx=schiebx+einheit\speed
            If schiebx>=0 Then scrollx=scrollx-1:schiebx=-32
            goleft=True
            einheit\x=einheit\x-einheit\speed
         Else
            einheit\x=einheit\x-einheit\speed
            goleft=True
         EndIf
      EndIf
      
      If KeyDown(kup) And u<=150
         If einheit\speed<maxspeed Then einheit\speed=einheit\speed+0.15
         If y<150 And scrolly>0
            schieby=schieby+einheit\speed
            If schieby>=0 Then scrolly=scrolly-1:schieby=-32
            goup=True
            einheit\y=einheit\y-einheit\speed
         Else
            einheit\y=einheit\y-einheit\speed
            goup=True
         EndIf
      EndIf
      
      If KeyDown(kdown) And d<=150
         If einheit\speed<maxspeed Then einheit\speed=einheit\speed+0.15
         If y>screenheight-150 And scrolly<maxscrolly
            schieby=schieby-einheit\speed
            If schieby<=-32 Then scrolly=scrolly+1:schieby=0
            godown=True
            einheit\y=einheit\y+einheit\speed
         Else
            einheit\y=einheit\y+einheit\speed
            godown=True
         EndIf
      EndIf
      
      If KeyDown(kup)=0 And KeyDown(kdown)=0 And KeyDown(kright)=0 And KeyDown(kleft)=0
         If einheit\speed>0.0 Then
            einheit\speed=einheit\speed-0.15
            If goup And u<=150 einheit\y=einheit\y-einheit\speed
            If godown And d<=150 einheit\y=einheit\y+einheit\speed
            If goright And r<=150 einheit\x=einheit\x+einheit\speed
            If goleft And l<=150 einheit\x=einheit\x-einheit\speed
         Else
            goup=False
            godown=False
            goright=False
            goleft=False
         EndIf
      EndIf
      
      If md1 And msecs>einheit\shoottimer+reloadtime(einheit\nowgun) And einheit\munition[einheit\nowgun]>0
         schuss.schuss=New schuss
         schuss\x=einheit\x+8*-Sin(einheit\angle)
         schuss\y=einheit\y+14*Cos(einheit\angle)
         schuss\angle=(ATan2(mx-(schuss\x-(scrollx*32-schiebx)),my-(schuss\y-(scrolly*32-schieby)))+270) Mod 360
         schuss\typ=einheit\nowgun
         einheit\shoottimer=msecs
         If einheit\nowgun<12 schuss\speed=14
      EndIf
   EndIf

Next

For schuss.schuss=Each schuss
   schuss\x=schuss\x+schuss\speed*Cos(schuss\angle)
   schuss\y=schuss\y+schuss\speed*-Sin(schuss\angle)
   DrawImage schussbild(schuss\typ),schuss\x-(scrollx*32-schiebx),schuss\y-(scrolly*32-schieby)
   If map(Int(schuss\x-(scrollx*32-schiebx))/32,Int(schuss\y-(scrolly*32-schieby))/32)>150
      Delete schuss.schuss
   EndIf
Next

DrawImage cursor,mx,my,cframe
If msecs>ctimer+150
   ctimer=msecs
   cframe=cframe+1
   If cframe=4 cframe=0
EndIf




Flip
Until KeyHit(1)
End






Function LoadLevel(level$)
   If Right$(level$,4)<>".map" Then level$=level$+".map"
   If FileType(level$)=1
      file=ReadFile(level$)
      If file=0 Then RuntimeError "Map konnte nicht geladen werden"
      width=ReadInt(file)
      height=ReadInt(file)
      If width>500 Then width=500
      If height>400 Then height=400
      maxscrollx=width-screenwidth/32
      maxscrolly=height-screenheight/32
      width=width-1:height=height-1
      Dim map(width,height)
      For y=0 To height
         For x=0 To width
            map(x,y)=ReadShort(file)
            load=load+0.001:Rect 30,screenheight/2+50,load,25,1
         Next
      Next
      While Not Eof(file)
         einheit.einheit=New einheit
         einheit\x=ReadInt(file)
         einheit\y=ReadInt(file)
         einheit\typ=ReadByte(file)
         If einheit\typ=0
            Insert einheit Before First einheit
         EndIf
      Wend
      CloseFile file
   EndIf
End Function
Mach damit was Du willst, die Lösung zu Deinem Problem ist in Zeile 92 beschrieben. Tut mir leid das der Code etwas verschoben dargestellt wird, das liegt an den Tabs Wink Beim kopieren in den Editor sollte das aber von selbst behoben werden.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Stinktier

BeitragSo, Aug 29, 2004 12:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Wo ist die Zeile 92?
Ich hab jetzt ehrlich gesagt nicht die Lust Zeile 92 zu suchen.Könnte das nicht ein Bisschen genauer sein?
PS:So schnell?

Ctuchik

BeitragSo, Aug 29, 2004 13:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Zeile 92:
Code: [AUSKLAPPEN]
einheit\angle=(ATan2(my-y,mx-x)+270) Mod 360 ; Winkel berechnen
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle!
Fraget euren Arzt oder Apotheker!

Hubsi

BeitragSo, Aug 29, 2004 13:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Stinktier hat Folgendes geschrieben:
PS:So schnell?
Blitzforum Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Xenon

BeitragSo, Aug 29, 2004 16:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Zu dem Suchen der Zeile:

Wenn man das in die BB IDE kopiert hat man in der Statuszeile die Zeilennummer und Spaltennummer, sollte ein leichtes sein da die entsprechende Zeile zu finden.

Noch leichter gehts mit Notepad =) Strg+G drücken --> Zeilennummer eingeben --> Enter --> Fertig.
 

Stinktier

BeitragSo, Aug 29, 2004 17:52
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab nur die demo dar funtzt keine statuszeile
 

Stinktier

BeitragSo, Aug 29, 2004 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
wärst du so lieb hubsi und würdest mir deinen Code filtern?
 

OJay

BeitragSo, Aug 29, 2004 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
oder man benutzt einen gescheiten editor, welcher an der linken seite zeilennummern aufweist, wie z.b. blitzedit*schleich...schleich...schleich* Razz

Hubsi

BeitragSo, Aug 29, 2004 18:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
=(ATan2(my-y,mx-x)+270) Mod 360
Hat aber Ctuchik auch schon gemacht Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Hubsi

BeitragSo, Aug 29, 2004 18:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hubsi hat Folgendes geschrieben:
Code: [AUSKLAPPEN]
(ATan2(my-y,mx-x)+270) Mod 360
Hat aber Ctuchik auch schon gemacht Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Hubsi

BeitragSo, Aug 29, 2004 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
(ATan2(my-y,mx-x)+270) Mod 360
Hat aber Ctuchik auch schon gemacht Wink

Edit: Was das denn jetzt? Ich wollte doch eigentlich editieren Embarassed
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
  • Zuletzt bearbeitet von Hubsi am So, Aug 29, 2004 18:51, insgesamt einmal bearbeitet
 

Stinktier

BeitragSo, Aug 29, 2004 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab den gesamten Code gemeint.
Und welche vaiablen werwendest du da?
Un wo soll ich das in meinem Code einbauen?

Hubsi

BeitragSo, Aug 29, 2004 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso, ja also mx und my sind die Mauskoords auf dem Bildschirm, x und y sind die relativen Spielerkoords. einheit\x bzw. y sind die absoluten Spielerkoords. Den ganzen Code bis ins Detail zu erklären wäre etwas arg viel Aufwand. Wenn Du mit irgendwelchen Varaiblen oder so Probleme hast schreibs einfach hier rein Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Stinktier

BeitragSo, Aug 29, 2004 19:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Dim player(119, 3)
Type spieler
Field Drehung
End Type
Global spieler.spieler= New spieler




Code: [AUSKLAPPEN]


:: code

While not Keyhit(1)
y_kor = MouseY()
x_kor = MouseX()

scrollx = 280
scrolly = 210
spieler\drehung=(ATan2(y_kor-scrolly,x_kor-scrollx)+270) Mod 360 ; Winkel berechnen
If spieler\drehung>357 Then spieler\drehung=357
For w = 1 To 119
   player(w,0)=CopyImage(player(0,0))
   RotateImage(player(w,0),w*3)
Next
Cls

::code

If KeyDown(17) Then
viewy = viewy +1
 If MilliSecs() > t_player + 100 Then
      t_player=MilliSecs()
      f_player=(f_player + 1) Mod 3
   EndIf
EndIf
If KeyDown(31)Then
viewy = viewy -1
 If MilliSecs() > t_player + 100 Then
      t_player=MilliSecs()
      f_player=(f_player + 1) Mod 3
   EndIf
EndIf

If KeyDown(30)Then viewx = viewx  +1
If KeyDown(32)Then viewx = viewx -1

DrawImage player(0,0), scrollx, scrolly, f_player

DrawImage mouse, x_kor, y_kor


 

So habs ichs jetzt .
allerdings nachdem ich das so gemacht habe, hatt er eine framegeschwindigkeit von 0.5 FPS.
und drehen tut er sich auch nich.
 

Apocalyptic

BeitragSo, Aug 29, 2004 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
äh... die einzelnen Frames des Players sollten vielleicht vor der Schleife berechnet werden Wink

Und beim Zeichnen des Players vielleicht noch den Winkel angeben? Rolling Eyes
Suum cuique

[ www.ffs-net.de.vu ] [ Raycaster ]
  • Zuletzt bearbeitet von Apocalyptic am So, Aug 29, 2004 19:24, insgesamt einmal bearbeitet

Hubsi

BeitragSo, Aug 29, 2004 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Kein Wunder, Du drehst die Spielergrafik in der Hauptschleife (119 mal)! Und müllst nebenbei noch den Grakaspeicher zu. Diesen Teil:Code: [AUSKLAPPEN]
For w = 1 To 119
   player(w,0)=CopyImage(player(0,0))
   RotateImage(player(w,0),w*3)
Next
vor die Hauptschleife und diesesCode: [AUSKLAPPEN]
DrawImage player(0,0),...
ändern in:Code: [AUSKLAPPEN]
DrawImage player(winkel,0),...
Aber mein erster Gedanke war eigentlich das Du mit etwas leichterem anfangen solltest. Code der nur aus Copy & Paste zusammengeschraubt und nicht verstanden wird führt über kurz oder lang zu Frustration Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Stinktier

BeitragSo, Aug 29, 2004 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Array Index out of Bounds
-.-
Hier der gesamte
Code: [AUSKLAPPEN]

Graphics 640, 480, 16, 1

Loading = LoadImage("GFX/Loading.bmp")
MaskImage Loading, 255, 0, 255
DrawImage Loading, 280, 210

Dim player(119, 3)
Dim map1(100, 100)

Global bGround = LoadImage("GFX/Menu/BackGround.bmp")
Global mouse = LoadImage("GFX/MENU/mouse.bmp")
Global NewGame0 = LoadImage("GFX/MENU/NewGame0.bmp")
Global Newgame1 = LoadImage("GFX/MENU/Newgame1.bmp")
Global Exit0 = LoadImage("GFX/MENU/Exit0.bmp")
Global Exit1 = LoadImage("GFX/MENU/Exit1.bmp")
Global map = LoadImage("GFX/MAPS/MAP1/map.bmp")
player(0,0)=LoadAnimImage("GFX/player.bmp", 44, 32, 0, 3)

MaskImage exit0, 255, 0, 255   
MaskImage Exit1, 255, 0, 255
MaskImage NewGame0, 255, 0, 255
MaskImage NewGame1, 255, 0, 255
MaskImage map, 255, 0, 255
MaskImage mouse, 255, 0, 255
MaskImage player(0,0), 255, 0, 255

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Type spieler
   Field Drehung
End Type
Global spieler.spieler= New spieler

SetBuffer BackBuffer()



Function game()
MoveMouse 310, 210



For x1 = 0 To 100
    For  y1 = 0 To 100
   map1(x1, y1) = 1
    Next
Next
fps=CreateTimer(60) ; Frames pro Sekunde
For w = 1 To 119
   player(w,0)=CopyImage(player(0,0))
   RotateImage(player(w,0),w*3)
Next
     
While Not KeyHit(1)
scrollx=280
scrolly=210

x_kor = MouseX()
y_kor = MouseY()
t1$ = "X:"
t2$ = " Y:"
t3$ = t1$ + x_kor
t4$ = t2$ + y_kor
t5$ = t3$ + t4$
spieler\drehung=(ATan2(y_kor-scrolly,x_kor-scrollx)+270) Mod 360 ; Winkel berechnen
If spieler\drehung>357 Then spieler\drehung=357

Cls

For x = 0 To 100
   For y = 0 To 100
       If map1(x,y) = 1 Then DrawImage map, x*100+viewx, y*100+viewy
   Next
Next

If KeyDown(17) Then
viewy = viewy +1
 If MilliSecs() > t_player + 100 Then
      t_player=MilliSecs()
      f_player=(f_player + 1) Mod 3
   EndIf
EndIf
If KeyDown(31)Then
viewy = viewy -1
 If MilliSecs() > t_player + 100 Then
      t_player=MilliSecs()
      f_player=(f_player + 1) Mod 3
   EndIf
EndIf

If KeyDown(30)Then viewx = viewx  +1
If KeyDown(32)Then viewx = viewx -1

DrawImage player(spieler\drehung,0), scrollx, scrolly, f_player
Text 20, 20, t5$

DrawImage mouse, x_kor, y_kor


Flip
Wend
End Function

game()

End

Hubsi

BeitragSo, Aug 29, 2004 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
DrawImage player(spieler\drehung/3...

Ich sagte ja Copy & Paste ohne zu verstehen...
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Stinktier

BeitragSo, Aug 29, 2004 20:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hubsi hat Folgendes geschrieben:
DrawImage player(spieler\drehung/3...

.


Wenn es mir einer erklärt dann versteh ichs auch.
Array index out of bounds
Immer noch -.-

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group