[Tutorial] Map-Editor für RPGs

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

NDC

Betreff: [Tutorial] Map-Editor für RPGs

BeitragDo, März 25, 2004 11:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leutz,

hab vor ein paar Tagen Blitz Basic entdeckt und gleich alles in mich geschlungen.
Jetzt bin ich auf die Idee gekommen ein kleines RPG-Spielchen im Stil von Zelda und co. zu programmieren.

Um zum Punkt zu kommen, da das meine erste Programmiersprache ist hoff ich das es selbstverständlich ist das ich nicht weiß wo genau ich anfangen soll.
Was ich brauche ist ein Editor mit dem ich die Maps aufbauen kann.

Klar kann ich von Niemandem verlangen das er mir die ganze Arbeit abnimmt, aber kann mir jemand irgendwie sagen woran ich mich da halten soll? Wie gesagt, weiß nicht wo ich anfangen soll

Fettes Danke im Voraus!!
MfG
NDC
  • Zuletzt bearbeitet von NDC am So, März 28, 2004 15:28, insgesamt einmal bearbeitet

Jan_

Ehemaliger Admin

BeitragDo, März 25, 2004 12:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ähm, das ist, jetzt Hart, der Anfang von dir ist gut, aber, da du erst einpaar tage, musst du es erstmal richtig lernen!

Sachen, die du umbedingt verstehen musst:

-Mathematik Smile
- Dim - Arreys
- Type - Arreys
- If Then Elseif
- Schleifen (Repeat until und wend while)
- Functionen

Wenn du das alles richtig verstehtst, erkläre ich es dir gerne weiter, aber das sind die grund voraussetzungen, für alles!
between angels and insects

NDC

BeitragDo, März 25, 2004 12:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Keine Angst, ich hab 3 verschiedene Tutorials hinter mir wo ich mir die ganzen Grundkenntnisse angeeignet hab, hatte viel Zeit *g*

Kann vielleicht noch nicht alles Optimal nutzen aber das gehört zum lernen dazu denk ich mal Smile

Jan_

Ehemaliger Admin

BeitragDo, März 25, 2004 12:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, nun, Wie Bastel ich einen RPG Editor, Teil1
Für B3D und B2D, eventuell läuft es auch auf Blitz +

Wir initialisieren die Grafik
Graphics 800,600,32,2
setbuffer backbuffer()

Wir legen ein 2D Arrey an
Dim Map(31,31)

Wir Laden ein tileset
Loadanimimage("Bilder.bmp",32, 32, 0, 5)

Wir eröffnen die schleife
Repeat

Grafich noch etwas
Cls
Text 0,0,Hallo, das wir ein Editor
Flip(true)

Wir schließen die schleife
Until keyhit(1)

End


Hast du mal ein Tileset?Dan könnte man es etwas besser machen!

Code: [AUSKLAPPEN]
Graphics 800,600,32,2
setbuffer backbuffer()

Dim Map(31,31)

Loadanimimage("Bilder.bmp",32, 32, 0, 5)

Repeat

   Cls
   Text 0,0,"Hallo, das wird ein Editor"
   Flip(true)

Until keyhit(1)

End
between angels and insects

Jan_

Ehemaliger Admin

BeitragDo, März 25, 2004 12:41
Antworten mit Zitat
Benutzer-Profile anzeigen
So, wenn du das hast, ist der nächste Schritt,

Wenn du was nicht ganz verstehst, bitte sofort Stopp sagen!
sonst, wird aus dir leider kein jfk oder ST, Bruzard, J0k3 oder Jan_ oder, wie sie alle heißen ...

Code: [AUSKLAPPEN]
;Grafik initialisieren
Graphics 800,600,32,2
SetBuffer BackBuffer()

;Arreys und Globals
Dim Map(31,31)
Global Tileset

;load medias
Load_Medias()

Local X,Y
Repeat
   Cls
   Draw() ; Zeichnet die Tiles
   Text 0,0,"RPG Editor - Entwicklungsstufe 2"
   Flip(True)
Until KeyHit(1)

End

Function Draw(X=0,Y=0)
Local Tile_X,Tile_Y
   For Tile_X = 0 To 31
      For Tile_Y = 0 To 31
         DrawBlock Tileset,Tile_X*32,Tile_Y*32,Map(Tile_X,Tile_Y)
      Next
   Next
End Function

Function Load_Medias()
Tileset = LoadAnimImage("tiles.bmp",32, 32, 0, 8)
End Function
between angels and insects

Jan_

Ehemaliger Admin

BeitragDo, März 25, 2004 12:48
Antworten mit Zitat
Benutzer-Profile anzeigen
So, nun noch mein geniales bildchen dazu. wenn jemand etwas besseres hat, immer zu!

Jan's Geniales _Tile-set (ca.1KB) -->Hier Klicken<--

Ach ja, Rechtschreibe fehler sind beabsichtigt, und dienen der allgemeinen Belustigung!
between angels and insects

Jan_

Ehemaliger Admin

BeitragDo, März 25, 2004 14:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Bis hierhin alles verstanden?
Ja,

Code: [AUSKLAPPEN]
;Grafik initialisieren
Graphics 800,600,32,2
SetBuffer BackBuffer()

;Arreys und Globals
Dim Map(31,31)
Global Tileset

Load_Map();Lädt Map

;load medias
Load_Medias()

