Leveleditor proggen?!?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

littleRabbit

Betreff: Leveleditor proggen?!?

BeitragDi, Jan 06, 2004 14:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

TheShadow

Moderator

BeitragDi, Jan 06, 2004 15:15
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jan 06, 2004 16:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Jan 11, 2004 13:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile
http://www.splattergamez.de

Kryan

BeitragSo, Jan 11, 2004 15:50
Antworten mit Zitat
Benutzer-Profile anzeigen
nehme doch einfach den, der bei projekte,kemonos world seite 1 ganz unten ist!

Jolinah

BeitragMo, Jan 12, 2004 2:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jan 13, 2004 14:28
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

BeitragDi, Jan 13, 2004 17:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

https://www.blitzforum.de/viewtopic.php?t=690 - hat solche für Jump'n'run dabei.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group