Bewegungsanimationen bei RPGs

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

aasgeier

Betreff: Bewegungsanimationen bei RPGs

BeitragDo, Jun 10, 2004 10:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Jun 10, 2004 13:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Debugger anschalten wirkt oft Wunder. Dann gibts eine anständige Fehlermeldung und der Bug läßt sich sehr viel leichter finden Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

simi

BeitragFr, Jun 11, 2004 16:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Jun 12, 2004 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
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... Wink

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

BeitragSa, Jun 12, 2004 22:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Jun 16, 2004 17:14
Antworten mit Zitat
Benutzer-Profile anzeigen
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...

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group