Local X,Y
Local R,G,B,Rae=1,Gae=2,Bae=3
Repeat
   ;------------------------------------------------------
   ;Kleiner Optisch schöner Effekt aber sonst keum nutzten
   R=R+Rae
   G=G+Gae
   B=B+Bae
   If R> 255 Then R= 255: Rae = Rand(-5,-1)
   If G> 255 Then G= 255: Gae = Rand(-5,-1)
   If B> 255 Then B= 255: Bae = Rand(-5,-1)
   If R< 0 Then R= 0: Rae = Rand(1,5)
   If G< 0 Then G= 0: Gae = Rand(1,5)
   If B< 0 Then B= 0: Bae = Rand(1,5)
   Color R,G,B
   ;------------------------------------------------------
;   Cls  ; CLS wird nicht mehr benötigt, weil wir Tiles bentzten!
   Draw() ; Zeichnet die Tiles
   Mouse(MouseX(),MouseY()) ; Aufrufen, der Maus Zeichenfunction
   Text 0,0,"RPG Editor - Entwicklungsstufe 3"
   Flip(True)
Until KeyHit(1)

End

Function Mouse(MMX,MMY)
   Rect Int(MMX/32)*32,Int(MMY/32)*32,32,32,0 ; Zeichnet Das 4Eck, an der Maus-Position
End Function

Function Load_Map(MapName$="")
Local Tile_X,Tile_Y
   If MapName$="" Then ; Falls keine Map vorhanden ist, neue erstellen
      For Tile_X = 0 To 31
         For Tile_Y = 0 To 31
            Map(Tile_X,Tile_Y) = 0 ; Macht bei allen Tiles, Bild "0"
         Next
      Next
   Else
      ;Hier das Leden der Datei herrein
   End If
End Function

Function Draw(X=0,Y=0)
Local Tile_X,Tile_Y
   For Tile_X = 0 To 31
      For Tile_Y = 0 To 31
         DrawBlock Tileset,Tile_X*32,Tile_Y*32,Map(Tile_X,Tile_Y)
      Next
   Next
End Function

Function Load_Medias()
   Tileset = LoadAnimImage("tiles.bmp",32, 32, 0, 8)
End Function


So, Das auch, wenn ja, dann
Name, Datum, Klasse, 1. Klassenarbeit
between angels and insects

NDC

BeitragDo, März 25, 2004 14:53
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm... ...
So schwer ist das alles eigendlich garnicht, nur auf die Idee zu kommen kann manchmal echt lange dauern, oder? Ich glaub ich hätte für das alles wahrscheinlich länger als eine Woche gebraucht. ^^' Shocked Confused

Jedenfalls fettes Danke das du dir die Mühe machst. Very Happy

Warte schon gespannt auf die nächste Lektion Wink
Es gibt nur 10 Arten von Menschen,die die das Binär-System verstehen und die,die es nicht verstehen.

Jan_

Ehemaliger Admin

BeitragDo, März 25, 2004 14:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Was ist neu:
Bei Mausklick, Wird das neue Tile gesetzt, Tile auswahl (mit + & - ), Mehr Variablen benutzt --> Variabler Smile

Code: [AUSKLAPPEN]
;Grafik initialisieren
Graphics 800,600,32,2
SetBuffer BackBuffer()

;Arreys und Globals
Dim Map(31,31)
Global Tileset, TileSetDatei$
Global Tile_Auswahl
Global Max_Tile

;Tasten
Const Key_Plus  = 78
Const Key_Minus  = 74

Load_Map();Lädt Map

;load medias
Load_Medias()

Local X,Y
Local R,G,B,Rae=1,Gae=2,Bae=3
Repeat
   Keyboard()
   ;------------------------------------------------------
   ;Kleiner Optisch schöner Effekt aber sonst keum nutzten
   R=R+Rae
   G=G+Gae
   B=B+Bae
   If R> 255 Then R= 255: Rae = Rand(-5,-1)
   If G> 255 Then G= 255: Gae = Rand(-5,-1)
   If B> 255 Then B= 255: Bae = Rand(-5,-1)
   If R< 0 Then R= 0: Rae = Rand(1,5)
   If G< 0 Then G= 0: Gae = Rand(1,5)
   If B< 0 Then B= 0: Bae = Rand(1,5)
   Color R,G,B
   ;------------------------------------------------------
;   Cls  ; CLS wird nicht mehr benötigt, weil wir Tiles bentzten!
   Draw() ; Zeichnet die Tiles
   Mouse(MouseX(),MouseY()) ; Aufrufen, der Maus Zeichenfunction
   Text 0,0,"RPG Editor - Entwicklungsstufe 4"
   Text 0,15,"+ & - Zum Tiles Wechseln"
   Flip(True)
Until KeyHit(1)

End

Function Keyboard()
   ;Auswahl der Tiles, vorübergehend mit + und -
   If KeyHit(78) Then Tile_Auswahl=Tile_Auswahl+1
   If KeyHit(74) Then Tile_Auswahl=Tile_Auswahl-1
   If Tile_Auswahl<0 Then Tile_Auswahl=Max_Tile
   If Tile_Auswahl>Max_Tile Then Tile_Auswahl=0
End Function

