Map Editor lagt schon wieder![Erledigt]

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

TheMatrix

Betreff: Map Editor lagt schon wieder![Erledigt]

BeitragDo, Nov 30, 2006 15:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, ich hatte schonmal son Thema gestartet, nur ging es dabei um Objekte, die ich, wie von euch gelernt habe, in Arrays verpacken muss. Aber wie mach ich das nun mit der Textur?

Wenn ich eine Texture auf die Map zeichnen will, dann stockt es wie irre und das auch schon bei 1000*1000 Mapgrösse! Wie kann man jetzt in diesem Fall das laggen unterdrücken, weil wie schon gesagt, in DarkBasic hat das komischer nicht gelaggt wenn ich auf einer 5000*5000 Map eine Texture verändert habe Sad

Bitte helft!

Mein Code: [AUSKLAPPEN]

; Map Editor
Const key_up = 200, key_down = 208, key_right = 205, key_left = 203
Const key_return = 28, key_space = 57, key_minus = 74. key_plus = 78

wx = 640 : wy = 480
Graphics wx,wy,16,2

Global raster = 32

Global mapx = 2000/raster
Global mapy = 2000/raster

Global brush_size = 1
Global scrollx
Global scrolly
Global posx
Global posy

Dim map(mapx,mapy)

; Map erstellen
map_img = CreateImage(mapx*raster,mapy*raster) : SetBuffer ImageBuffer(map_img)
ClsColor 0,200,0 : Cls
For a=1 To 1000
 Color 100,255,100 : Rect Rnd(mapx*raster),Rnd(mapy*raster),3,3
Next

; Eine Texture erstellen
texture = CreateImage(raster,raster) : SetBuffer ImageBuffer(texture)
ClsColor 100,255,100 : Cls

SetBuffer BackBuffer() : ClsColor 0,0,0 : fps = CreateTimer(60)
MoveMouse wx/2,wy/2

While Not KeyHit(1)

 WaitEvent(fps)
 Cls

 CopyRect scrollx, scrolly,wx-1,wy-1,0,0,ImageBuffer(map_img)
 mx = MouseX() : my = MouseY()

 ; Variabeln fürs leichtere Bearbeiten
 selectedx = (mx + scrollx)/raster : selectedy = (my + scrolly)/raster   ; Gibt das derzeitig anvesierte Feld für map(x,y) an
 posx = selectedx*raster : posy = selectedy*raster                  ; Gitb die Aktuelle x,y-Koordinate auf der Map an
 view_posx = (selectedx*raster)-scrollx                           ; Gibt die aktuelle x,y-Koordinate auf dem Bildschirma an
 view_posy = (selectedy*raster)-scrolly

 ; ********************************
 ; *                Objekt Handle *
 ; ********************************
 ; Objekt anzeigen
 For bx=0 To brush_size-1
    For by=0 To brush_size-1
    DrawImage texture,view_posx+bx*raster, view_posy+by*raster
   Next
 Next

 ; Objekt erstellen
 If MouseDown(1) Or KeyDown(key_return)
  SetBuffer ImageBuffer(map_img)
    For bx=0 To brush_size-1
       For by=0 To brush_size-1
       DrawImage texture,posx+bx*raster, posy+by*raster
      Next
    Next
  SetBuffer BackBuffer()
 End If

 ; ********************************
 ; *                    Steuerung *
 ; ********************************
 ; Brush Größe ändern
 If KeyHit(key_minus) Then brush_size = brush_size - 1
 If KeyHit(key_plus)Then brush_size = brush_size + 1

 brush_size = brush_size+MouseZSpeed()*-1
 If brush_size<1 Then brush_size = 1
 If brush_size>10 Then brush_size = 10

 ; Map Steuerung
 If KeyDown(key_left) Then x=-1
 If KeyDown(key_right) Then x=1
 If KeyDown(key_up) Then y=-1
 If KeyDown(key_down) Then y=1

 If x<0 And speedx>0 Or x>0 And speedx<0 Then speedx=0
 If y<0 And speedy>0 Or y>0 And speedy<0 Then speedy=0

 If x>0 And speedx<8 Or x<0 And speedx>-8 Then speedx = speedx + x Else If x=0 Then speedx=0
 If y>0 And speedy<8 Or y<0 And speedy>-8 Then speedy = speedy + y Else If y=0 Then speedy=0

 If mx>wx-80 Then speedx=(8-((wx-mx)/10))
 If mx<80 Then  speedx=(8-mx/10)*-1
 If my>wy-80 Then speedy=(8-((wy-my)/10))
 If my<80 Then speedy=(8-my/10)*-1

 scrollx = scrollx + speedx : x=0
 scrolly = scrolly + speedy : y=0
 ; ---------

 Flip 0
Wend

; Daraus wird nachher mein Menu
Function draw_roundwindow(sx,sy, s=10)
Line 0,0,0,sy-s
Line sx,0,sx,sy-s
draw_circle(s,sy-s,s,270,360)
Line s,sy,sx-s,sy
draw_circle(sx-s,sy-s,s,0,90)
End Function

