CS2D Steuerung
Übersicht

StinktierBetreff: CS2D Steuerung |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist ein Projekt, welches ich wieder verworfen habe:Code: [AUSKLAPPEN] AppTitle "Bastard - The final Masaker"
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 ;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 ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Stinktier |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Stinktier hat Folgendes geschrieben: PS:So schnell? Blitzforum ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Xenon |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich hab nur die demo dar funtzt keine statuszeile | ||
Stinktier |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wärst du so lieb hubsi und würdest mir deinen Code filtern? | ||
OJay |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
oder man benutzt einen gescheiten editor, welcher an der linken seite zeilennummern aufweist, wie z.b. blitzedit*schleich...schleich...schleich* ![]() |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] =(ATan2(my-y,mx-x)+270) Mod 360 Hat aber Ctuchik auch schon gemacht ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hubsi hat Folgendes geschrieben: | ||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] (ATan2(my-y,mx-x)+270) Mod 360 Hat aber Ctuchik auch schon gemacht ![]() Edit: Was das denn jetzt? Ich wollte doch eigentlich editieren ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich hab den gesamten Code gemeint.
Und welche vaiablen werwendest du da? Un wo soll ich das in meinem Code einbauen? |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Stinktier |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
äh... die einzelnen Frames des Players sollten vielleicht vor der Schleife berechnet werden ![]() Und beim Zeichnen des Players vielleicht noch den Winkel angeben? ![]() |
||
Suum cuique
[ www.ffs-net.de.vu ] [ Raycaster ] |
- Zuletzt bearbeitet von Apocalyptic am So, Aug 29, 2004 19:24, insgesamt einmal bearbeitet
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
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
vor die Hauptschleife und diesesCode: [AUSKLAPPEN] player(w,0)=CopyImage(player(0,0)) RotateImage(player(w,0),w*3) Next 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 ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Stinktier |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 -.- |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group