Dem Tile-Editor scrollen beibringen?
Übersicht

mOnKBetreff: Dem Tile-Editor scrollen beibringen? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sorry, hab irgendwie vergessen hier reinzusehen ... ![]() Kannst du mir das noch ein bisschen genauer erklären? |
||
![]() |
Triton |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] mapx+scrollx = (mausx)/32
Du hast einfach die Scrollvariablen vergessen mapy+scrolly = (mausy)/32 ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
mOnK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Huh? Jetzt bekomm ich "Funktion mapx nicht gefunden" ? | ||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hast Du da Klammern rumgemacht anstatt + zu schreiben? | ||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
mOnK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Kein Fehler ![]() Sobald ich +scrollx ranhänge bemengelt er die mapx. |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Find ich übersichtlicher. Hat ja außerdem eigentlich keine Auswirkung auf die Rechnung. | ||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Himmel bin ich behämmert ![]() Code: [AUSKLAPPEN] mapx=mausx/32+scrollx Das ist echt peinlich ![]() ![]() ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
regaa |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Super, der Fehler ist schonmal weg. Allerdings krieg ich jetzt "Array index out of bounds". Die Map ist 99,99 groß. Wie kommts? | ||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ä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 ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group