Dem Tile-Editor scrollen beibringen?

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2, 3  Weiter

Neue Antwort erstellen

 

mOnK

Betreff: Dem Tile-Editor scrollen beibringen?

BeitragSa, Mai 01, 2004 21:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

ich habe mir ja jetzt nen kleinen Tile-Editor für nicht-scrollende-Maps gemacht. Aber wie integriere ich scrolling in den Editor?

Danke

mOnK

Hubsi

BeitragSa, Mai 01, 2004 22:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit einer Variable (z.B. starttile), welche erhöht oder verringert wird und alle Berechnungen und das malen machst du unter Berücksichtigung dieser Variable:Code: [AUSKLAPPEN]
For x=starttile to starttile+width
; Same shit for y
DrawImage tile(map(x+starttile,y)),x*tilewidth...
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

mOnK

BeitragMo, Mai 03, 2004 15:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry, hab irgendwie vergessen hier reinzusehen ... Sad

Kannst du mir das noch ein bisschen genauer erklären?

Triton

BeitragMo, Mai 03, 2004 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstelle 2 Variablen, z.B viewX und viewY - die geben ab sofort an, wo sich dein momentanes Sichtfenster befindet. 0,0 Entspricht der ausgangsposition, in der Regel also oben links.

Wenn du nun Scrollst, erhöhst, oder verkleinerst du diese Variablen (änderst also die Position des Sichtfensters). Nun addierst du diese Variablen beim Zeichnen zu deinen Tiles und allem was mit gescrollt werden soll dazu - das Sichtfenster wird verschoben/man scrollt.
 

mOnK

BeitragDi, Mai 04, 2004 14:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Triton!

Habe nun aber noch ein Problem: Wie ich es auch mache, zeichnen geht nur in dem ursprünglichen Bereich. Wenn ich also Scrolle, kann ich in dem gescrollten Bereich nicht zeichnen.

Code: [AUSKLAPPEN]

mouse()

map(mapx,mapy) = tile


und die Funktion mouse

Code: [AUSKLAPPEN]

Function mouse()

mapx = (mausx)/32
mapy = (mausy)/32

End Function


Was muss ich da ändern?

Hubsi

BeitragDi, Mai 04, 2004 14:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
mapx+scrollx = (mausx)/32
mapy+scrolly = (mausy)/32
Du hast einfach die Scrollvariablen vergessen Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

mOnK

BeitragDi, Mai 04, 2004 15:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Huh? Jetzt bekomm ich "Funktion mapx nicht gefunden" ?

Hubsi

BeitragDi, Mai 04, 2004 15:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast Du da Klammern rumgemacht anstatt + zu schreiben?
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

mOnK

BeitragDi, Mai 04, 2004 15:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Ne, hab einfach den Code so kopiert (obwohl + - sein muss, sonst is es umgekehrt).

Code: [AUSKLAPPEN]
mapx+scrollx = (mausx)/32
mapy+scrolly = (mausy)/32


edit: Hab es mal geändert. So klappts, aber malen geht trotzdem nicht im gescrollten Bereich.

Code: [AUSKLAPPEN]

mapx = mapx - scrollx 
mapy = mapy - scrolly
   
mapx = (mausx)/32
mapy = (mausy)/32

Hubsi

BeitragDi, Mai 04, 2004 15:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast Du vielleicht versehentlich an das map noch ein x drangehängt oder was in der Art. Überprüf mal die Zeile die er markiert auf Schreibfehler.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

mOnK

BeitragDi, Mai 04, 2004 15:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Kein Fehler Wink

Sobald ich +scrollx ranhänge bemengelt er die mapx.

Hubsi

BeitragDi, Mai 04, 2004 15:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Habs jetzt nicht getestet, aber warum klammerst du mausx und mausy ein?
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

mOnK

BeitragDi, Mai 04, 2004 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Find ich übersichtlicher. Hat ja außerdem eigentlich keine Auswirkung auf die Rechnung.

Hubsi

BeitragDi, Mai 04, 2004 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Himmel bin ich behämmert Embarassed wert + wert = irgendwas kann nicht funzen! Das scrollx muß hinten an mausx/32 rangehängt werden.
Code: [AUSKLAPPEN]
mapx=mausx/32+scrollx
Das ist echt peinlich Embarassed Very Happy Embarassed
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

regaa

BeitragDi, Mai 04, 2004 17:10
Antworten mit Zitat
Benutzer-Profile anzeigen
und falls du z.B. ne cursor brauchst der von tile zu tile geht machst du:

tile_x=(mousex()/32)*32
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net
 

mOnK

BeitragDi, Mai 04, 2004 17:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Super, der Fehler ist schonmal weg. Allerdings krieg ich jetzt "Array index out of bounds". Die Map ist 99,99 groß. Wie kommts?

Hubsi

BeitragDi, Mai 04, 2004 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann ich aus dem bisher gepostetem Code nicht ersehen. Ich vermute das bei einer Berchnung irgendwo ein Wert größer 99 rauskommt und der wird dann beim zeichnen oder setzen eines Tiles verwandt. Einfach mal nach jeder Berechnung der Mapkoords prüfen ob der Wert überschritten wird und dann mit Runtimeerror abbrechen.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
  • Zuletzt bearbeitet von Hubsi am Di, Mai 04, 2004 17:32, insgesamt einmal bearbeitet

