PureBoard
https://www.purebasic.fr/german/

Grafikbugs
https://www.purebasic.fr/german/viewtopic.php?f=4&t=31084
Seite 1 von 1

Autor:  ccode_new [ 23.09.2018 20:27 ]
Betreff des Beitrags:  Grafikbugs

Hallo Leute,

ich wollte eigentlich mal an meinem TMX-Loader weiter programmieren.

Es treten aber diverse unerklärliche Grafikbugs auf, die beim laden der TMX-Dateien unter Tiled nicht existieren.

Siehe hier: (Zeltbug)

https://workupload.com/file/FzQSnvGu

Autor:  #NULL [ 23.09.2018 21:55 ]
Betreff des Beitrags:  Re: Grafikbugs

Mit Debugger komme ich gar nicht so weit.
In DecodeMap() übergibst du eine String-Adresse als Size an AllocateMemory().

Autor:  ccode_new [ 23.09.2018 22:02 ]
Betreff des Beitrags:  Re: Grafikbugs

Hallo #NULL,

korrigiere es gegen:

Code:
*bmap = AllocateMemory(MemoryStringLength(@bdata))

Autor:  #NULL [ 23.09.2018 22:05 ]
Betreff des Beitrags:  Re: Grafikbugs

Code:
*bmap = AllocateMemory(MemorySize(@bdata) * 4)

Damit sehe ich wenigstens was. Ob das so richtig ist, weiß ich aber nicht. Vielleicht lieber Base64DecoderBuffer() verwenden?

<edit>Mit MemoryStringLength() geht es auch :)

Autor:  ccode_new [ 23.09.2018 22:11 ]
Betreff des Beitrags:  Re: Grafikbugs

So! Das war zwar ein uncooler Bug (der bei mir aber funktioniert hat ;) ), aber nicht der eigentliche Fehler.

Autor:  #NULL [ 23.09.2018 22:44 ]
Betreff des Beitrags:  Re: Grafikbugs

Wenn ich den Screen kleiner mache
Code:
OpenWindowedScreen(WindowID(0), 0, 0, 800,600)
dann verschwinden die Schwarzen bereiche, die Transparenz funktioniert dann und die Tiles zucken auch nicht mehr.

Autor:  ccode_new [ 23.09.2018 22:50 ]
Betreff des Beitrags:  Re: Grafikbugs

Zitat:
dann verschwinden die Schwarzen bereiche, die Transparenz funktioniert dann und die Tiles zucken auch nicht mehr.


Das sind wieder andere Umstände und nicht der eigentliche Fehler.

Autor:  #NULL [ 24.09.2018 00:05 ]
Betreff des Beitrags:  Re: Grafikbugs

Ich seh da nicht ganz durch aber hiermit kannst du dir die clipping informationen anzeigen lassen:
(z.b. ist tid in deinem programm eins höher als in tiled angezeigt)
Code:
...

Global NewMap m.s()

Procedure DisplayTile(tid, x, y)
  If tid > 0
    ding=#False
    If tid <= (sw / tileset(0)\tileWidth)
      calcX = (tid * tileset(0)\tileWidth)-tileset(0)\tileWidth
      ClipSprite(0, calcX, 0, tileset(0)\tileWidth, tileset(0)\tileHeight)
      ding=#True
    EndIf
    For q = 2 To (sh / tileset(0)\tileHeight)-1
      If tid > (sw / tileset(0)\tileWidth) And tid <= (sw / tileset(0)\tileWidth)*q
        tcalc = (sw / tileset(0)\tileWidth) * (q-1)
        calcX = ((tid - tcalc) * tileset(0)\tileWidth)-tileset(0)\tileWidth
        calcY = tileset(0)\tileHeight * (q-1)
        ClipSprite(0, calcX, calcY, tileset(0)\tileWidth, tileset(0)\tileHeight)
        Break
      EndIf
    Next q
    DisplayTransparentSprite(0, x, y)
    key.s = ""+x+","+y
    m(key) = ""
    ;m(key) + ""+x+","+y+","
    m(key) + ""+tid+","
    ;m(key) + ""+calcX+","+calcY+","
    ;m(key) + ""+tileset(0)\tileWidth+","+tileset(0)\tileHeight
    ;m(key) + ""+","+ding

  EndIf
EndProcedure



...



      ClearScreen($66)
     
      ClearMap(m())
     
      ;DrawIsoMap(xmap1, cx, cy)
      DrawIsoMap(xmap2, cx, cy)
      ;DrawIsoMap(xmap3, cx, cy)
     
      StartDrawing(ScreenOutput())
      ForEach m()
        _x = Val(StringField(MapKey(m()),1,","))
        _y = Val(StringField(MapKey(m()),2,","))
        DrawText(_x,
                 _y,
                 m())
        Box(_x,_y,1,1,$ffffffff)
      Next
      StopDrawing()


Autor:  #NULL [ 24.09.2018 02:03 ]
Betreff des Beitrags:  Re: Grafikbugs

Das Sprite mit Alphakanal laden:
Code:
LoadSprite(0, *tset\image\source, #PB_Sprite_AlphaBlending)

Und das Clipping geht auch einfacher:
Code:
Procedure DisplayTile(tid, x, y)
  If tid > 0
    _x = 64 * ((tid-1) % 16)
    _y = 32 * ((tid-1) / 16)
    _w = 64
    _h = 32
    ClipSprite(0, _x, _y, _w, _h)
    DisplayTransparentSprite(0, x, y)
  EndIf
EndProcedure

ebeno deine DrawIsoMap(), war irgendwie rückwärts von links gezeichnet
Code:
Procedure DrawIsoMap(level.s, x_start, y_start)
  t = 1
  For y = 0 To 31
    For x = 0 To 31
      xpos = x_start + x * 32 - y * 32
      ypos = y_start + x * 16 + y * 16
      If Val(StringField(level, t, ",")) <> 0
        DisplayTile(Val(StringField(level, t, ",")), xpos, ypos)
      EndIf
      t + 1
    Next x
  Next y
EndProcedure
Mußt dann nur den Startpunkt anpassen:
Code:
    Global cx = ScreenWidth() / 2
    Global cy = 0


Das entscheidende war aber #PB_Sprite_AlphaBlending.

Autor:  ccode_new [ 24.09.2018 05:42 ]
Betreff des Beitrags:  Re: Grafikbugs

Zitat:
Das Sprite mit Alphakanal laden


Autsch!

Danke!

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/