Dem Tile-Editor scrollen beibringen?
Übersicht

![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Erstaunlich. Zwei Hassthreads in einem Forum ![]() ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
regaa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nö, so eben wurde der erste geschlossen ![]() |
||
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 ![]() |
|
---|---|---|
So um dann mal wieder zum Thema zu kommen ... ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
mOnK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das +-Zeichen wars ![]() 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 ![]() |
||
- Zuletzt bearbeitet von mOnK am Mi, Mai 05, 2004 17:54, insgesamt einmal bearbeitet
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Klar macht das einen Unterschied: Zitat: 20-5=15
20+5=25 ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Mattis_the_brain |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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-BITGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hi,
@Hubsi: Jetzt kommt die Frage noch einmal ! Wetten ? Toni |
||
mOnK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nein HOT, den gefallen tu ich dir nicht ![]() Das reicht schon, danke! |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group