regaa

BeitragDi, Mai 04, 2004 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Das kommt wenn du arrayindexe ansprechen willst, die es gar nicht gibt (-1,100) etc. .

Beachte: dim map(98,98)= 99*99 Felder
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net
 

mOnK

BeitragDi, Mai 04, 2004 17:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo wie das passiert ist mir klar, bloß es passiert immer wenn ich im scroll-bereich male. Kann den Source mal posten (ist aber ziemlich chaotisch):

Code: [AUSKLAPPEN]
Graphics 1024,768,16,1                                          ; Grafik initialisieren

SetBuffer BackBuffer()                                          ; Double Buffering anwenden

Dim map(99,99)                                                ; Die Map initialisieren

Global tileset2 = LoadImage("tileset.png")                           ; für get_frames

frames = get_frames()                                          ; Anzahl der Frames

FreeImage tileset2                                             ; Freigeben                  

Global tileset = LoadAnimImage("tileset.png",32,32,0,frames)            ; Tileset laden

maus = LoadImage("maus.png")                                    ; Maus laden

Global x,y,mausx,mausy,mapx,mapy,tile = 0                           ; verschiedene Variablen
Global scrollx = 0, scrolly = 0                                    ; Scrollvariablen

MoveMouse 512,348                                             ; Maus in die Mitte

Repeat                                                      ; Hauptschleife machen bis ...

   Cls                                                      ; Bildschirm leeren

   draw_scene()                                             ; Bildschirm zeichnen

   mausx = MouseX()                                          ; mausx mit der Maus-Koord. setzen
   mausy = MouseY()                                          ; mausy mit der Maus-Koord. setzen
   
   set_tile()                                                ; Tile zum zeichnen setzen
   
   draw_tile()                                                ; Maussteuerung: Zeichnen des Tiles
   
   If KeyDown(31) Then
   
      save()                                                ; Bei S-Druck speichern
      
   End If
   
   If KeyDown(38) Then
   
      load()                                                ; Bei L-Druck laden
      
   End If
   
   scroll()
   
   DrawImage maus,mausx,mausy                                    ; Maus zeichnen
   
   Flip                                                   ; Bildschirm neuzeichnen


Until KeyHit(1)                                                ; ... ESC gedrückt wird.


; ||| Funktionen


Function mouse()                                             ; Rechnet die Maus-Position zum Tile um
   
   mapx = (mausx)/32+scrollx
   mapy = (mausy)/32+scrolly
   
End Function

Function draw_scene()                                          ; Den Bildschirm zeichnen

   For x = 0 To 31

      For y = 0 To 23
   
         DrawImage tileset,x*32-scrollx,y*32-scrolly,map(x,y)         ; Die Map malen
      
      Next
   
   Next

End Function

Function scroll()

   If MouseX() < 20 Then
   
      scrollx = scrollx - 1
      
   End If
   
   If MouseX() > 1004 Then
   
      scrollx = scrollx + 1
      
   End If
   
   If MouseY() < 20 Then
   
      scrolly = scrolly - 1
      
   End If
   
   If MouseY() > 748 Then
   
      scrolly = scrolly + 1
      
   End If

End Function

Function draw_tile()

   If MouseDown(1) Then
   
      mouse()                                                ; mouse() ausführen   

      map(mapx,mapy) = tile                                    ; Tile zuweisen
      
   End If
   
End Function

Function set_tile()

   If KeyDown(2) Then tile = 0                                    ; Wenn 1 dann tile = 0
   If KeyDown(3) Then tile = 1                                    ; Wenn 2 dann tile = 1
   If KeyDown(4) Then tile = 2                                    ; Wenn 3 dann tile = 2


End Function

Function save()

   karte$ = WriteFile("map1.map")                                 ; map1.map zum schreiben öffnen
   
   For x = 0 To 31
   
      For y = 0 To 23
      
         WriteLine(karte$,tile)                                 ; Schreiben
         
         WriteInt(karte$,map(x,y))
         
      Next
      
   Next
   
   CloseFile(karte$)

End Function

Function load()

   karte$ = ReadFile("map1.map")
   
   For x = 0 To 31
   
      For y = 0 To 23
      
         tile =  ReadLine(karte$)
         
         map(x,y) = ReadInt(karte$)
         
      Next
      
   Next
   
   CloseFile(karte$)

End Function

Function get_frames()

   frames = ImageWidth(tileset2)
   
   frames = frames / 32
   
   Return frames

End Function

Hubsi

BeitragDi, Mai 04, 2004 17:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ändere diese Zeile Code: [AUSKLAPPEN]
DrawImage tileset,x*32-scrollx,y*32-scrolly,map(x,y)
in:Code: [AUSKLAPPEN]
DrawImage tileset,x*32,y*32,map(x+scrollx,y+scrolly)
Und beim scrollen, was übrigens um einiges zu schnell sein dürfte => mit Timer begrenzen, mußt Du natürlich vor dem ändern der scroll-Werte prüfen ob min. oder max. nicht schon erreicht sind.
So ein Timer läßt sich sehr schön mit MilliSecs() basteln Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Gehe zu Seite 1, 2, 3  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group