Leveleditor proggen?!?
Übersicht

![]() |
littleRabbitBetreff: Leveleditor proggen?!? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi!
Ich mach gerade ein art Jump 'n' Run. Aber mit der Levelprogrammierung... naja, ich bräucht halt nen Leveleditor, aber ich hab nicht so genaue Vorstellungen, wie ich einen machen soll/kann/muss. Ich meine von der Programmierung her. |
||
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
schau dir bank-befehle und writebytes/readbytes an
mit 1 befehl kannst du dann map laden/speichern mit peek/poke kannst du werte lesen/schreiben - das wären dann image-frames damit könntes du schon einfachen editor coden TIPP: lese zusatzinfos bei CreateBank |
||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
Till |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Versuche doch auch mal nen 2d array als datei zuspeichern
und dann wieder auszulesen. das nur so als kleiner start...dann kannst weiter sehn ich habe einfach mal für mein jumpnrun-test types genommen weil ich noch mit animations_frames u.s.w. gearbeitet hatte. aber wie gesagt code erstmal ne array save/load function und baue drauf auf. |
||
storzi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
du könntest im map editor alles mittels types zusammenstellen, dann beim speichern erst auszählen und so und dann im spiel als array einlesen, für besseren speed ![]() |
||
http://www.splattergamez.de |
![]() |
Kryan |
![]() Antworten mit Zitat ![]() |
---|---|---|
nehme doch einfach den, der bei projekte,kemonos world seite 1 ganz unten ist! | ||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es gibt natürlich viele verschiedene Methoden wie man einen Level Editor Proggen kann, hab hier mal nen Beispiel von mir.
Der Code würde eigentlich laufen, aber er benötigt eine Include von mir die ich jetzt hier nicht Poste. Diese Include benutze ich um Fenster und Buttons darzustellen (GUI). Somit läuft der Code also nicht. Aber ich hoffe er hilft dir Trotzdem weiter. Der Editor kann 3 Layer speichern. Ich habs so programmiert das man nur angeben kann wieviele verschiedene Tiles vorhanden sind für jeden Layer. Dann werden die Tile Bilder in Arrays geladen aus Dateien die immer mit dem gleichen Namen Anfangen. back1.png, back2.png usw.. collision1.png, collision2.png usw. top1.png, top2.png usw.. Ausserdem 3 Funktionen, NewMap(), LoadMap(),SaveMap() Der Parameter bei NewMap() ist Anzahl Screens. Also wenn ich NewMap(2) mache dann wird das level array redimensioniert auf 32 * 2 tiles. In der Höhe sind immer 24 Teiles, weil ich in meinem Game nur horizontal scrollen wollte. Code: [AUSKLAPPEN] Include "tools.bb" ;Fenster, Eingabefelder usw. Graphics 1024,768,32,1 SetBuffer BackBuffer() ;Timer --------- fpstimer = CreateTimer(60) ;Konstanten ----------------------- Const LAYER_BACK = 0 Const LAYER_COLLISION = 1 Const LAYER_TOP = 2 ;Variablen ---------------- Global layer = LAYER_COLLISION Global screens = 0 Global scroll_x = 0 Global edit_x = 0 Global edit_y = 0 Global time_scroll = 0 Global saved = 0 Dim level(0,0,0) Dim max_tiles(3) max_tiles(LAYER_BACK) = 0 max_tiles(LAYER_COLLISION) = 6 max_tiles(LAYER_TOP) = 0 ;Grafiken ------------------------- Dim back(max_tiles(LAYER_BACK)) Dim collision(max_tiles(LAYER_COLLISION)) Dim top(max_tiles(LAYER_TOP)) For x = 1 To max_tiles(LAYER_BACK) back(x) = LoadImage("gfx/back" + x + ".png") If back(x) Then MaskImage back(x),255,0,255 Next For x = 1 To max_tiles(LAYER_COLLISION) collision(x) = LoadImage("gfx/collision" + x + ".png") If collision(x) Then MaskImage collision(x),255,0,255 Next For x = 1 To max_tiles(LAYER_TOP) top(x) = LoadImage("gfx/top" + x + ".png") If top(x) Then MaskImage top(x),255,0,255 Next Global img_mouse = LoadImage("gfx/mouse.png") ;Sounds --------------------------- ;Fonts ---------------------------- Global tahoma = LoadFont("Tahoma",12) SetFont tahoma ;Tools (tools.bb) ----------------- Global i1.inputbox = InputBox(840,50,150,"Map:","test.map",Null) Global b1.button = Button(888,150,80,20,"New Map",200,Null) Global b2.button = Button(888,200,80,20,"Load Map",200,Null) Global b3.button = Button(888,250,80,20,"Save Map",200,Null) Global w1.window Global i2.inputbox Global b4.button Global w2.window Global b5.button Global b6.button Global w3.window ;Vorbereitungen +++++++++++++++++++ NewMap(2) ;********** HAUPT PROGRAMM ***************************** While Not KeyHit(1) WaitTimer(fpstimer) Cls Tiles() Menu() Flip Wend Free() End ;******************************************************** ;============== FUNKTIONEN ================== ;------ TILES --------- Function Tiles() For y = 0 To 24 For x = 0 To 26 If level(x + scroll_x,y,LAYER_BACK) <> 0 Then DrawImage back(level(x + scroll_x,y,LAYER_BACK)),x * 32,y * 32 If level(x + scroll_x,y,LAYER_COLLISION) <> 0 Then DrawImage collision(level(x + scroll_x,y,LAYER_COLLISION)),x * 32,y * 32 If level(x + scroll_x,y,LAYER_TOP) <> 0 Then DrawImage top(level(x + scroll_x,y,LAYER_TOP)),x * 32,y * 32 Next Next Text 5,5,scroll_x End Function ;------ MENU ---------- Function Menu() Color 60,100,140 Rect 832,0,192,768 Color 255,255,255 Rect 832,0,192,768,0 Rect edit_x * 32,edit_y * 32,32,32,0 ;Maus If MouseX() < 832 If MouseHit(1) And w1 = Null And w2 = Null edit_x = (MouseX() / 32) edit_y = (MouseY() / 32) EndIf If MouseDown(2) And w1 = Null And w2 = Null If MilliSecs() >= time_scroll If MouseX() > 800 Then scroll_x = scroll_x + 1 : time_scroll = MilliSecs() + 50 If MouseX() < 32 Then scroll_x = scroll_x - 1 : time_scroll = MilliSecs() + 50 EndIf EndIf EndIf ;Rechts If KeyDown(205) And (Not MouseDown(2)) And MilliSecs() >= time_scroll edit_x = edit_x + 1 time_scroll = MilliSecs() + 100 If edit_x > 25 edit_x = 25 scroll_x = scroll_x + 1 EndIf EndIf ;Links If KeyDown(203) And (Not MouseDown(2)) And MilliSecs() >= time_scroll edit_x = edit_x - 1 time_scroll = MilliSecs() + 100 If edit_x < 0 edit_x = 0 scroll_x = scroll_x - 1 EndIf EndIf ;Rauf If KeyDown(200) And (Not MouseDown(2)) And MilliSecs() >= time_scroll If edit_y > 0 Then edit_y = edit_y - 1 : time_scroll = MilliSecs() + 100 EndIf ;Runter If KeyDown(208) And (Not MouseDown(2)) And MilliSecs() >= time_scroll If edit_y < 23 Then edit_y = edit_y + 1 : time_scroll = MilliSecs() + 100 EndIf If scroll_x > (screens - 1) * 32 + 6 Then scroll_x = (screens - 1) * 32 + 6 If scroll_x < 0 Then scroll_x = 0 ;Leertaste - Tile ändern If KeyHit(57) And i1\active = 0 x = edit_x + scroll_x y = edit_y level(x,y,layer) = level(x,y,layer) + 1 If level(x,y,layer) > max_tiles(layer) Then level(x,y,layer) = 0 saved = 0 EndIf If KeyHit(2) Then layer = LAYER_BACK If KeyHit(3) Then layer = LAYER_COLLISION If KeyHit(4) Then layer = LAYER_TOP If b1\clicked = 1 If Not saved If w2 = Null w2 = Window(387,334,150,100,"Löschen?","Aktuelle Map löschen?",0,0,0,0) b5 = Button(0,40,40,20,"Ja",200,w2) b6 = Button(60,40,40,20,"Nein",200,w2) EndIf Else If w1 = Null w1 = Window(412,334,100,100,"Anzahl Screens","",0,0,0,0) i2 = InputBox(20,20,40,"Screens:","",w1) b4 = Button(20,50,40,20,"Ok",200,w1) EndIf EndIf b1\clicked = 0 EndIf If Not w1 = Null If b4\clicked = 1 If i2\txt$ = "" Or i2\txt$ = "0" Then i2\txt$ = 1 NewMap(i2\txt$) CloseWindow(w1) EndIf If KeyHit(1) Then CloseWindow(w1) : FlushKeys() EndIf If Not w2 = Null If b5\clicked = 1 If w1 = Null w1 = Window(412,334,100,100,"Anzahl Screens","",0,0,0,0) i2 = InputBox(20,20,40,"Screens:","",w1) b4 = Button(20,50,40,20,"Ok",200,w1) EndIf CloseWindow(w2) : w2 = Null EndIf If Not w2 = Null If b6\clicked = 1 CloseWindow(w2) EndIf EndIf EndIf If b2\clicked > 0 If w3 = Null w3 = Window(387,334,150,100,"Status","Map loaded.",0,0,1,MilliSecs() + 2000) LoadMap("maps\" + i1\txt$) b2\clicked = 0 EndIf EndIf If b3\clicked > 0 If w3 = Null w3 = Window(387,334,150,100,"Status","Map saved.",0,0,1,MilliSecs() + 2000) SaveMap("maps\" + i1\txt$) b3\clicked = 0 EndIf EndIf DrawTools() DrawImage img_mouse,MouseX(),MouseY() End Function ;------ NewMap ----------- Function NewMap(count) num = count * 32 screens = count Dim level(num,24,3) For y = 0 To 23 For x = 0 To num - 1 level(x,y,0) = 0 level(x,y,1) = 0 level(x,y,2) = 0 Next Next scroll_x = 0 saved = 1 End Function ;------ LoadMap ---------- Function LoadMap(file$) f = ReadFile(file$) If Not f Then Return 0 num = ReadInt(f) screens = num / 32 NewMap(screens) For y = 0 To 23 For x = 0 To num - 1 level(x,y,0) = ReadInt(f) level(x,y,1) = ReadInt(f) level(x,y,2) = ReadInt(f) Next Next CloseFile(f) saved = 1 End Function ;------ SaveMap ---------- Function SaveMap(file$) f = WriteFile(file$) If Not f Then Return 0 num = screens * 32 WriteInt f,num For y = 0 To 23 For x = 0 To num - 1 WriteInt f,level(x,y,0) WriteInt f,level(x,y,1) WriteInt f,level(x,y,2) Next Next CloseFile(f) saved = 1 End Function ;------ FREE ---------- Function Free() For x = 1 To max_tiles(LAYER_BACK) If back(x) Then FreeImage back(x) Next For x = 1 To max_tiles(LAYER_COLLISION) If collision(x) Then FreeImage collision(x) Next For x = 1 To max_tiles(LAYER_TOP) If top(x) Then FreeImage top(x) Next FreeImage img_mouse End Function |
||
Gast |
![]() Antworten mit Zitat |
|
---|---|---|
hallo !
jetzt, da ich weis, wie ich einen leveleditor erstelle, würe ich gerne wissen, wo es im internet vorgefertigte grafiken für ein jump&run gibt. mfg MORT |
||
![]() |
simi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
https://www.blitzforum.de/viewtopic.php?t=690 - hat solche für Jump'n'run dabei. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group