Function Mouse(MMX,MMY)
   Local Tile_X,Tile_Y
   Tile_X = Int(MMX/32)
   Tile_Y = Int(MMY/32)
   DrawBlock tileset,Tile_X*32,Tile_Y*32,Tile_Auswahl ;Zeichnet den Block, an die Mausposition, befohr er gesetzt wurde
   Rect Tile_X*32-1,Tile_Y*32-1,34,34,0 ; 4Eck noch etwas vergrößern
   Rect Tile_X*32,Tile_Y*32,32,32,0 ; Zeichnet Das 4Eck, an der Maus-Position
   If MouseDown(1) Then
;----------------------------------------------------
;Das kommt später
;      If Gui_overlap Then
      
;      End If
;----------------------------------------------------
      Map(Tile_X,Tile_Y)=Tile_Auswahl
   End If
End Function

Function Load_Map(MapName$="")
Local Tile_X,Tile_Y
   If MapName$="" Then ; Falls keine Map vorhanden ist, neue erstellen
      For Tile_X = 0 To 31
         For Tile_Y = 0 To 31
            Map(Tile_X,Tile_Y) = 0 ; Macht bei allen Tiles, Bild "0"
         Next
      Next

      TileSetDatei$ = "tiles.bmp"; Wird Später noch aus der Datei gelesen      
   Else
      ;Hier das Laden der Datei herrein
   End If

   Return TileSetDatei$
End Function

Function Draw(X=0,Y=0)
Local Tile_X,Tile_Y
   For Tile_X = 0 To 31
      For Tile_Y = 0 To 31
         DrawBlock Tileset,Tile_X*32,Tile_Y*32,Map(Tile_X,Tile_Y)
      Next
   Next
End Function

Function Load_Medias()
      Max_Tile = 8 ; Wird Später noch aus der Datei gelesen
   Tileset = LoadAnimImage(TileSetDatei$,32, 32, 0, Max_Tile)
End Function
between angels and insects
  • Zuletzt bearbeitet von Jan_ am Do, März 25, 2004 15:15, insgesamt einmal bearbeitet

NDC

BeitragDo, März 25, 2004 14:56
Antworten mit Zitat
Benutzer-Profile anzeigen
War schneller als du *lach* Wink

Ned bös sein, bin zwar ständig online doch nicht immer am PC, deswegen kann ich dir auch nicht immer schreiben das ich bisher alles kapiert hab. Doch ich werd mich schon täglich melden sofern Schule und Arbeit das zulässt.

Nochmals Danke
Es gibt nur 10 Arten von Menschen,die die das Binär-System verstehen und die,die es nicht verstehen.

Jan_

Ehemaliger Admin

BeitragDo, März 25, 2004 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
So, jetzt funktioniert noch laden und speichern!
So welche verbrechen,mit Data, fangen wir erst garnicht an!
Noch ein kleiner Bug behoben,hier und dort was rumgepinnselt, schaue dir einfach,die veränderungen an!

Kann uns mal jemand seine Gui bereitstellen, das wir sie gleich einarbeiten? ???bitte bitte???


Code: [AUSKLAPPEN]
;Grafik initialisieren
Graphics 800,600,32,2
SetBuffer BackBuffer()

;Arreys und Globals
Dim Map(31,31)
Global Tileset, TileSetDatei$
Global Tile_Auswahl
Global Max_Tile

;Tasten
Const Key_Plus  = 78
Const Key_Minus  = 74
Const Key_F5 = 63

Load_Map("temp.map");Lädt Map

;load medias
Load_Medias()

Local X,Y
Local R,G,B,Rae=1,Gae=2,Bae=3
Repeat
   Keyboard()
   ;------------------------------------------------------
   ;Kleiner Optisch schöner Effekt aber sonst keum nutzten
   R=R+Rae
   G=G+Gae
   B=B+Bae
   If R> 255 Then R= 255: Rae = Rand(-5,-1)
   If G> 255 Then G= 255: Gae = Rand(-5,-1)
   If B> 255 Then B= 255: Bae = Rand(-5,-1)
   If R< 0 Then R= 0: Rae = Rand(1,5)
   If G< 0 Then G= 0: Gae = Rand(1,5)
   If B< 0 Then B= 0: Bae = Rand(1,5)
   Color R,G,B
   ;------------------------------------------------------
;   Cls  ; CLS wird nicht mehr benötigt, weil wir Tiles bentzten!
   Draw() ; Zeichnet die Tiles
   Mouse(MouseX(),MouseY()) ; Aufrufen, der Maus Zeichenfunction
   Text 0,0,"RPG Editor - Entwicklungsstufe 4"
   Text 0,15,"+ & - Zum Tiles Wechseln"
   Text 0,30,"F5 zum Speichern"
   Flip(True)
Until KeyHit(1)

End

Function Keyboard()
   ;Auswahl der Tiles, vorübergehend mit + und -
   If KeyHit(Key_F5) Then Save_Map
   If KeyHit(Key_Plus) Then Tile_Auswahl=Tile_Auswahl+1
   If KeyHit(Key_Minus) Then Tile_Auswahl=Tile_Auswahl-1
   If Tile_Auswahl<0 Then Tile_Auswahl=Max_Tile-1
   If Tile_Auswahl>Max_Tile-1 Then Tile_Auswahl=0
End Function

Function Mouse(MMX,MMY)
   Local Tile_X,Tile_Y
   Tile_X = Int(MMX/32)
   Tile_Y = Int(MMY/32)
   DrawBlock tileset,Tile_X*32,Tile_Y*32,Tile_Auswahl ;Zeichnet den Block, an die Mausposition, befohr er gesetzt wurde
   Rect Tile_X*32-1,Tile_Y*32-1,34,34,0 ; 4Eck noch etwas vergrößern
   Rect Tile_X*32,Tile_Y*32,32,32,0 ; Zeichnet Das 4Eck, an der Maus-Position
   If MouseDown(1) Then
