Porting game from Windows to OS X

Mac OSX specific forum
User avatar
thinkitsimple
User
User
Posts: 89
Joined: Mon Aug 13, 2012 6:12 pm
Location: Berlin, Germany
Contact:

Porting game from Windows to OS X

Post by thinkitsimple »

Hi,

i have an old Sourecode of my earlier PureBasic Days, which i began several years ago on Windows. Now i want to continue it using OS X. I'm using the newest 4.70 Beta 1 x64 on OS X 10.8.

I got an Error when i try to compile the code:

Code: Select all

Invalid memory accesss
in Line 127 (Read a)

Here is my code:

Code: Select all

; Project   : Dungeon
; Filename  : dungeon.pb
; Comment   : A tile-based 2-D Adventure-Game
; Copyright : 2007-2009 Michael Bzdega

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 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 OpenScreen(#ScreenWidth, #ScreenHeight, 32, "Dungeon") = 0 : MessageRequester("Fehler", "Bildschirm konnte nicht geöffnet werden!") : End : 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 a <-- here's my error! 
      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
Is this anything related to x64?

Greetings

Michael
Michael

PureBasic 5.51, macOS 10.12.2 Sierra
User avatar
Comtois
Addict
Addict
Posts: 1433
Joined: Tue Aug 19, 2003 11:36 am
Location: Doubs - France

Re: Porting game from Windows to OS X

Post by Comtois »

The type of data to read is determined by the type suffix. The default type (integer) will be used if it is not specified.

Code: Select all

Read.b a 
Please correct my english
http://purebasic.developpez.com/
User avatar
thinkitsimple
User
User
Posts: 89
Joined: Mon Aug 13, 2012 6:12 pm
Location: Berlin, Germany
Contact:

Re: Porting game from Windows to OS X

Post by thinkitsimple »

Ok, tried this, but i only get my blank black screen and my background-sound, no tiles.

Any further tipps?
Michael

PureBasic 5.51, macOS 10.12.2 Sierra
Post Reply