Brauche hilfe bei eigenem Mapeditor[problem beim scrolling]

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

eternitysoft

Betreff: Brauche hilfe bei eigenem Mapeditor[problem beim scrolling]

BeitragSa, Jan 08, 2005 0:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo also ich habe jetzt angefangen mir selber ein kleinen mapeditor zu bauen (weil ich dachte das dass besser ist und ich es dann besser hinrkriege)
hier erstmal der Code soweit

Code: [AUSKLAPPEN]
;setzt das Fenster
Graphics 1024,768,16,2
;----
;eingaben für die höhe breite und das Tile
map_width=Input ("geben sie die Breite an ")
map_height=Input ("geben sie die Höhe an ")
tileset_laden$=Input ("name des Tileset ")
Cls
;---
;Ladet den Mauscursor
Maus = LoadImage("data/maus.bmp")
;---
;ladet das Tileset
Tileset = LoadAnimImage("tiles/"+tileset_laden$,16,16,0,480)
;----
;erstellt die Map
Dim map (map_width, map_height)
;---
;Macht die Variablen im Ganzen Programm verfügbar
Global x,y,mx,my,mapx,mapy,tile = 1
;---
;Startet die Hauptschleife
Repeat
;---
;Setzt den Backbuffer
SetBuffer BackBuffer()
;---
;ESC-Taste zum beenden des programmes
If KeyDown(1) Then End
;---
;die array wird eingelesen und die map wird gemalt
For x = 0 To map_width
For y = 0 To map_height
DrawImage Tileset,x*16,y*16,map(x,y)
Next
Next
Flip
Forever   

Also es klappt jetzt soweit ich bräuchte jetzt mal einen Denkanstoss denn ich wollte das so machen (zeig das mal als pic)
http://www.rpgstation.de/prob/editor.PNG
So wollte ich das aufgebaut haben
Das mit den Buttons und Tiles ist ja eigentlich nur eine Kollisons abfrage und dann ob die Taste gedrückt wurde (Korrigiert mich wenn ich falsch liege)
Mein Problem ist eher das Mit deM Scrollfenster (Mapfenster)
Also das die Map nur da angezeigt wird und dann wenn die Map zu Groß ist das man dann Scrollen kann
ich hoffe das man das jetzt versteht
mfg
  • Zuletzt bearbeitet von eternitysoft am Mo, Jan 17, 2005 18:59, insgesamt einmal bearbeitet

Hubsi

BeitragSa, Jan 08, 2005 14:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich Dich richtig verstehe ist das Scrolling Dein Problem? Für den Editor reicht es wohl wenn Tile-weise gescrollt wird. Leg Dir eine scroll-Variable an und verwende diese beim belegen und malen, etwa so:Code: [AUSKLAPPEN]
DrawImage Tileset,x*16,y*16,map(x+scrollx,y+scrolly)
Und beim belegen des Arrays in etwa das gleiche Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

eternitysoft

BeitragSa, Jan 08, 2005 14:51
Antworten mit Zitat
Benutzer-Profile anzeigen
ja das könnte mir weiterhelfen danke
bloß geht das irgendwie das die map nur auf ein teil im Fenster angezeigt wird so das ich daneben noch buttons und dadrunter die tiles zur auswahl setzen kann? Weil das wäre dann eigentlich das größere Problem (mit dem Scrolling müsste ich hinkriegen danke nochmal )
mfg

DA

BeitragSa, Jan 08, 2005 14:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin,

Einfach die Buttons und so nach der Map mahlen dan werden die Buttons nämlich über dei Map gezeichnet. Wen ich dich jetzt richtig verstanden habe.

Edit:
Ups falsch verstanden sorry Embarassed

Thx
Darkangel
Deutscher Blitz Basic Chat

Hubsi

BeitragSa, Jan 08, 2005 15:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mal den entsprechenden Teil aus meinem Mapeditor rauskopiert:Code: [AUSKLAPPEN]
For layer=0 To maxlayer-1
 For y=starttiley To starttiley+viewheight
  For x=starttilex To starttilex+viewwidth
   If map(x,y,layer)<>0 And tile(map(x,y,layer),layer)<>0 And x<=width-1 And y<=height-1
   If layerout(layer)=False DrawImage tile(map(x,y,layer),layer),96+vx*tilewidth,vy*tileheight
   EndIf
   vx=vx+1
  Next
  vy=vy+1:vx=0
 Next
 vx=0:vy=0
Next
Die Menüleiste ist bei mir 96 Pixel breit und auf der linken Seite, von daher das +96. So wird stets nur der sichtbare Teil gemalt und nebenbei kannst Du das auch im Spiel so einsetzen Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

eternitysoft

BeitragSa, Jan 15, 2005 21:58
Antworten mit Zitat
Benutzer-Profile anzeigen
So habe mir mal eine Scrollfunktion eingebaut und noch folgende Probleme
-In dem neuen Gescrollten bereich malt er die Tiles nicht
-Er scrollt die Map in die Menüleisten(oben und links wo der abstand 96 definiert ist damit da die buttons hinkönnen)
-Die Tiles werden nicht an der Cursor stelle gemalt sondern versetzt von den Cursor
Aso und dann geht meine Speicherfunktion komischerweise nicht er speichert nur den namen des tiles ab also tileset_laden$
hoffe kann mir jemand helfen nochmal danke an Hubsi der mir soweit geholfen hat (bloß der meldet sich momentan per pm net)
mfg