;----------------------------------------------------
;Das kommt später
;      If Gui_overlap Then
      
;      End If
;----------------------------------------------------
      Map(Tile_X,Tile_Y)=Tile_Auswahl
   End If
End Function

Function Load_Map(MapName$="")
Local Tile_X,Tile_Y
   If MapName$<>"" Then ; Lädt, wenn ein Map Name angegeben wurde
      Read_Datei=ReadFile(MapName$)
      If read_Datei <> 0 Then ; Falls, keine Datei davon vorhanden, wird nicht geladen, sondern neue erstellt
         TileSetDatei$ = ReadLine$(Read_Datei)
         For Tile_X = 0 To 31
            For Tile_Y = 0 To 31
               Map(Tile_X,Tile_Y) = ReadByte(Read_Datei)
            Next
         Next
      Else
         MapName$ = ""
      EndIf
   End If
   If MapName$="" Then ; Falls keine Map vorhanden ist, neue erstellen
      For Tile_X = 0 To 31
         For Tile_Y = 0 To 31
            Map(Tile_X,Tile_Y) = 0 ; Macht bei allen Tiles, Bild "0"
         Next
      Next
      
      TileSetDatei$ = "tiles.bmp"; Wird Später noch aus der Datei gelesen      
   End If

   Return TileSetDatei$
End Function

Function Save_Map(Mapname$="temp.map") ;Speichert die Map
Local Tile_X,Tile_Y
   Write_Datei=WriteFile (Mapname$)
   WriteLine Write_datei, TileSetDatei$ ; Speichert Tile-set Name
   For Tile_X = 0 To 31
      For Tile_Y = 0 To 31
         WriteByte Write_Datei,Map(Tile_X,Tile_Y)
      Next
   Next
   CloseFile(Write_Datei)
End Function

Function Draw(X=0,Y=0)
Local Tile_X,Tile_Y
   For Tile_X = 0 To 31
      For Tile_Y = 0 To 31
         DrawBlock Tileset,Tile_X*32,Tile_Y*32,Map(Tile_X,Tile_Y) ;Teichnet, die Tiles
      Next
   Next
End Function

Function Load_Medias()
   Max_Tile = 8 ; Wird Später noch aus der Datei gelesen
   Tileset = LoadAnimImage(TileSetDatei$,32, 32, 0, Max_Tile)  ;Lädt das Tile-set
End Function
between angels and insects

NDC

BeitragDo, März 25, 2004 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du das eigendlich alles in dieser kurzen Zeit selbst programmiert Jan_?

Respekt ! Scheiße, das muss ich echt mal verdauen, ich glaub von allein wär ich echt nie drauf gekommen... Shocked Shocked Shocked

Werd mir jetzt einfach mal den aktuellen Code Zeile für Zeile durchlesen und versuchen alles nachzuvollziehen.
Thx.

MfG
NDC
Es gibt nur 10 Arten von Menschen,die die das Binär-System verstehen und die,die es nicht verstehen.

Jan_

Ehemaliger Admin

BeitragDo, März 25, 2004 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, aber nur Nebenbei geschrieben,

Man gewöhnt sich mit der Zeit an, nicht mehr über die Sachen nach zudenken, sondern, seine im Kopf schon fertigen lösungen, nur noch zu verbinden, kompatibel zu machen und zuschreiben.

Zum vergleich, daran, habe ich ungefähr 30-60 min gessesen.
Die Leute, welche ich oben mal aufgezählt habe, sind alle sehr gute Proger in BB, bestimmt nicht alle guten, aber eine Ganz Passabele auswahl.
Ich Proge gerade DX-AS http://www.DX-AS.de

So, morgen, machen wir weiter, bisdahin, möchte ich, das du auf deinen eigenen Rechner, mal alle Zahlen änderst, schaust, was ich gerechnet habe, lle Befehle durchgehst, und überlegst, warum gerade diese!

Ich glaube, das kan in den Tut bereich.
between angels and insects

Michi1988

BeitragDo, März 25, 2004 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
What ne GUI. Blitz+?
Ich denke BB.

Und:
Wo sind die aufgezählten Leute die gut BB können?

Jan_

Ehemaliger Admin

BeitragFr, März 26, 2004 8:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Jan_ hat Folgendes geschrieben:
sonst, wird aus dir leider kein jfk oder ST, Bruzard, J0k3 oder Jan_ oder, wie sie alle heißen ...


So, wie gesagt, fehlen bestimmt viele, aber die sind mir gerade eingefallen

Das hier ist ne Gute Chance, das ich endlich mal nen RPG Editor Proge Smile

Achtet mal bitte im Tut forum auf das Tut von J0K3

Da niemand ne Gui gibt, machen wir uns selber eine, du öffnest im selben verzeichniss jetzt die Datei "Gui.bb" <-- Das wird eine Libary
between angels and insects
  • Zuletzt bearbeitet von Jan_ am Fr, März 26, 2004 16:05, insgesamt 2-mal bearbeitet

Jan_

Ehemaliger Admin

