Tile Engine: GameBoy Verhalten
Verfasst: 23.12.2006 21:38
Jeder von euch kennt doch die GameBoy Spiele, wie z.B. Pokemon Rote Edition.
So'ne Steuerung will ich haben...
So, ich habe in letzter Zeit mit einer Tile Engine experimentiert, jedoch bin ich nun an einem Punkt, an dem ich nicht weiter komme.
Das 1. was zu ändern wäre, ist, dass, wenn man eine Bewegungstaste drückt, sich die Spielfigut flüssig von einem Tile zum andern bewegt und dabei natürlich immer auf der Mitte des Tiles stehen bleibt. So wie beim Schach ungefähr...(Damit das nicht schon wieder so affig rast, muss man da wahrscheinlich auch wieder Zeitanhängige Steuerung benutzen -.-° ).
Derzeit habe ich die Bewegungen so gelöst, dass man sich durch KeyboardReleased() ein Feld je nach Richtung bewegt, weil mit KeyboardPushed() ist man locker innerhalb 2 Sekunden am anderen Ende der Map. Das wäre das 2. was ich ändern will, dass man eine Bewegungstaste gedrückt lassen kann und sich die Figur genauso bewegt.
Jetzt die Frage: Wie kriege ich das hin?
Ich habe die Angelegenheit mit den zugänglichen Sprites etc. durch ein 2. Array gelöst, anstatt einen 2. Layer in ein Array einzubauen.
Link für das komplette Paket hier, Code der Engine unten (Auch im Archiv enthalten):
http://www.thenameless.de/Software/gbtile.rar
So, ich habe in letzter Zeit mit einer Tile Engine experimentiert, jedoch bin ich nun an einem Punkt, an dem ich nicht weiter komme.
Das 1. was zu ändern wäre, ist, dass, wenn man eine Bewegungstaste drückt, sich die Spielfigut flüssig von einem Tile zum andern bewegt und dabei natürlich immer auf der Mitte des Tiles stehen bleibt. So wie beim Schach ungefähr...(Damit das nicht schon wieder so affig rast, muss man da wahrscheinlich auch wieder Zeitanhängige Steuerung benutzen -.-° ).
Derzeit habe ich die Bewegungen so gelöst, dass man sich durch KeyboardReleased() ein Feld je nach Richtung bewegt, weil mit KeyboardPushed() ist man locker innerhalb 2 Sekunden am anderen Ende der Map. Das wäre das 2. was ich ändern will, dass man eine Bewegungstaste gedrückt lassen kann und sich die Figur genauso bewegt.
Jetzt die Frage: Wie kriege ich das hin?
Ich habe die Angelegenheit mit den zugänglichen Sprites etc. durch ein 2. Array gelöst, anstatt einen 2. Layer in ein Array einzubauen.
Link für das komplette Paket hier, Code der Engine unten (Auch im Archiv enthalten):
http://www.thenameless.de/Software/gbtile.rar
Code: Alles auswählen
#ScreenWidth = 800
#ScreenHeight = 600
#TileSize = 32
#NumberOfDifferentTiles = 8 ; (Immer 1 weniger als wirklich ist)
Global PlayerX
Global PlayerY
InitSprite()
InitKeyboard()
InitMouse()
OpenScreen(#ScreenWidth, #ScreenHeight, 32, "OE_FH-mod")
LoadSprite(0, "player.bmp")
PlayerSprite = 0
For n = 0 To #NumberOfDifferentTiles
LoadSprite( 100+n, Right("00"+Str(n),3)+".bmp")
Next
If ReadFile(0, "Layer0.lyr")
Global MapWidth = ReadLong(0)
Global MapHeight = ReadLong(0)
Dim Map_0(MapWidth-1, MapHeight-1)
For t = 0 To MapHeight-1
For n = 0 To MapWidth-1
Map_0(n, t) = ReadLong(0)
Next
Next
CloseFile(0)
EndIf
If ReadFile(0, "Layer1.lyr")
Global MapWidth = ReadLong(0)
Global MapHeight = ReadLong(0)
Dim Map_1(MapWidth-1, MapHeight-1)
For t = 0 To MapHeight-1
For n = 0 To MapWidth-1
Map_1(n, t) = ReadLong(0)
Next
Next
CloseFile(0)
EndIf
MouseLocate(400, 300)
Repeat
ExamineKeyboard()
ExamineMouse()
MouseX = MouseX() : MouseY = MouseY()
ClearScreen(0)
If KeyboardReleased(#PB_Key_Left) And Map_0(PlayerX-1, PlayerY) <> 0
MapX-1
If MapX < 0
MapX = 0
EndIf
ElseIf KeyboardReleased(#PB_Key_Right) And Map_0(PlayerX+1, PlayerY) <> 0
MapX+1
If MapX > MapWidth-26
MapX = MapWidth-26
EndIf
ElseIf KeyboardReleased(#PB_Key_Up) And Map_0(PlayerX, PlayerY-1) <> 0
MapY-1
If MapY < 0
MapY = 0
EndIf
ElseIf KeyboardReleased(#PB_Key_Down) And Map_0(PlayerX, PlayerY+1) <> 0
MapY+1
If MapY > MapHeight-20
MapY = MapHeight-20
EndIf
EndIf
PlayerX = 400 / #TileSize + MapX
PlayerY = 300 / #TileSize + MapY
ActTileX = MouseX / #TileSize + MapX
ActTileY = MouseY / #TileSize + MapY
; Tile Engine __________________________________________________________________________________________________________________
For SY = 0 To 19
For SX = 0 To 25
DisplaySprite(100+Map_1(MapX+SX, MapY+SY), #TileSize*SX-FineX, #TileSize*SY-FineY)
Next
Next
;_______________________________________________________________________________________________________________________________
DisplayTransparentSprite(PlayerSprite, 384, 256)
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Outlined)
Box(ActTileX*#TileSize-MapX*#TileSize, ActTileY*#TileSize-MapY*#TileSize, #TileSize, #TileSize, RGB(0, 127, 255))
DrawingMode(#PB_2DDrawing_Transparent)
DrawText( 8, 8, "X: "+Right("000"+Str(ActTileX), 4))
DrawText( 8, 24, "Y: "+Right("000"+Str(ActTileY), 4))
Line(MouseX, MouseY, 0, #TileSize, RGB(0, 127, 255))
Line(MouseX, MouseY, (#TileSize/4)*3, #TileSize-(#TileSize/2), RGB(0, 127, 255))
StopDrawing()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
CloseScreen()
End