Seite 2 von 2
Verfasst: 30.12.2004 00:08
von MVXA
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.
Verfasst: 30.12.2004 00:20
von Kaeru Gaman
ich arbeite immer mit nem array für die tiles.
gehts auch schneller ???
btw: @littlefurz: deine signatur ist
superb
@XSoft:
stell mal konkretere fragen, bitte...
Verfasst: 30.12.2004 01:19
von MVXA
Die Linked Lists machen meine Engine nur etwas langsamer...
Verfasst: 30.12.2004 13:12
von Leo
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
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
und jetzt zählst du diese Kamera Variablen einfach immer auf alles drauf was angezeigt wird, zum Beispiel auf das Bild eines hauses:
Code: Alles auswählen
DisplaySprite(#bild_haus,HausPosX+CameraX,HausPosY+CameraY)
noch fragen??

Verfasst: 30.12.2004 16:10
von MVXA
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:
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