BeitragFr, März 26, 2004 9:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du diese Datei ausführst, passiert garnichts!
--> es ist eine Libary --> sie muss von anderen Programmen angesprochen werden.
(bitte im gleichen odrner abspeichern)
Gui.bb:
Code: [AUSKLAPPEN]
Type button ; legt ein arrey an, das Buttons speichert
   Field x
   Field y
   Field Image
   Field Width
   Field Height
   Field Txt$
   Field Clicked
   Field Clicktime
End Type



Function Button_Overlap(Colision_X,Colision_Y) ; Maustest, ob ein Button geklickt wird
   Local Rueckgabe
   For Knopf.Button = Each Button ; jeder Knopf
      If Colision_X > Knopf\X And Colision_X < Knopf\X+Knopf\width Then ; War die Maus im Button
         If Colision_Y > Knopf\Y And Colision_Y < Knopf\Y+Knopf\Height Then ; War die Maus im Button
            Rueckgabe=Knopf\image ; Rückgeben, welcher knopf gedrückt wurde
            Knopf\Clicktime = MilliSecs() ; Merken, wann geklickt wurde
            Knopf\Clicked = 1 ;Button wurde geklickt
         End If
      End If
   Next
   Return Rueckgabe ;Rückgeben des Buttons, der geklickt wurde
End Function

Function Draw_Buttons() ; Zeichnet die knöpfe
   Local Merk_Time
   Merk_time = MilliSecs() ; Millisecunden auffangen
   For Knopf.Button = Each Button ; jeder Knopf
      If Knopf\Clicked = 1 Then
         If (Merk_time-Knopf\Clicktime) > 200 Then Knopf\Clicked =0   ; läst den Button 0,2 sec gedrückt ausehen      
      End If
      DrawBlock Knopf\Image,Knopf\X,Knopf\Y,Knopf\Clicked ; Zeichnet die Knöpfe

   Next
End Function

Function Create_Button(Txt$,X=0,Y=0,Width=100,Height=25) ; erstellt nen knopf
   Local Breite,Hoehe
   
   Breite=StringWidth (Txt$) ; Breite des Textes in Pixel
   Hoehe=StringHeight (Txt$) ; Höhe des Textes in Pixel
   
   If Breite > Width -10 Then ;Fallse der Text größer ist, als das Image werden soll, wird das image vergrößert
      Width= Breite + 10
   End If
   If Hoehe > Height -4 Then
      Height= Hoehe + 4
   End If
   
   Neuer_Knopf.button = New button ; in einen Type die Daten Speichern
   Neuer_Knopf\x=X
   Neuer_Knopf\Y=Y
   Neuer_Knopf\Width=Width
   Neuer_Knopf\Height=Height
   Neuer_Knopf\txt$=txt$
   Neuer_Knopf\Clicked=0
   Neuer_Knopf\Image=CreateImage(Width,Height,2)
   
   SetBuffer ImageBuffer(Neuer_Knopf\Image,0) ; Bild zum Drauf Zeichnen wählen
   
   Color 180,180,180
   Rect 0,0,Width,Height ; Grauer Hintergrund
   
   Color 250,250,250 ;Helle Linien
   Line 0,0,0,Height
   Line 0,0,Width,0
   Line 1,1,1,Height
   Line 1,1,Width,1
   
   Color 100,100,100 ;Dunkle Linien
   Line Width-1,Height-1,1,Height-1
   Line Width-1,Height-1,Width-1,1
   Line Width-2,Height-2,2,Height-2
   Line Width-2,Height-2,Width-2,2
   
   Color 0,0,0
   Text (Width/2),(Height/2),Txt$,1,1 ;Text
   
   SetBuffer ImageBuffer(Neuer_Knopf\Image,1) ; Bild, für einen gedrückten Knopf
   
   Color 180,180,180
   Rect 0,0,Width,Height ; Grauer Hintergrund
   
      
   Color 100,100,100 ;Dunkle Linien
   Line 0,0,0,Height
   Line 0,0,Width,0
   
   Color 250,250,250 ;Helle Linien
   Line Width-1,Height-1,1,Height-1
   Line Width-1,Height-1,Width-1,1
   
   Color 0,0,0
   Text (Width/2),(Height/2),Txt$,1,1 ;Text
   
   Color 255,255,255 ; setzt wieder auf die Standart Farbe weiß!
   
   Return Neuer_Knopf\Image ; Rückgabe des Bildes, weil es ein einmaliger wert ist!
   
End Function

Function Del_Button(ImageNummer) ; Löscht einen Knopf
   For Knopf.Button = Each Button ; jeder Knopf
      If Knopf\Image = ImageNummer Then ; sucht den gewünschten knopf heraus
         FreeImage Imagenummer ; löscht das Bild
         Delete Knopf.Button ; Löscht den eintrag
      End If
   Next
End Function

Function Del_Gui() ; löscht alles
   For Knopf.Button = Each Button ; jeder Knopf
      FreeImage Knopf\Image ; Löscht die Bilder
      Delete Knopf.Button ; Löscht die Einträge
   Next
End Function
between angels and insects
  • Zuletzt bearbeitet von Jan_ am Fr, März 26, 2004 15:35, insgesamt einmal bearbeitet

Jan_

Ehemaliger Admin

BeitragFr, März 26, 2004 9:38
Antworten mit Zitat
Benutzer-Profile anzeigen
So, wenn man nichts sieht, kannman nichts begreifen, darum,
bitte auch in den gleichen ordner ablegen!

Du siehst, 2 Knöpfe zum anklicken! Aber nur sehr wenig quelltext, in dieser Datei, das macht, die Libary.

