FFA TileEngine Test in B3D (2D Variation)
Übersicht

![]() |
NeoxitBetreff: FFA TileEngine Test in B3D (2D Variation) |
![]() Antworten mit Zitat ![]() |
---|---|---|
Heydiho,
hatte n bissl langeweile und habe mal angefangen eine Tileengine zu entwickeln. Derzeitig ist der Editor vorhanden, welcher es erlaubt tiles in der größe 32x32 (sollte auch mit anderen formaten funktionieren (einfach die tilesize variable auf z.b. 64 ändern)) aus dem tiles ordner zu laden. zu beachten ist, dass keine andere dateien ausser image dateien darin befinden (ausgenommen von der "tollen" -.- Thumbs.db (diese wird übersprungen)) Man kann den namen der map (für den Dateinamen der Datei) und die x größe so wie die y größe festlegen. Es sind noch einige bugs vorhanden. Aber benutzbar ist es durchaus schon. Dann ist noch das "Ladeprogramm" welches diese map dann lädt und dann wieder rekonstruiert. Ich wollte als nächstes noch ein weiteren layer reinmachen, welches es dann erlaubt, gegenstände auf einer bereits vorhandenen tile z.b. darzustellen. Sprich 2 ebenen. So wie die bestimmung durch rechtsklick der layer, welche begehbar sind (passable) und welche nicht passable sind. (Daher existiert auch eine pass variable im type ![]() Nunja hier habt ihr screenshots und den Quellcode dafür. Vllt könnt ihr es ja gebrauchen ![]() Der Quellcode: (Mapper) Code: [AUSKLAPPEN] Graphics 800,600,32,2 SetBuffer BackBuffer() ;types Type tiles_laden Field id,img,name$,x,y End Type Type tiles_map Field id,x,y,img,img_id End Type ;images Global img_cursor = LoadImage("gfx/img_cursor.PNG") Global cursor = LoadImage("gfx/cursor_dummy.PNG") Global selektor = LoadImage("misc/rand.PNG") Global map_empty_tile = LoadImage("misc/map.PNG") ;informationen dir_tiles$ = ("tiles") dir_gfx$ = ("gfx") dir_misc$ = ("misc") dir_maps$ = ("maps") tilesize = 32 ;globals Global cursor_x Global cursor_y Global cursor_tileID Global TTile_ID = 1 Global palette_tile_x = 450 Global palette_tile_y = 0 Global map_name$ = Input("Map Name: ") Global map_x_max = Input("Map Breite: ") Global map_y_max = Input("Map Höhe: ") Global map_x Global map_y Global map_tile_id For i = 1 To map_y_max For j = 1 To map_x_max TMapTile.tiles_map = New tiles_map TMapTile\id = map_tile_id + 1 TmapTile\x = map_x TmapTile\y = map_y TmapTile\img = map_empty_tile map_x = map_x + tilesize Next map_y = map_y + tilesize map_x = 0 Next ;daten laden dir_aktuell = ReadDir(dir_tiles$) Repeat file$=NextFile$(dir_aktuell) ; Wenn keine keine Weitere File gefunden wurde, laden ende. If file$="" Then Exit ;If file$ = ("2.PNG") Then ; Wenn es eine file ist (1) und NICHT Thumbs.db heißt dann lade die file und weise den entsprechenden Type zu. If FileType(dir_tiles$+"\"+file$) = 1 And file$ <> ("Thumbs.db") Then TTile.tiles_laden = New tiles_laden TTile\id = TTile_ID TTile\img = LoadImage(dir_tiles$+"\"+file$) TTile\name$ = file$ TTile\x = palette_tile_x TTile\y = palette_tile_y palette_tile_x = palette_tile_x + tilesize If palette_tile_x > 750 Then palette_tile_x = 450 palette_tile_y = palette_tile_y + tilesize EndIf TTile_ID = TTile_ID + 1 End If ;EndIf Forever Repeat Cls cursor_x = MouseX() cursor_y = MouseY() ;Map Palette malen For TMapTile.tiles_map = Each tiles_map DrawImage TMapTile\img,TMapTile\x,TMapTile\y If ImagesOverlap(cursor,cursor_x,cursor_y,TMapTile\img,TMapTile\x,TMapTile\y) DrawImage selektor,TMapTile\x,TMapTile\y If MouseDown(1) And cursor_tileID <> 0 Then For ttile.tiles_laden = Each tiles_laden If ttile\id = cursor_tileID Then TMapTile\img = ttile\img TMapTile\img_id = ttile\id EndIf Next EndIf EndIf Next ;TilePalette malen For ttile.tiles_laden = Each tiles_laden DrawImage ttile\img,ttile\x,ttile\y palette_tile_x = palette_tile_x + tilesize If ImagesOverlap (cursor,cursor_x,cursor_y,ttile\img,ttile\x,ttile\y) Then Text 0,0,("ID: "+ttile\id) DrawImage selektor,ttile\x,ttile\y If MouseHit(1) Then cursor_tileID = ttile\id EndIf EndIf Next ;Speicherfunktion If KeyHit(57) Then ChangeDir(dir_maps$) save_file = WriteFile(map_name$+".map") WriteLine(save_file,tilesize) WriteLine(save_file,map_x_max) WriteLine(save_file,map_y_max) ;For save_tileID = 1 To (map_x_max*map_y_max) For TMapTile.tiles_map = Each tiles_map WriteLine(save_file,TMapTile\img_id) Next ;Next CloseFile(save_file) EndIf Text 500,500,cursor_tileID DrawImage cursor,cursor_x,cursor_y DrawImage img_cursor,cursor_x,cursor_y Flip Until KeyHit(1) End Der Quellcode: (Loader) Code: [AUSKLAPPEN] Graphics 800,600,32,2 SetBuffer BackBuffer() ;Types Type MapLay1 Field id,img,x,y,passable End Type Type TileSet Field id,img End Type ;Images img_player = LoadImage ("player.PNG") ;Infos ;Globals dir_tiles$ = ("tiles") dir_gfx$ = ("gfx") dir_misc$ = ("misc") dir_maps$ = ("maps") Global map_x Global map_y Global map_x_max Global map_y_max Global tilesize Global tile_id ;Tiles aus den Tileordner Laden und die entsprechende ID zuweisen dir_aktuell = ReadDir(dir_tiles$) Repeat file$=NextFile$(dir_aktuell) If file$="" Then Exit If FileType(dir_tiles$+"\"+file$) = 1 And file$ <> ("Thumbs.db") Then tile_id = tile_id + 1 tile.tileset = New tileset tile\id = tile_id tile\img = LoadImage(dir_tiles$+"\"+file$) EndIf Forever ;Mapnamen Eingeben map_file_overlay1_name$ = Input("Namen der zu Ladenen Map: ") ;Map Laden map_file_overlay1 = OpenFile(dir_maps$+"/"+map_file_overlay1_name$+".map") ;3 Headinformationen der Mapdatei laden map_tilesize = ReadLine(map_file_overlay1) map_x_max = ReadLine(map_file_overlay1) map_y_max = ReadLine(map_file_overlay1) ;In den Type Laden For i = 1 To map_y_max For j = 1 To map_x_max map1.maplay1 = New maplay1 map1\id = ReadLine(map_file_overlay1) map1\x = map_x map1\y = map_y For tile.tileset = Each tileset If map1\id = tile\id Then map1\img = tile\img EndIf Next map_x = map_x + map_tilesize Next map_x = 0 map_y = map_y + map_tilesize Next CloseFile(map_file_overlay1) ;//////HAUPTSCHLEIFE/////// Repeat Cls For map1.maplay1 = Each maplay1 DrawImage map1\img,map1\x,map1\y Next Flip Until KeyHit(1) End Und hier nochmal der Download (Quelldateien und Images): http://www.frequenzy.net/stuff/mapper.rar Wenn jemand interesse hat, daran weiterzubasteln, oder ihn evtl sogar verwenden kann, wäre es nett wenn er mir doch wenigstens nen kleines post hier lässt. Wer natürlich nicht mit einer 100 % cpu auslastung testen will, sollte noch eine framebegrenzung einbauen. Ansonsten ist es freeforall für die, die mal wissen wollten wie soetwas in etwa funktioniert. Es gibt mit sicherheiten elegantere Lösungen für ein solches mapping programm. Vllt kann hier der ein oder andere ja noch Tipps geben. Ansonsten viel spaß damit ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group