Dem Tile-Editor scrollen beibringen?

Übersicht BlitzBasic Allgemein

Gehe zu Seite Zurück  1, 2, 3

Neue Antwort erstellen

Hubsi

BeitragMi, Mai 05, 2004 16:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstaunlich. Zwei Hassthreads in einem Forum Very Happy Der Unterhaltungswert hat sich somit verdoppelt Mr. Green
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

regaa

BeitragMi, Mai 05, 2004 16:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Nö, so eben wurde der erste geschlossen Crying or Very sad .
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net
 

mOnK

BeitragMi, Mai 05, 2004 16:52
Antworten mit Zitat
Benutzer-Profile anzeigen
So um dann mal wieder zum Thema zu kommen ... Wink

Ich habe es nun hinbekommen, den Bereich zu begrenzen, in dem man scrollen kann. Aber ich kann immernoch nicht im scrollbereich zeichnen. Wieso?!

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
Global timer = 0                                             ; Timer

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
      
         x2 = x - scrollx                                    
         y2 = y - scrolly
         
         If x2 > 99 Then scrollx = 0                              ; Begrenzungstest
         If x2 < 0 Then scrollx = 0
         
         If y2 > 99 Then scrolly = 0                              ; Begrenzungstest
         If y2 < 0 Then scrolly = 0
   
         DrawImage tileset,x*32,y*32,map(x-scrollx,y-scrolly)         ; Die Map malen
      
      Next
   
   Next

End Function

Function scroll()

   If MilliSecs() > timer + 200 Then                              ; Timer
   
      timer = MilliSecs()

      If MouseX() > 1004 Then
   
         scrollx = scrollx - 1                                 ; Nach rechts scrollen
      
      End If
      
      If MouseX() < 20 Then
      
         scrollx = scrollx + 1                                 ; Nach links scrollen
         
      End If
      
      If MouseY() < 20 Then
      
         scrolly = scrolly + 1                                 ; Nach unten
         
      End If
      
      If MouseY() > 748 Then
      
         scrolly = scrolly - 1                                 ; Nach oben
         
      End If
      
   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

BeitragMi, Mai 05, 2004 17:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich werd leider aus Deinem Code nicht ganz schlau, aber was ich so gar nicht verstehen kann, ist das hier:Code: [AUSKLAPPEN]
map(x-scrollx,y-scrolly) ; Die Map malen
Warum -scroll? Ansonsten sehe ich nur einen Fehler, kann aber ohne die Tiles auch nichts testen. Zum Fehler: Handles werden nicht in Strings gespeichert:Code: [AUSKLAPPEN]
karte$ = ReadFile
Hier schreibt man karte=ReadFile. Dasselbe dann bei CloseFile und WriteFile. Bei einem Bild machst Du es ja auch nicht Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

mOnK

BeitragMi, Mai 05, 2004 17:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Das +-Zeichen wars Wink Danke dir!

Nun klappt alles soweit ich es erstmal brauche. Werd nun nochmal an den Feinheiten wie Speicher-Menü und besserer "verträglichkeit" mit anderen Tilesets arbeiten. Danke euch, kriegt nen Credits-Eintrag wenn daraus mal was wird Wink
  • Zuletzt bearbeitet von mOnK am Mi, Mai 05, 2004 17:54, insgesamt einmal bearbeitet

Hubsi

BeitragMi, Mai 05, 2004 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Klar macht das einen Unterschied: Zitat:
20-5=15
20+5=25
Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Mattis_the_brain

BeitragMi, Mai 05, 2004 19:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Bilde ich mir das nur ein oder schreibt hier jeder zweite nur bullshitt (so wie ich gerade, wollts nur mal los werden), hätte nicht einfach ein kleines erläuterndes Beispiel gereicht? Hier mal meine Lösung des Problems:

Code: [AUSKLAPPEN]

gfx_rx = 640 ;} Variablen für Horizontale und
gfx_ry = 480 ;} Vertikale
Graphics(gfx_rx, gfx_ry, 16, 1) ;Grafikmodus setzen

map_sx = 99 ;} Variablen für Kartengröße
map_sy = 99 ;}
Dim map(map_sx, map_sy) ;Array für Karte

tile = 1 ;tile was zu setzen ist (curser)
scrol_x = -5
scrol_y = -5

SetBuffer(BackBuffer()) ;Buffer auf backbuffer setzen
While(KeyHit(1) = False) ;Begin der Hauptschleife
   
   ;### curser
   curser_x = MouseX() / 32 ;} Umrechnen der Mausposition
   curser_y = MouseY() / 32 ;}
   
   ;### control
   If(KeyDown(205)) scrol_x = scrol_x + 1 ;} Zum Scrolen der Karte
   If(KeyDown(203)) scrol_x = scrol_x - 1 ;}
   If(KeyDown(208)) scrol_y = scrol_y + 1 ;}
   If(KeyDown(200)) scrol_y = scrol_y - 1 ;}
   
   If(MouseDown(1)) map(curser_x + scrol_x, curser_y + scrol_y) = tile   ;} Tile setzen und
   If(MouseDown(2)) map(curser_x + scrol_x, curser_y + scrol_y) = 0   ;} löschen
   
   ClsColor(100, 100, 100)
   Cls() ;Löschen des Bildschirms
   
   ;### draw tiles
   For y = 0 To gfx_ry / 32 ;von null bis tiles die vertikal auf den bildschirm passen
      For x = 0 To gfx_rx / 32 ;von null bis tiles die horizontal auf den bildschirm passen
         px = x + scrol_x ;}Tilesposition + Scroleposition
         py = y + scrol_y ;}
         If(px > 0 And px < map_sx And py > 0 And py < map_sy); wenn tile sich innerhalb der Karte befindet
            If(map(px, py) = 1)               ;} Den Teil raus nehmen
               Color(255, 255, 255)            ;} ist nur für benutzung
            Else                           ;} ohne tiles!
               Color(0, 0, 0)                  ;}
            EndIf                           ;}
            Rect(x * 32, y * 32, 32, 32, 1)      ;}
            ;DrawImage(px * 32, py * 32, map(px, py)) ;Dafür den rein nehmen
            ;und nicht vergessen das image zu laden!
         EndIf
      Next
   Next
   
   ;### draw mouse
   Color(255, 255, 255)               ;} Notlösung für Maus
   Rect(MouseX(), MouseY(), 2, 2, 1)   ;}
   
   Flip
Wend
End
 

mOnK

BeitragDo, Mai 06, 2004 16:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Bevor ich wieder ein neues Thema eröffne frage ich hier noch einmal:

Wenn ich zum Beispiel die Spielfigur zeichne, dann wird das Tile was vorher auf dem Platz war, durch die Figur ersetzt. Ist es möglich, dass ich die Spielfigur "über" das vorherige Tile zeichne, damit die Spielfigur dann beispielsweise auf Gras steht? Wie klappt das?

Danke!

Hubsi

BeitragDo, Mai 06, 2004 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Spielfiguren und Gegner dürfen nicht als Tile behandelt werden. Speicher diese Koords absolut ab.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

HOT-BIT

Gast

BeitragDo, Mai 06, 2004 17:18
Antworten mit Zitat
Hi,

@Hubsi:
Jetzt kommt die Frage noch einmal !
Wetten ?

Toni
 

mOnK

BeitragDo, Mai 06, 2004 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein HOT, den gefallen tu ich dir nicht Wink

Das reicht schon, danke!

Gehe zu Seite Zurück  1, 2, 3

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group