GuiTest.bb
Code: [AUSKLAPPEN]
Graphics 640,480,32,2

Include "GUI.BB" ; Lädt unsere Libary

btn_Start = Create_Button("Start Button",10,10) ;Button erstellen
btn_Speichern = Create_Button("Speicher Button",10,100) ;2.Button erstellen
SetBuffer BackBuffer()

Repeat
   Cls ; hintergrund schwarz
   If MouseHit(1) Then Button_Overlap(MouseX(),MouseY()) ;beim mausklick testen, ob Knopf gedrückt wurde
   Draw_Buttons() ; Knöpfe Zeichnen
   Flip(True)
Until KeyHit(1)
Del_Gui()
End
between angels and insects

Jan_

Ehemaliger Admin

BeitragFr, März 26, 2004 13:25
Antworten mit Zitat
Benutzer-Profile anzeigen
So, jetzt fügen wir die schöne Gui in den Editor ein!

Code: [AUSKLAPPEN]
;Rechtschreibe Fehler sind absichtlcih und dienen der Belustigung!
Include "GUI.bb" ; So, da laden wir unsere Libary

;Grafik initialisieren
Graphics 800,600,32,2

;Arreys und Globals
Dim Map(31,31)
Global G2W = GraphicsWidth()/2,G2H = GraphicsHeight()/2 ; Variablen, damit es nicht jedesmal neu berechnet werde muss
Global Tileset, TileSetDatei$
Global Tile_Auswahl
Global Max_Tile

Global btn_Save,btn_Neu,btn_Laden;Gui Buttons ihre Handels

;Tasten
Const Key_Plus  = 78
Const Key_Minus  = 74
Const Key_F5 = 63

Load_Map("temp.map");Lädt Map

;load medias
Load_Medias()

;Gui Erstellen
btn_Neu=Create_Button("Neues Level",10,10)
btn_Save=Create_Button("Level Speichern",10,60)
btn_Laden=Create_Button("Level Laden",10,110)

;hintergrund setzten
SetBuffer BackBuffer()

Local X,Y
Local R,G,B,Rae=1,Gae=2,Bae=3
Repeat
   Keyboard()
   ;------------------------------------------------------
   ;Kleiner Optisch schöner Effekt aber sonst kaum nutzten
   R=R+Rae
   G=G+Gae
   B=B+Bae
   If R> 255 Then R= 255: Rae = Rand(-5,-1)
   If G> 255 Then G= 255: Gae = Rand(-5,-1)
   If B> 255 Then B= 255: Bae = Rand(-5,-1)
   If R< 0 Then R= 0: Rae = Rand(1,5)
   If G< 0 Then G= 0: Gae = Rand(1,5)
   If B< 0 Then B= 0: Bae = Rand(1,5)
   Color R,G,B
   ;------------------------------------------------------
;   Cls  ; CLS wird nicht mehr benötigt, weil wir Tiles bentzten!
   Draw_tiles() ; Zeichnet die Tiles
   Mouse(MouseX(),MouseY()) ; Aufrufen, der Maus Zeichenfunction
   Draw_Buttons() ; Zeichnet die Knöpfe
   Text G2W,0,"RPG Editor - Entwicklungsstufe 5",1
   Text G2W,15,"-Ein Tutorial von Jan Kuhnert-",1
   Text G2W,30,"-Thema: Gui eingefügt-",1
   Flip(True)
Until KeyHit(1)

End

Function Keyboard()
   ;Auswahl der Tiles, vorübergehend mit + und -
   If KeyHit(Key_F5) Then Save_Map
   If KeyHit(Key_Plus) Then Tile_Auswahl=Tile_Auswahl+1
   If KeyHit(Key_Minus) Then Tile_Auswahl=Tile_Auswahl-1
   If Tile_Auswahl<0 Then Tile_Auswahl=Max_Tile-1
   If Tile_Auswahl>Max_Tile-1 Then Tile_Auswahl=0
End Function

Function Mouse(MMX,MMY)
   Local Tile_X,Tile_Y
   Tile_X = Int(MMX/32)
   Tile_Y = Int(MMY/32)
   DrawBlock tileset,Tile_X*32,Tile_Y*32,Tile_Auswahl ;Zeichnet den Block, an die Mausposition, befohr er gesetzt wurde
   Rect Tile_X*32-1,Tile_Y*32-1,34,34,0 ; 4Eck noch etwas vergrößern
   Rect Tile_X*32,Tile_Y*32,32,32,0 ; Zeichnet Das 4Eck, an der Maus-Position
   If MouseDown(1) Then
      Gui_Element=Button_Overlap(MMX,MMY)
      If Gui_Element <> 0 Then ; nur wenn ein Knopf gedrückt wurde reagieren
         If Gui_Element = btn_neu Then load_map()
         If Gui_Element = btn_save Then Save_map()
         If Gui_Element = btn_laden Then load_map("temp.map")
      Else
         Map(Tile_X,Tile_Y)=Tile_Auswahl ;ansonsten, Tile setzten
      End If
   End If
End Function

