Ich wollte nur allgemein meine Meinung zum Programmierer und seinem Projekt äußern. Ich finde die besste Methode ein Projekt zu zerstören ist es das Projekt zu Manipulieren und dann damit andere davon abzuhalten es zu spielen.
@Xsoft
Ich kann dir gerne meine Tile Engine senden aber die ein weniger gutes Beispiel für eine schnelle TileEngine. Sie abreitet mit der Linked List und 2 dimensionalen Arrays.
scrollen?
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Also du machst dir einfach die beiden variablen CameraX und CameraY jetzt zählst du wenn man nach links geht auf CameraX die Geschwindigkeit des Spielers drauf, wenn man nach rechts geht zieht man die Geschwindigkeit ab also
und jetzt zählst du diese Kamera Variablen einfach immer auf alles drauf was angezeigt wird, zum Beispiel auf das Bild eines hauses:
noch fragen?? 
Code: Alles auswählen
if Keyboardpushed(#pb_key_left)
CameraX + SpielerSpeed
elseif keyboardpushed(#pb_key_right)
CameraX - SpielerSpeed
endif
if keyboardpushed(#pb_key_up)
CameraY + SpielerSpeed
elseif
CameraY - SpielerSpeed
endif
Code: Alles auswählen
DisplaySprite(#bild_haus,HausPosX+CameraX,HausPosY+CameraY)
Wenn ich ein Multiplayer spiel machen würde, dann würde ich das ganze eher mit einem 'Camerapool' lösen. Dieser könnte dann mit dem Server abgeglichen werden. Hier ist mal mein Vorschlag:
Hier die Mapload Engine und auch die TileEngine:
Hier die Mapload Engine und auch die TileEngine:
Code: Alles auswählen
Structure s2Dkamera ;/ TileKamera was in der Map angezeigt werden soll
CamX.l ; Aktuelle Position der Kamera (Breite)
CamY.l ; Aktuelle Position der Kamera (Höhe)
CamName.s ; Aktueller Name der Kamera
EndStructure
Structure sTile ;/ Einzelne Tiles der Welt
ImageHandle.l ; handle zur aktuellen Image des Tiles
Layer.l ; Priorität des aktuellen Tiles
Option.l ; Einzelne Optionen des Tiles
TileWidth.l ; Breite des Tiles
TileHeight.l ; Höhe des Tiles
EndStructure
NewList CamPool.s2Dkamera()
NewList TilePool.sTile()
Dim MapWorld.s(0, 0)
Procedure ParseMapFile()
DefType.s FileValue
DefType.s tmpZeile
DefType.l ptrZeile
FileValue = ReplaceString(PeekS(VBin(MapFile, "Map.txt", "")), Chr(10), "")
Repeat
ptrZeile + 1
tmpZeile = Trim(StringField(FileValue, ptrZeile, Chr(13)))
If Len(tmpZeile) <> 0
Debug tmpZeile ;+ " " + Str(Len(tmpZeile))
ParseMapScript(tmpZeile)
EndIf
Until tmpZeile = ""
EndProcedure
Procedure ParseMapScript(strZeile.s)
DefType.s MapCMD, MapParam, strTemp
DefType.l ParmPtr, tmpFnktmp1, tmpFnktmp2
Dim MapArray.s(20)
MapCMD = StringField(strZeile, 1, " ")
MapParam = Right(strZeile, Len(strZeile) - FindString(strZeile, " ", 1))
For ParmPtr = 1 To 20
strTemp = Trim(StringField(MapParam, ParmPtr, ","))
MapArray(ParmPtr - 1) = strTemp
Next
Select LCase(MapCMD)
Case "#debug"
Debug MapArray(0)
Case "#map"
Dim MapTile.s(Val(MapArray(0)), Val(MapArray(1)))
MapSizeX = Val(MapArray(0))
MapSizeY = Val(MapArray(1))
Case "#tileset"
AddElement(TilePool())
tmpFnktmp1 = CatchSprite(#PB_Any, VBin(MapFile, MapArray(0),""))
UseBuffer(tmpFnktmp1)
TilePool()\ImageHandle = GrabSprite(#PB_Any, Val(MapArray(1)), Val(MapArray(2)), Val(MapArray(3)), Val(MapArray(4)))
TilePool()\TileWidth = Val(MapArray(3))
TilePool()\TileHeight = Val(MapArray(4))
TilePool()\Layer = Val(MapArray(5))
TilePool()\Option = Val(MapArray(6))
FreeSprite(tmpFnktmp1)
UseBuffer(-1)
Case "#display"
SelectElement(TilePool(), Val(MapArray(0)))
DisplaySprite(TilePool()\ImageHandle, 0,0)
FlipBuffers()
Case "#world"
For tmpFnktmp1 = 1 To MapSizeX
MapTile(tmpFnktmp1, Val(MapArray(0))) = Mid(MapArray(1), tmpFnktmp1, 1)
Next
EndSelect
EndProcedure
Procedure RenderTileWorld(*UsedCam.s2Dkamera)
DefType.l MapX, MapY
DefType.l MapCamX, MapCamY
For MapY = 1 To MapSizeY
For MapX = 1 To MapSizeX
SelectElement(TilePool(), Asc(MapTile(MapX, MapY)) - 1)
MapCamX = (MapX*TilePool()\TileWidth - TilePool()\TileWidth ) + *UsedCam\CamX
MapCamY = (MapY*TilePool()\TileHeight - TilePool()\TileHeight) + *UsedCam\CamY
DisplaySprite(TilePool()\ImageHandle, MapCamX, MapCamY)
Next
Next
EndProcedure