Map Editor lagt schon wieder![Erledigt]
Übersicht

![]() |
TheMatrixBetreff: Map Editor lagt schon wieder![Erledigt] |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 |
||
°_° °.° °~° °v° .. -.- |
- Zuletzt bearbeitet von TheMatrix am Do, Nov 30, 2006 21:56, insgesamt 2-mal bearbeitet
![]() |
TheMatrix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sorry für Doppelt Post. Aber hat da keiner eine Idee?
mfg, Manu |
||
°_° °.° °~° °v° .. -.- |
Matthias |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaube, ihr könnt langsam ne HighsoreListe davon machen, wie oft mich jetzt schon zu deppen gemacht habe ![]() 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. ![]() ![]() Dann ich erspar ich mir wenigstens die zukünftigen Desasters hier im Forum ![]() Also nochmal Sorry für das Thema hier! Am besten löscht ihr das dämliche Zeugs. Will die Blamage hier ausem Thread haben ![]() |
||
°_° °.° °~° °v° .. -.- |
Matthias |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mann nun sei doch nicht eingeschnapt bin ja schon dabei dir ein Beispiel code zu Progen | ||
MatthiasBetreff: Beispiel |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() ![]() |
||
°_° °.° °~° °v° .. -.- |
![]() |
TheMatrix |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() Sehr Gut ![]() |
||
Matthias |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das mit den Pfeiltasten hab ich gleich als erstes rausgefunden ^^. Das gefällt mir ja so super ![]() ![]() 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 ![]() |
||
°_° °.° °~° °v° .. -.- |
Matthias |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nee, das krieg ich schon hin^^. Aber trotzdem danke ![]() Ich arbeite da lieber mit Dim-Feldern, weil ich mich damit besser auskenne ![]() Dein Editor? Na kla, mach ich gleich mal ![]() |
||
°_° °.° °~° °v° .. -.- |
![]() |
TheMatrix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wow, du bist ja n richtiger Meister darin, was ![]() Aber ein Bug hab ich gleich für dich ![]() ![]() mfg, manu |
||
°_° °.° °~° °v° .. -.- |
Matthias |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group