Function Load_Map(MapName$="")
Local Tile_X,Tile_Y
   If MapName$<>"" Then ; Lädt, wenn ein Map Name angegeben wurde
      Read_Datei=ReadFile(MapName$)
      If read_Datei <> 0 Then ; Falls, keine Datei davon vorhanden, wird nicht geladen, sondern neue erstellt
         TileSetDatei$ = ReadLine$(Read_Datei)
         For Tile_X = 0 To 31
            For Tile_Y = 0 To 31
               Map(Tile_X,Tile_Y) = ReadByte(Read_Datei)
            Next
         Next
      Else
         MapName$ = ""
      EndIf
   End If
   If MapName$="" Then ; Falls keine Map vorhanden ist, neue erstellen
      For Tile_X = 0 To 31
         For Tile_Y = 0 To 31
            Map(Tile_X,Tile_Y) = 0 ; Macht bei allen Tiles, Bild "0"
         Next
      Next
      
      TileSetDatei$ = "tiles.bmp"; Wird Später noch aus der Datei gelesen      
   End If

   Return TileSetDatei$
End Function

Function Save_Map(Mapname$="temp.map") ;Speichert die Map
Local Tile_X,Tile_Y
   Write_Datei=WriteFile (Mapname$)
   WriteLine Write_datei, TileSetDatei$ ; Speichert Tile-set Name
   For Tile_X = 0 To 31
      For Tile_Y = 0 To 31
         WriteByte Write_Datei,Map(Tile_X,Tile_Y)
      Next
   Next
   CloseFile(Write_Datei)
End Function

Function Draw_Tiles(X=0,Y=0)
Local Tile_X,Tile_Y
   For Tile_X = 0 To 31
      For Tile_Y = 0 To 31
         DrawBlock Tileset,Tile_X*32,Tile_Y*32,Map(Tile_X,Tile_Y) ;Zeichnet, die Tiles
      Next
   Next
End Function

Function Load_Medias()
   Max_Tile = 8 ; Wird Später noch aus der Datei gelesen
   Tileset = LoadAnimImage(TileSetDatei$,32, 32, 0, Max_Tile)  ;Lädt das Tile-set
End Function
between angels and insects

Jan_

Ehemaliger Admin

BeitragFr, März 26, 2004 14:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Für den nächste schritt, währe wichtig, zu wissen, wie Groß du die Tiles Haben willst!

8 (Nein, bitte nicht, ich bin alt, und kann nicht mehr so gut sehen Smile )
16 (RPG Maker 2000 Größe)
32 (Recht gute Größe)
64 (Naja, nur gut, wenn alle grafiken gerendert werden)
128 (viel zu groß aber natürlich machbar)

Ich wollte nur noch mal betohnen, nach dem ich im ICQ angsprochen wurde,
das ist alles von mir, nicht abgeschrieben, und Live erstellt!
between angels and insects

Jan_

Ehemaliger Admin

BeitragFr, März 26, 2004 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
So, ein paar Bugs raus, noch paar Buttons, Tile-Anzeige
Achtung, ich habe oben den Beitrag mit Gui.bb editiert, bitte, nochmal laden, da war ein kleiner Bug drin *g*

Code: [AUSKLAPPEN]
;Rechtschreibe Fehler sind absichtlcih und dienen der Belustigung!
Include "GUI.bb" ; So, da laden wir unsere Libary

;Grafik initialisieren
Graphics 800,600,24,2

;Arreys und Globals
Dim Map(31,31)
Global G2W = GraphicsWidth()/2,G2H = GraphicsHeight()/2 ; Variablen, damit es nicht jedesmal neu berechnet werde muss
Global Tileset, TileSetDatei$
Global Tile_Auswahl
Global Max_Tile

Global btn_Save,btn_Neu,btn_Laden,Btn_Beenden;Gui Buttons ihre Handels
Global btn_next,btn_last,Btn_Fenster;Gui Buttons ihre Handels
Global Maus_auf_Gui_angewandt ; wird gebraucht, weil sonst etwas sehr unschönes passiert!

;Tasten
Const Key_Plus  = 78
Const Key_Minus  = 74
Const Key_F5 = 63

Load_Map("temp.map");Lädt Map

;load medias
Load_Medias()

;Gui Erstellen
btn_beenden=Create_Button("Beenden des Editor",10,160)
btn_Neu=Create_Button("Neues Level",10,10)
btn_Save=Create_Button("Level Speichern",10,60)
btn_Laden=Create_Button("Level Laden",10,110)
btn_next=Create_Button("Nächstes Tile",GraphicsWidth()-150,10)
btn_last=Create_Button("Vorheriges Tile",GraphicsWidth()-150,110)
btn_fenster=Create_Button("",GraphicsWidth()-150,50,36,36) ; So, in dieses Fenster, kommt das Aktuelle Tile immer rein!

;hintergrund setzten
SetBuffer BackBuffer()

Local X,Y
Local R,G,B,Rae=1,Gae=2,Bae=3
Repeat
   Keyboard()
   ;------------------------------------------------------
   ;Kleiner Optisch schöner Effekt aber sonst kaum nutzten
   R=R+Rae
   G=G+Gae
   B=B+Bae
   If R> 255 Then R= 255: Rae = Rand(-5,-1)
   If G> 255 Then G= 255: Gae = Rand(-5,-1)
   If B> 255 Then B= 255: Bae = Rand(-5,-1)
   If R< 0 Then R= 0: Rae = Rand(1,5)
   If G< 0 Then G= 0: Gae = Rand(1,5)
   If B< 0 Then B= 0: Bae = Rand(1,5)
   Color R,G,B
   ;------------------------------------------------------
