Bewegungsanimationen bei RPGs
Übersicht

![]() |
aasgeierBetreff: Bewegungsanimationen bei RPGs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi!
Ich wollt bei mir jetz mal so nen RPG coden mit einer Pixel-by-Tile-Engine. Ich hab bei der Engine bei Blitzmasters RPG-Tut 5 abgeguckt. Dann hab ich eine Bewegungsanimation eingebaut, die von der Engine mitgesteuert wird: Code: [AUSKLAPPEN] AppTitle "RPG" Graphics 640,480,8,2 SetBuffer BackBuffer() Global player_x = 10*32 ;X-Position des Players Global player_y = 7*32 ;Y-Position des Players Global scrollx ;Scroll- Global scrolly ;variablen Global schiebung = 0;steuert das scrolling Global Tileset = LoadAnimImage("tileset.bmp",32,32,0,6) ;Map-Tiles Global player_l = LoadAnimImage("char_l.bmp",32,48,0,15) ;Die Global player_r = LoadAnimImage("char_r.bmp",32,48,0,15) ;einzelnen Global player_o = LoadAnimImage("char_o.bmp",32,48,0,15) ;Bilder für Global player_u = LoadAnimImage("char_u.bmp",32,48,0,15) ;die Bewegungen Dim player(1) player(1) = 2 ;Richtung - 1=Oben, 2=Links, 3=Rechts, 4=Unten Dim map(20,20) ;Die Karte Data 2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,4 Data 4,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,4 Data 4,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,0,0,0,3,3,0,0,0,0,0,0,0,0,3,3,0,0,0,0,4 Data 4,0,0,0,3,3,0,0,0,0,0,0,0,0,3,3,0,0,0,0,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 For y = 0 To 20 ;Map einlesen und ins Dim speichern For x = 0 To 20 Read map(x,y) Next Next Repeat ;Mainloop Cls ;Map zeichnen For x = 0 To 20 For y = 0 To 20 DrawBlock tileset,x*32-scrollx,y*32-scrolly,map(x,y) Next Next ;Scrolling move: 1=Oben 2=Links 3=Rechts 4=Unten If KeyDown(200) Then move = 1 If move = 1 Then ;Oben scrolly = scrolly - 2 DrawImage player_o,player_x,player_y,schiebung ;Animation schiebung = schiebung + 1 If schiebung = 16 Then schiebung = 0 move = 0 EndIf EndIf If KeyDown(203) Then move = 2 If move = 2 Then ;Links scrollx = scrollx - 2 DrawImage player_l,player_x,player_y,schiebung schiebung = schiebung + 1 If schiebung = 16 Then schiebung = 0 move = 0 EndIf EndIf If KeyDown(205) Then move = 3 If move = 3 Then ;Rechts scrollx = scrollx + 2 DrawImage player_r,player_x,player_y,schiebung schiebung = schiebung + 1 If schiebung = 16 Then schiebung = 0 move = 0 EndIf EndIf If KeyDown(208) Then move = 4 If move = 4 Then ;Unten scrolly = scrolly + 2 DrawImage player_u,player_x,player_y,schiebung schiebung = schiebung + 1 If schiebung = 16 Then schiebung = 0 move = 0 EndIf EndIf ;Player If player(1) = 1 And move = 0 Then DrawImage player_o,player_x,player_y,0 endif If player(1) = 2 And move = 0 Then DrawImage player_l,player_x,player_y,0 endif If player(1) = 3 And move = 0 Then DrawImage player_r,player_x,player_y,0 endif If player(1) = 4 And move = 0 Then DrawImage player_u,player_x,player_y,0 endif If KeyDown(200) And player(1) <> 1 Then player(1) = 1 If KeyDown(203) And player(1) <> 2 Then player(1) = 2 If KeyDown(205) And player(1) <> 3 Then player(1) = 3 If KeyDown(208) And player(1) <> 4 Then player(1) = 4 Delay 10 Flip Until KeyDown(1) FreeImage tileset FreeImage player_r FreeImage player_l FreeImage player_o FreeImage player_u End Nun habe ich folgendes Problem: Wenn ich das Prog ausführe, wird alles wie gewollt gezeichnet. Wenn ich den Player aber bewege, also die Karte scrollt und die Bewegungsanimation abläuft, kommt eine "Illegal Memory Adress" - Fehlermeldung und das Programm stürzt ab. Wenn ich das Programm 2- bis 3-mal auf diese Weise abstürzen lasse und es erneut ausführe, klappt aber alles so, wie es klappen soll - ich kann den Player dann beliebig auf der Map "herumlaufen" lassen, ohne das etwas passiert was nicht passieren soll. Das passiert immer, wenn ich BB gestartet hab. Starte ich BB also neu und lade den Source, muss ich es erst ein paar mal abstürzen lassen, bevor ich es richtig testen kann. Woran liegt das? Hab ich vielleicht eine Kleinigkeit übersehen? An den Bildern bzw. den LoadAnimImage-Sachen kann es ja nicht liegen, sonst würde es später ja nicht klappen und die Bilder sind auch alle da. Für Hilfe wäre ich sehr dankbar. aasgeier |
||
Ich geh jetzt nach Jamaika, daa, wo der Hanf blüht... |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Debugger anschalten wirkt oft Wunder. Dann gibts eine anständige Fehlermeldung und der Bug läßt sich sehr viel leichter finden ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
simi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi du lädst ein Bild mit 15 animationsstufen, dann kannst du die mit 0-14 ansprechen.
du hast aber Code: [AUSKLAPPEN] If schiebung = 16 Then schiebung = 0 move = 0 EndIf also müsste schiebung = 15 stehen. Warum das aber nur Teilweise eine Fehlermeldung gibt, ist mir ein Rätsel. cu simi |
||
![]() |
aasgeier |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Ich hab den Debugger immer an und beim Laden kommt trotzdem nie eine Fehlermeldung
2.Das Bild hat 16 Animationsstufen; warum das manchmal trotzdem klappt?? Vielleicht kan BB raten und sagt sich, dass es dann besser wohl einfach die 16., nicht vorhandene Grafik weglässt... ![]() Oder: Oben bei LoadAnimImage muss doch bei 16 Ani-Stufen "15" stehen, weil BB die erste Animationsstufe "0" und damit die 16. "15" nennt?! Ich werde das mit dem if schiebung = 15 und das mit "LoadAnimImage blablabla,0,16" beides mal ausprobiern. Danke für den Tipp. An solchen Logikfehlern verzweifle ich andauernd... aasgeier |
||
Ich geh jetzt nach Jamaika, daa, wo der Hanf blüht... |
![]() |
Slayer |
![]() Antworten mit Zitat ![]() |
---|---|---|
aasgeier hat Folgendes geschrieben: ..........Oben bei LoadAnimImage muss doch bei 16 Ani-Stufen "15" stehen, weil BB die erste Animationsstufe "0" und damit die 16. "15" nennt?! aasgeier Nö, beim Laden musst Du von 1 anfangen zum Zählen. Zb. Du hast 16 Animationen, dann musst Du auch 16 Laden. Erst beim Zeichen ist die Zählweise wieder anders bzw. normal von 0 an, also 0 - 15 sind auch wieder 16 Bildchen. Ist am anfang etwas verwirend aber man gewöhnt sich drann. |
||
AMD2500XP, SB5.1, DX9, 512MB DDR333,
XPPro SP1a,ATI 9800SE 256bit 128MB,B3B, B+ immer die neue Version |
![]() |
aasgeier |
![]() Antworten mit Zitat ![]() |
---|---|---|
Yo hi!
Also ich hab das mit der 16 anstatt 15 bei LoadAnimImage mal ausprobiert. Jetzt klappt es wie es soll. Danke nochmal! aasgeier |
||
Ich geh jetzt nach Jamaika, daa, wo der Hanf blüht... |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group