Function draw_circle(x,y,s,r1=0,r2=360)
LockBuffer()
 For a=r1 To r2
  cx = x + Sin(a)*s
  cy = y + Cos(a)*s
  WritePixelFast cx,cy,$FFFFFF
 Next
UnlockBuffer()
End Function
[/code]
°_° °.° °~° °v° .. -.-
  • Zuletzt bearbeitet von TheMatrix am Do, Nov 30, 2006 21:56, insgesamt 2-mal bearbeitet

TheMatrix

BeitragDo, Nov 30, 2006 17:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry für Doppelt Post. Aber hat da keiner eine Idee?

mfg, Manu
°_° °.° °~° °v° .. -.-
 

Matthias

BeitragDo, Nov 30, 2006 17:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hay Matrix. Ich weis eigentlich nicht so richtig was du wilst kannst du das mal besser Erklären. Ich sehe in deinen Quellcode nur Lauter Hellgrüne Vierecke auf Grünen Untergrund.

Wilst du Tiles auswälen die in ein TilesMap setzen und dieses verschieben können oder was?

Mfg Matthias

TheMatrix

BeitragDo, Nov 30, 2006 17:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube, ihr könnt langsam ne HighsoreListe davon machen, wie oft mich jetzt schon zu deppen gemacht habe Embarassed

Ich trottel benutz natürlich aufer Arbeit, BlitzPlus 1.1 von früher, um meine Programmcodes dort mal in den Pausen weiterzucode, oder um neue Ideen zu sammeln. Und diese MistVersion, hat natürlich voll die Probleme bei sowas. Mad . Schön, der Code funktioniert. Hab BB Demo mal eben schnell geloadet. Boah und ich hab schon wieder das zweifeln angefangen Rolling Eyes . So, BB+ ist jetzt von der Festplatte auf immer und ewig von meiner Platte verbannt. Ich prog jetzt nur noch auf BB, ganz normal wiezu Haus auch.

Dann ich erspar ich mir wenigstens die zukünftigen Desasters hier im Forum Very Happy .

Also nochmal Sorry für das Thema hier! Am besten löscht ihr das dämliche Zeugs. Will die Blamage hier ausem Thread haben Rolling Eyes
°_° °.° °~° °v° .. -.-
 

Matthias

BeitragDo, Nov 30, 2006 18:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Mann nun sei doch nicht eingeschnapt bin ja schon dabei dir ein Beispiel code zu Progen
 

Matthias

Betreff: Beispiel

BeitragDo, Nov 30, 2006 18:38
Antworten mit Zitat
Benutzer-Profile anzeigen
So bin jetzt fertig.

Hoffe das hilft dir Weiter.
Bei Delay 300 kanst du auch 0:Das hat dann Richtig Speed
Code: [AUSKLAPPEN]

Global ScrX=800,ScrY=600
Graphics ScrX,ScrY,32,2
Global TilesGrosse=32
Global MaxTiles=100,TilesIst
Global MapMaxX=2000,MapMaxY=2000
Global MausClick
Global MapPosX,MapPosY,TilesListAnf
Dim Map(MapMaxX,MapMaxY)

TilesAniErzeugen();"----------Mus nur einmal gemacht werden"
Global Tiles=LoadAnimImage("Tiles.Bmp",TilesGrosse,TilesGrosse,0,MaxTiles)
MoveMouse ScrX*.5,ScrY*.5:SetBuffer BackBuffer()
ClsColor 200,200,200






Repeat
Cls
MausClick=MouseDown(1)

TilesMapAnzeige()
;-------------------------------TilesSetzen---------------------"
TileXMaus=MouseX()/TilesGrosse:TileYMaus=MouseY()/TilesGrosse
DrawBlock Tiles,TileXMaus*TilesGrosse,TileYMaus*TilesGrosse,TilesIst



;--------------------------------Map Verschieben-----------------"
Select MouseY()<ScrY-TilesGrosse And MausClick=1:Case 1
Map(TileXMaus+MapPosX,TileYMaus+MapPosY)=TilesIst:End Select

Select MouseX()<10 And MapPosX>0:Case 1:MapPosX=MapPosX-1:Warte=1:End Select
Select MouseX()>ScrX-10 And MapPosX<MapMaxX-20:Case 1:MapPosX=MapPosX+1
Warte=1:End Select

Select MouseY()<10 And MapPosY>0:Case 1:MapPosY=MapPosY-1:Warte=1:End Select
Select MouseY()>ScrY-10 And MapPosY<MapMaxY-20:Case 1:MapPosY=MapPosY+1
Warte=1:End Select



TilesAuswahlListe()

Flip
Select Warte:Case 1:Warte=0:Delay 100:End Select
Until KeyDown(1)=1
End

Function TilesMapAnzeige():TG=TilesGrosse:MaxX=ScrX/TG:MaxY=ScrY/TG
For ZX=0 To MaxX-1:For ZY=0 To MaxY-2
DrawBlock Tiles,ZX*TG,ZY*TG,Map(MapPosX+ZX,MapPosY+ZY):Next:Next
End Function


Function TilesAuswahlListe()

