ja, sonst würde er die anderen sprites ja auch nich laden können. eigentlich wollte ich das nich machen, is so unübersichtlich, aber hier nochmal der ganze code....
Code: Alles auswählen
; ###########################
;
; Projekt Titel: CITY GAME
; Autor: Jaap 'diGGa' Groeneveld
;
; ###########################
;{/ ----- Initialisieren -----
InitSprite()
InitKeyboard()
OpenWindow(#PB_Any, 10, 10, 320, 240, #PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_SystemMenu|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget, "CITY GAME")
OpenWindowedScreen(WindowID(),0,0,320,240, 1,0,0)
;} ----- Initialisieren -----
;{/ ----- Variablen -----
; ----- Variablen Deklarieren -----
Global MapX.w, MapY.w
Global PlayerMapX.w, PlayerMapY.w
Global ColUp.w, ColDown.w, ColLeft.w, ColRight.w
; ----- Variablen Laden -----
MapX = 10
MapY = 8
Dim GroundLayer.w(MapX,MapY)
Dim ObjectsLayer.w(MapX,MapY)
Dim CollisionsLayer.w(MapX, MapY)
;} ----- Variablen Ende -----
;{/ ----- Strukturen -----
Structure TPlayer
x.f
y.f
HP.b
Speed.f
SSpeed.f
State.s
EndStructure
Global Player.TPlayer
Player\x = 2*32
Player\y = 5*32
Player\HP = 100
Player\SSpeed = 1
Player\Speed = Player\SSpeed
Player\State = "up"
;} ----- Strukturen Ende -----
;{/ ----- Prozeduren -----
Procedure LoadGameVars()
Restore data_layer1
For y = 0 To MapY - 1
For x = 0 To MapX - 1
Read GroundLayer(x,y)
Next
Next
Restore data_layer2
For y = 0 To MapY - 1
For x = 0 To MapX - 1
Read ObjectsLayer(x,y)
Next
Next
Restore data_colmap
For y = 0 To MapY - 1
For x = 0 To MapX - 1
Read CollisionsLayer(x,y)
Next
Next
ColUp = 0
ColDown = 0
ColLeft = 0
ColRight = 0
EndProcedure
Procedure DrawGround()
For y = 0 To MapY - 1
For x = 0 To MapX - 1
DisplayAnimSprite(AnimSprite_0,x*32,y*32)
Next
Next
EndProcedure
Procedure DrawObjects()
For y = 0 To MapY - 1
For x = 0 To MapX - 1
If ObjectsLayer(x,y) = 0
ClipSprite(1, ObjectsLayer(x,y)*32, (ObjectsLayer(x,y)*32)/6, 32, 32)
DisplayTransparentSprite(1, x*32, y*32)
EndIf
Next
Next
EndProcedure
Procedure DrawPlayer()
If KeyboardPushed(200) And ColUp = 0 ;up
Player\y - Player\Speed
Player\State = "up"
ElseIf KeyboardPushed(208) And ColDown = 0 ;down
Player\y + Player\Speed
Player\State = "down"
ElseIf KeyboardPushed(203) And ColLeft = 0 ;left
Player\x - Player\Speed
Player\State = "left"
ElseIf KeyboardPushed(205) And ColRight = 0 ;right
Player\x + Player\Speed
Player\State = "right"
EndIf
If Player\State = "up"
DisplayTransparentSprite(2,Player\x, Player\y)
EndIf
If Player\State = "down"
DisplayTransparentSprite(3,Player\x, Player\y)
EndIf
If Player\State = "left"
DisplayTransparentSprite(4,Player\x, Player\y)
EndIf
If Player\State = "right"
DisplayTransparentSprite(5,Player\x, Player\y)
EndIf
EndProcedure
Procedure DoCollisions()
Param1.l = (Player\x+12)/32
Param2.l = (Player\y-2)/32
ColUp = CollisionsLayer(Param1,Param2) ; Oben
Param1.l = (Player\x+12)/32
Param2.l = (Player\y+16)/32
ColDown = CollisionsLayer(Param1,Param2) ; Unten
Param1.l = (Player\x-12)/32
Param2.l = (Player\y+14)/32
ColLeft = CollisionsLayer(Param1,Param2) ; Links
Param1.l = (Player\x+12)/32
Param2.l = (Player\y+14)/32
ColRight = CollisionsLayer(Param1,Param2) ; Rechts
Param1.l = (Player\x+16)/32
Param2.l = (Player\y+16)/32
ColMiddle = CollisionsLayer(Param1,Param2) ; Mitte
EndProcedure
;} ----- Prozeduren Ende -----
;{/ ----- Start Prozeduren -----
LoadGameVars()
;} ----- Start Prozeduren Ende -----
;{/ ----- Mediendaten Laden -----
UsePNGImageDecoder()
LoadSprite(0,"graphics/layer1.png",0) : CreateAnimSprite(AnimSprite_0.AnimSprite,0,32,32)
LoadSprite(1,"graphics/machine.png",0) : TransparentSpriteColor(1,255,0,255)
LoadSprite(2,"graphics/charUP.png",0) : TransparentSpriteColor(2,255,0,255)
LoadSprite(3,"graphics/charDOWN.png",0) : TransparentSpriteColor(3,255,0,255)
LoadSprite(4,"graphics/charLEFT.png",0) : TransparentSpriteColor(4,255,0,255)
LoadSprite(5,"graphics/charRIGHT.png",0) : TransparentSpriteColor(5,255,0,255)
;} ----- Mediendaten Laden Ende -----
;{/ ----- Hauptschleife -----
Repeat
Select WindowEvent()
Case #PB_Event_CloseWindow
Break
Case 0
EndSelect
ExamineKeyboard()
DrawGround()
DrawObjects()
DrawPlayer()
DoCollisions()
FlipBuffers()
Until KeyboardPushed(1)
;} ----- Hauptschleife Ende -----
;{/ ----- Datenfelder -----
DataSection
data_layer1:
Data.w 000,000,000,000,000,000,000,000,000,000
Data.w 000,000,000,000,000,000,000,000,000,000
Data.w 000,000,000,000,000,000,000,000,000,000
Data.w 000,000,000,000,000,000,000,000,000,000
Data.w 000,000,000,000,000,000,000,000,000,000
Data.w 000,000,000,000,000,000,000,000,000,000
Data.w 000,000,000,000,000,000,000,000,000,000
Data.w 000,000,000,000,000,000,000,000,000,000
data_layer2:
Data.w 099,099,099,099,099,099,099,099,099,099
Data.w 099,099,000,001,002,003,004,005,099,099
Data.w 099,099,006,007,008,009,010,011,099,099
Data.w 099,099,012,013,014,015,016,017,099,099
Data.w 099,099,018,019,020,021,022,023,099,099
Data.w 099,099,099,099,099,099,099,099,099,099
Data.w 099,099,099,099,099,099,099,099,099,099
Data.w 099,099,099,099,099,099,099,099,099,099
data_colmap:
Data.w 000,000,000,000,000,000,000,000,000,000
Data.w 000,000,000,000,000,000,000,000,000,000
Data.w 000,000,001,001,001,001,001,001,000,000
Data.w 000,000,001,001,001,001,001,001,000,000
Data.w 000,000,001,001,001,001,001,001,000,000
Data.w 000,000,000,000,000,000,000,000,000,000
Data.w 000,000,000,000,000,000,000,000,000,000
Data.w 000,000,000,000,000,000,000,000,000,000
EndDataSection
;} ----- Datenfelder -----
ausserdem hab ich den code der canadaflagge mal umgestrickt um mit dem layer zu arbeiten... da gehts ohne probleme
ok hab den fehler... man kann die dinger nicht in procedures nutzen... ne idee wie ich die als global machen könnte? snd ja types.... oder ich nehm gosubs?!