;   Cls  ; CLS wird nicht mehr benötigt, weil wir Tiles bentzten!
   Draw_tiles() ; Zeichnet die Tiles
   Mouse(MouseX(),MouseY()) ; Aufrufen, der Maus Zeichenfunction
   Draw_Buttons() ; Zeichnet die Knöpfe
   Text G2W,0,"RPG Editor - Entwicklungsstufe 5",1
   Text G2W,15,"-Ein Tutorial von Jan Kuhnert-",1
   Text G2W,30,"-Thema: Gui eingefügt-",1
   Flip(True)
Until KeyHit(1)
Save_map("Last_Change.tmp") ; notspeichern
End

Function Keyboard()
   ;Auswahl der Tiles, vorübergehend mit + und -
   If KeyHit(Key_F5) Then Save_Map
;   If KeyHit(Key_Plus) Then Tile_Auswahl=Tile_Auswahl+1
;   If KeyHit(Key_Minus) Then Tile_Auswahl=Tile_Auswahl-1

End Function

Function Mouse(MMX,MMY)
   Local Tile_X,Tile_Y
   Local Image_Wechsel
   Tile_X = Int(MMX/32)
   Tile_Y = Int(MMY/32)
   DrawBlock tileset,Tile_X*32,Tile_Y*32,Tile_Auswahl ;Zeichnet den Block, an die Mausposition, befohr er gesetzt wurde
   Rect Tile_X*32-1,Tile_Y*32-1,34,34,0 ; 4Eck noch etwas vergrößern
   Rect Tile_X*32,Tile_Y*32,32,32,0 ; Zeichnet Das 4Eck, an der Maus-Position
   If MouseHit(1) Then
      Gui_Element=Button_Overlap(MMX,MMY)
      If Gui_Element <> 0 Then ; nur wenn ein Knopf gedrückt wurde reagieren
         Maus_auf_Gui_angewandt=1
         If Gui_Element = btn_neu Then load_map()
         If Gui_Element = btn_save Then Save_map()
         If Gui_Element = btn_laden Then load_map("temp.map")
         If Gui_Element = btn_beenden Then Save_map("Last_Change.tmp"): End ; Notspeichern und beenden
         If Gui_Element = btn_next Then Tile_Auswahl=Tile_Auswahl+1:Image_Wechsel= 1
         If Gui_Element = btn_last Then Tile_Auswahl=Tile_Auswahl+1:Image_Wechsel= 1

         If Image_Wechsel= 1 Then ; wenn das tile gewechselt wurde, Bild ändern,überprüfen
            If Tile_Auswahl<0 Then Tile_Auswahl=Max_Tile-1
            If Tile_Auswahl>Max_Tile-1 Then Tile_Auswahl=0
            SetBuffer ImageBuffer(btn_fenster); wir Zeichnen direckt in den Knopf das ausgewählte Tile herein!
            DrawBlock tileset,2,2,Tile_Auswahl
            SetBuffer BackBuffer()
            Image_Wechsel=0
         End If
      End If
   End If
   If MouseDown(1)
      If Gui_Element + Maus_auf_Gui_angewandt=0 Then
         Map(Tile_X,Tile_Y)=Tile_Auswahl ;ansonsten, Tile setzten
      End If
   Else
      Maus_auf_Gui_angewandt=0
   End If
End Function

Function Load_Map(MapName$="")
Local Tile_X,Tile_Y
   If MapName$<>"" Then ; Lädt, wenn ein Map Name angegeben wurde
      Read_Datei=ReadFile(MapName$)
      If read_Datei <> 0 Then ; Falls, keine Datei davon vorhanden, wird nicht geladen, sondern neue erstellt
         TileSetDatei$ = ReadLine$(Read_Datei)
         For Tile_X = 0 To 31
            For Tile_Y = 0 To 31
               Map(Tile_X,Tile_Y) = ReadByte(Read_Datei)
            Next
         Next
      Else
         MapName$ = ""
      EndIf
      CloseFile Read_Datei
   End If
   If MapName$="" Then ; Falls keine Map vorhanden ist, neue erstellen
      For Tile_X = 0 To 31
         For Tile_Y = 0 To 31
            Map(Tile_X,Tile_Y) = 0 ; Macht bei allen Tiles, Bild "0"
         Next
      Next
      
      TileSetDatei$ = "tiles.bmp"; Wird Später noch aus der Datei gelesen      
   End If

   Return TileSetDatei$
End Function

Function Save_Map(Mapname$="temp.map") ;Speichert die Map
Local Tile_X,Tile_Y
   Write_Datei=WriteFile (Mapname$)
   WriteLine Write_datei, TileSetDatei$ ; Speichert Tile-set Name
   For Tile_X = 0 To 31
      For Tile_Y = 0 To 31
         WriteByte Write_Datei,Map(Tile_X,Tile_Y)
      Next
   Next
   CloseFile(Write_Datei)
End Function

Function Draw_Tiles(X=0,Y=0)
Local Tile_X,Tile_Y
   For Tile_X = 0 To 31
      For Tile_Y = 0 To 31
         DrawBlock Tileset,Tile_X*32,Tile_Y*32,Map(Tile_X,Tile_Y) ;Zeichnet, die Tiles
      Next
   Next
End Function

Function Load_Medias()
   Max_Tile = 8 ; Wird Später noch aus der Datei gelesen
   Tileset = LoadAnimImage(TileSetDatei$,32, 32, 0, Max_Tile)  ;Lädt das Tile-set
End Function


Mehr gibt es erst wieder Montag!
between angels and insects

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group