Select MausClick=1 And MouseY()>ScrY-TilesGrosse:Case 1
TilesIst=(MouseX()/TilesGrosse)+TilesListAnf
End Select:MaxT=ScrX/TilesGrosse

Select KeyHit(203) And TilesListAnf>0:Case 1:TilesListAnf=TilesListAnf-1
End Select:Select KeyHit(205) And TilesListAnf<MaxTiles+MaxT:Case 1
TilesListAnf=TilesListAnf+1:End Select


For Z=0 To MaxT-1:
DrawBlock Tiles,Z*TilesGrosse,ScrY-TilesGrosse,Z+TilesListAnf:Next
Color 255,255,255
Rect TilesIst*TilesGrosse,ScrY-TilesGrosse,TilesGrosse,TilesGrosse,0
End Function

Function TilesAniErzeugen():TG=TilesGrosse
Image=CreateImage(TG*MaxTiles,TG):SetBuffer ImageBuffer(Image)
For Z=0 To MaxTiles-1:Color 200,0,0:Rect Z*TG,0,TG,TG:Color 255,255,0
Rect Z*TG,0,TG,TG,0:Color Rnd(255),Rnd(255),Rnd(255):Oval Z*TG,0,TG,TG
Next:SaveImage Image,"Tiles.Bmp":FreeImage Image
End Function

TheMatrix

BeitragDo, Nov 30, 2006 18:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Nee, brauchste nich Matthias. Ich meker einfach immer zu früh los und das ist halt mein Fehler ^^. Der Code funktioniert ja und mehr wollte jetzt erstmal nich. Das man zwischen Objekte und Texture unterscheidet kommt morgen da rein.

Also seid wieder gespannt auf meine dämlichen Fragen Razz Cool
°_° °.° °~° °v° .. -.-

TheMatrix

BeitragDo, Nov 30, 2006 18:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Und das hast du mal eben geschrieben??? Wow. Hat man dann auch info darüber, auf welchem Feld, welche Farbe abgespeichert ist?

Ich glaube, davon kann ich gut was in meinen Editor mitreinnehmen(wenn du nichts dagegen hast Wink ). Vor alledem gefällt mir, das scrollen der verschiedenen Farben ganz unten.

Sehr Gut Very Happy
 

Matthias

BeitragDo, Nov 30, 2006 18:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Naklar kannst du das in Deinen Programm einbauen das habe ich für dir Extra Geschrieben. Die Kugeln sind Die Einzelnen Tiles die sind als Bmp
auf deiner Festplatte abgespeichert die kannst du ganz locker
veränder. Du kannst auch die Tilesgrosse mal verändern habe ich aber selber noch nicht getestet. Oder PfeilTasten benutzen um Die Tilesliste
zu Rollen.

TheMatrix

BeitragDo, Nov 30, 2006 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit den Pfeiltasten hab ich gleich als erstes rausgefunden ^^. Das gefällt mir ja so super Wink . Werd das aber warscheinlich noch auf die Maus umlenken Very Happy .

Deine Tilegröße ist in der Tat variabel. Aber man kann maximal nur bis 8px gehen, ansonsten kommt ein Illegal Memory Access, was aber voll egal ist, da 8 dicke reichen Very Happy .
°_° °.° °~° °v° .. -.-
 

Matthias

BeitragDo, Nov 30, 2006 19:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Soll ich dir das mit der Maussteuerung der TilesListe noch schreiben oder schafst du das selbst. Brauchst du noch ein MapLade/Save Modul

Tipp:Ich würde dafür aber Banken Benutzen weil 2000x2000x4Bytes=16MB RamSpeicher sind und wenn du das in einer Bank Speicherst und weniger als 255 Tiles hast Hast du nur 2000x2000x1Bytes=4MB >>>Größeres Map

Tipp Ziehe mal mein 3DKartenEditor.

TheMatrix

BeitragDo, Nov 30, 2006 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Nee, das krieg ich schon hin^^. Aber trotzdem danke Wink . Mit Bank kenn ich mich noch nicht so gut aus. Besser gesagt: Eigentlich garnich xD.

Ich arbeite da lieber mit Dim-Feldern, weil ich mich damit besser auskenne Smile .

Dein Editor? Na kla, mach ich gleich mal Very Happy .
°_° °.° °~° °v° .. -.-

TheMatrix

BeitragDo, Nov 30, 2006 20:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Wow, du bist ja n richtiger Meister darin, was Very Happy . Und sogar Design mäßig, sehr gut gelungen! Machst du da nochmal ein Spiel draus?

Aber ein Bug hab ich gleich für dich Twisted Evil . Wenn man vor der erstellung alle Regler auf minimum stellt, dann gibts ein illegal memory access Wink

mfg, manu
°_° °.° °~° °v° .. -.-
 

Matthias

BeitragDo, Nov 30, 2006 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für deinen BugMeldung Aber keiner will keineInsel werde ich aber drozdem in der nästen version abändern.
Tipp:; Habe jetzt das Programm als Project vorgestelt da gibs mehr Infos.
https://www.blitzforum.de/foru...hp?t=20905
Mfg Matthias

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group