i have some old code, which i used on Windows a few years ago. Now i want to go on with this little project, but meanwhile i use a Mac instead of Windows. I looks like there is maybe something Windows-specific code in there, which does not work on my Mac.
What happens if i start the code? The Window is opening but nothing in there, no sprites at all. The sound-file is playing.
Any Mac-user out there who can try my code?
Code: Select all
; Project : Dungeon
; Filename : dungeon.pb
AppPath.s = GetPathPart(ProgramFilename())
Enumeration
; Sprites
#Rasen
#Wasser
#Spieler1
#Spieler2
; Sounds
#Musik1
EndEnumeration
#ScreenWidth = 1024
#ScreenHeight = 768
#MapWidth= 15
#MapHeight = 20
; Unterstützung für Bildformat PNG
UsePNGImageDecoder()
; Unterstützung für Soundformat OGG
UseOGGSoundDecoder()
; Sprite und Tastatur initialisieren
If InitSprite() = 0 : MessageRequester("Fehler", "Sprite konnte nicht initialisiert werden!") : End : EndIf
If InitKeyboard() = 0 : MessageRequester("Fehler", "Tastatur konnte nicht initialisiert werden!") : End : EndIf
; Geschwindigkeitskonstante
#SPEED = 2
; Diese Funktion prüft ob eine Kollision vorliegt
Procedure Collision(x.f, y.f)
Result = 0
; Gehe alle Tiles durch
Restore Map
For my = 0 To #MapWidth - 1
For mx = 0 To #MapHeight - 1
a.b
Read .b a
; Wenn der Tile-Typ 1(#Rasen) ist, so prüfe auf eine Kollision mit diesem Tile...
If a = 1
; ... mit den entsprechenden Tile-Koordinaten(IndexX * TileBreite, IndexY * TileBreite)...
; ... und den entsprechenden Spieler-Koordinaten(SpielerX, SpielerY)...
If SpriteCollision(#Rasen, Int(x), Int(y), #Spieler1, mx * 50, my * 50)
; Wenn ja: gib 1(True) zurück
Result = 1
; und springe aus beiden Schleifen(Anzahl: 2) raus
Break 2
EndIf
EndIf
Next
Next
ProcedureReturn Result
EndProcedure
; Screen öffnen
If OpenWindow(0, 0, 0, 340, 285, "Dungeon!", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
If OpenWindowedScreen(WindowID(0), 10, 70, 320, 200, 0, 0, 0)
LoadSprite(#Spieler1, "res/michael_kopf.png")
Else
MessageRequester("Error", "Can't open windowed screen!", 0)
End
EndIf
EndIf
; Sprites laden
LoadSprite(#Rasen, "res/rasen.png")
LoadSprite(#Wasser,"res/wasser.png")
LoadSprite(#Spieler1,"res/michael_kopf.png")
LoadSprite(#Spieler2,"res/alexandra_kopf.png")
; Spielerposition in der Mitte des Bildschirms
X.f = #ScreenWidth / 2
Y.f = #ScreenHeight / 2
; Framerate auf 30 setzen
SetFrameRate(30)
; Hintergrundmusik laden und endlos abspielen
If InitSound() = 0 : MessageRequester("Fehler", "Soundwiedergabe konnte nicht initialisiert werden!") : End : EndIf
LoadSound(#Musik1, "res/background.ogg")
PlaySound(#Musik1, 1)
; Hauptschleife
Repeat
; Keyboardstatus erneuern und abfragen
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Up) ; laufe hoch
If Collision(X, Y - #SPEED) = 0
Y - #SPEED
EndIf
EndIf
If KeyboardPushed(#PB_Key_Down) ; laufe runter
If Collision(X, Y + #SPEED) = 0
Y + #SPEED
EndIf
EndIf
If KeyboardPushed(#PB_Key_Left) ; laufe links
If Collision(X - #SPEED, Y) = 0
X - #SPEED
EndIf
EndIf
If KeyboardPushed(#PB_Key_Right) ; laufe rechts
If Collision(X + #SPEED, Y) = 0
X + #SPEED
EndIf
EndIf
; Beenden?
If KeyboardPushed(#PB_Key_Escape)
Quit = 1
EndIf
; Screeninhalt löschen und mit Schwarz überdecken
ClearScreen(0)
; Spieler anzeigen
DisplaySprite(#Spieler1, X, Y)
; Mapdaten durchgehen
Restore Map
For my = 0 To #MapWidth - 1
For mx = 0 To #MapHeight - 1
a.b
Read.b a
Select a
Case 1 ; Rasen
DisplaySprite(#Rasen, mx * 50, my * 50)
Case 2 ; Wasser
DisplaySprite(#Wasser, mx * 50, my * 50)
Case 3 ; Spieler2
DisplaySprite(#Spieler2, mx * 50, my * 50)
EndSelect
Next
Next
; Gefüllten Backbuffer zum Frontbuffer bringen
; FlipBuffers()
; Eine kleine Verzögerung um den Prozessor nicht vollständig auszulasten
Delay(5)
Until Quit = 1
End
; Mapdaten
DataSection
Map:
Data.b 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1
Data.b 1, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1
Data.b 1, 0, 0, 2, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1
Data.b 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
Data.b 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
EndDataSection
Michael