Code: [AUSKLAPPEN]

;Macht die Variablen im Ganzen Programm verfügbar
    Global x,y,mx,my,mapx,mapy,tile = 1, endung$=".map", map_width, map_height,tileset_laden$
;---
;Fenster erstellen
    Graphics 1024,768,16,1
;---
;Setzt den Backbuffer
    SetBuffer BackBuffer()
;---
; Grafiken laden immer erst nach Graphics, da dieser Befehl den Grakaspeicher entleert
    Neu = LoadImage ("data/neu.png")
    Speichern = LoadImage ("data/speichern.png")
    Laden = LoadImage ("data/laden.png")
;---
;eingaben für die höhe breite und das Tile
    map_width=Input ("geben sie die Breite an ")
    map_height=Input ("geben sie die Höhe an ")
    tileset_laden$=Input ("name des Tileset ")
;---
;Ladet den Mauscursor
    Maus = LoadImage("data/maus.bmp")
;---
;ladet das Tileset
    Tileset = LoadAnimImage("tiles/"+tileset_laden$,16,16,0,480)
;----
;erstellt die Map
    Dim map (map_width, map_height)
;---
;Startet die Hauptschleife
  Repeat
  Cls
;---
;ESC-Taste zum beenden des programs
    If KeyDown(1) Then End
;---
;die array wird eingelesen und die map wird gemalt
   For x = 0 To map_width
    For y = 0 To map_height
     DrawImage Tileset,96+x*16+scrollx,96+y*16+scrolly,map(x,y)
     Next
    Next
;---
;Setzt die Buttons und informationen
   DrawBlock Neu, 3,3
   DrawBlock Speichern, 3,50
   DrawBlock Laden, 3,97
Text 3,144,"Maphöhe:"
Text 3,157,map_height
Text 3,169,"Mapbreite:"
Text 3,181,map_width
Text 3,193,"Tileset:"
Text 3,205,tileset_laden$
Text 3,217,"Maus X:"
Text 3,229,mx
Text 3,241,"Maus Y:"
Text 3,253,my
;---
;###########################################################
;das wird wieder geändert dient zum testen                 
;###########################################################
If KeyDown(2) Then tile = 1
If KeyDown(3) Then tile = 2
If KeyDown(4) Then tile = 3
If KeyDown(5) Then tile = 4
If KeyDown(7) Then tile = 5
If KeyDown(8) Then tile = 6
If KeyDown(9) Then tile = 7
If KeyDown(10) Then tile = 8
If KeyDown(11) Then tile = 9
If KeyDown(12) Then tile = 10
If KeyDown(13) Then tile = 11
If KeyDown(14) Then tile = 12
If KeyDown(15) Then tile = 13
If KeyDown(16) Then tile = 14
If KeyDown(17) Then tile = 15
If KeyDown(18) Then tile = 16
;###########################################################
;###########################################################
If MouseDown(1) Then
x = (mx)/16
y = (my)/16
map(x,y) = tile
End If

If MouseDown(2) Then
x = (mx)/16
y = (my)/16
map(x,y) = 0
End If


;Ladet die Koordinaten des Cursors und malt ihn
   mx =MouseX()
   my =MouseY()
   DrawImage Maus, mx,my
;---
;Button Kolision
     If ImagesCollide(Maus, mx, my,0, Neu, 3, 3, 0) Then
       If MouseDown(1) Then
      Neu ()
   End If
  End If
If ImagesCollide(Maus, mx, my,0, Speichern, 3, 50, 0) Then
       If MouseDown(1) Then
      Speichern ()
   End If
  End If
If ImagesCollide(Maus, mx, my,0, Speichern, 3, 97, 0) Then
       If MouseDown(1) Then
      Laden ()
   End If
  End If
 
;---
;Scrollabfrage
    If mx = 1023 then
     scrollx =scrollx-16
    endif
    If mx = 0 then
     scrollx =scrollx+16
    endif
    If my = 0 then
     scrolly =scrolly+16
    endif
    If my = 767 then
     scrolly =scrolly-16
    endif
;---
  Flip
  Forever 
;Die Functionen für Neu, Laden und Speichern
    Function Neu()
    End Function
   
    Function Laden()
    ladename$=Input ("Geben sie den Namen ein ")
     Read_Datei=ReadFile(ladename$+endung$)
     tileset_laden$ = ReadLine$(Read_Datei)
       For x = 0 To map_width
        For y = 0 To map_height
          map(x,y) = ReadInt (Read_Datei)
     Next
    Next
    CloseFile(Read_Datei)
    End Function
   
    Function Speichern()
    speichername$=Input ("Geben sie einen Namen ein ")
    Write_Datei=WriteFile(speichername$+endung$)
    WriteLine Write_datei, tileset_laden$ 
      For x = 0 To map_width
        For y = 0 To map_height
      WriteInt Write_Datei, map(x,y)
     Next
    Next
    CloseFile (Write_datei)
    End Function 
;---

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group