Seite 1 von 1

DisplaySprite liefert anderes Ergebniss als ImageGadget

Verfasst: 10.07.2013 16:33
von TheNewOne
Hallo zusammen,
Ich habe einen WindowedScreen neben ein par ImageGadgets und wenn ich nun die gleichen Bilder als Sprites und Images laden lasse, werden sie aber unterschiedlich angezeigt. In den ImageGadgets funktioniert noch alles Prima, aber im Screen werden selbige in anderen Farben (hauptsächlich Lila/Rosa) angezeigt.
Nun habe ich mich gefragt was ich da falsch gemacht habe.
Hier der ganze Code:

Code: Alles auswählen

Global MaxKarteX, MaxKarteY, ZeigeKarte = #False
Global MaxTiles = 0
Global MausX, MausY, KMausX, KMausY, aktTile = 0, lastTile = 0

Procedure NeueKarte(groesse.i)
  MaxKarteX = groesse
  MaxKarteY = MaxKarteX
  Global Dim Karte(MaxKarteX, MaxKarteY)
  ZeigeKarte = #True
EndProcedure

Procedure ZeichneKarte()
  If ZeigeKarte = #True
    For y = 0 To MaxKarteY
      For x = 0 To MaxKarteX
        DisplaySprite(Karte(x, y), x*20, y*20)
      Next
    Next
  EndIf
EndProcedure

Procedure LadeTiles()
  ReadFile(0, "Sprites/Tilelist.txt")
  While Eof(0) = 0
    file.s = ReadString(0)
    LoadSprite(maxTiles, "Sprites/" + file + ".bmp")
    LoadImage(maxTiles, "Sprites/" + file + ".bmp")
    maxTiles + 1
  Wend
  CloseFile(0)
  maxTiles - 1
EndProcedure

Procedure Mouse()
  MausX = WindowMouseX(0)
  MausY = WindowMouseY(0)
  KMausX = (MausX - 200)/20
  KMausY = MausY/20
  
  SetGadgetText(3, "Maus-X: " + Str(MausX))
  SetGadgetText(4, "Maus-Y: " + MausY)
  If KMausX >= 0
    If KMausX <= MaxKarteX
      SetGadgetText(5, "Koordinaten: " + KMausX + "|" + KMausY)
    Else
      SetGadgetText(5, "Koordinaten:  | ")
    EndIf
  Else
    SetGadgetText(5, "Koordinaten: NA")
  EndIf
  
  If neu = #False
    If Not aktTile = lastTile
      SetGadgetState(99, ImageID(aktTile))
      lastTile = aktTile
    EndIf
  EndIf
EndProcedure

Procedure ChangeTile()
  If KMausX >= 0
    If KMausX <= MaxKarteX
      Karte(KMausX, KMausY) = aktTile
    EndIf
  EndIf
EndProcedure

Procedure OeffneKarte()
  OpenFileRequester("Karte laden", "Map.txt", "Text (*.txt)|*.txt", 1)
EndProcedure

InitSprite()
InitMouse()

If OpenWindow(0, 0, 0, 800, 620, "Map Editor", #PB_Window_ScreenCentered)
  OpenWindowedScreen(WindowID(0), 200, 0, 600, 600)
  If CreateMenu(0, WindowID(0))
    MenuTitle("Datei")
    OpenSubMenu("Neu")
    MenuItem(1, "10x10")
    MenuItem(2, "15x15")
    MenuItem(3, "20x20")
    MenuItem(4, "25x25")
    MenuItem(5, "30x30")
    CloseSubMenu()
    MenuItem(6, "Öffnen")
    MenuItem(7, "Speichern")
    MenuItem(8, "Beenden")
    MenuTitle("Tile")
    MenuItem(9, "Hinzufügen")
    MenuItem(10, "Entfernen")
    MenuTitle("Spawn")
    MenuItem(11, "Hinzufügen")
    MenuItem(12, "Entfernen")
  EndIf
  TextGadget(3, 5, 05, 60, 20, "Maus-X: " + Str(MausX))
  TextGadget(4, 5, 30, 60, 20, "Maus-Y: " + MausY)
  TextGadget(5, 5, 55, 100, 20, "Koordinaten: " + KMausX + "|" + KMausY)
  TextGadget(7, 5, 80, 100, 20, "Aktuelles Tile:")
  
  LadeTiles()
  
  ImageGadget(99, 80, 80, 20, 20, ImageID(0))
  
  For n = 0 To maxTiles
    ImageGadget(n + 100, 5 + x*25, 105 + y*25, 20, 20, ImageID(n))
    x + 1
    If x > 5
      x = 0
      y + 1
    EndIf
  Next
  
  Repeat
    Event = WaitWindowEvent()
    Select Event
      Case #PB_Event_Menu
        Select EventMenu()
          Case 1 : NeueKarte(10)
          Case 2 : NeueKarte(15)
          Case 3 : NeueKarte(20)
          Case 4 : NeueKarte(25)
          Case 5 : NeueKarte(30)
          Case 6 : OeffneKarte()
          Case 8 : CloseWindow(0)
            End
        EndSelect
      Case #PB_Event_Gadget
        Select EventType()
          Case #PB_EventType_LeftClick
            If Not EventGadget() = 99
              aktTile = EventGadget() - 100
            EndIf
        EndSelect
      Case #WM_LBUTTONDOWN : ChangeTile()        
    EndSelect
       
    FlipBuffers() 
    ClearScreen(0)

    ZeichneKarte()
    Mouse()
    
    Delay(1)
  Until Event = #PB_Event_CloseWindow
EndIf
Danke schon mal im Voraus für alle Antworten.

Re: DisplaySprite liefert anderes Ergebniss als ImageGadget

Verfasst: 10.07.2013 19:49
von KeyKon
Ich kann auf Anhieb keinen Fehler erkennen.
Vielleicht kannst du noch einen Screen posten, oder eines der Bilder zur Verfügung stellen, damit man das Problem evtl. selbst reproduzieren kann?

LG KeyKon

Re: DisplaySprite liefert anderes Ergebniss als ImageGadget

Verfasst: 10.07.2013 20:10
von TheNewOne
Es sind nicht sonderlich vielfältige Sprites :D
Habe sie hier mal hochgeladen:
http://www.file-upload.net/download-782 ... s.bmp.html
http://www.file-upload.net/download-782 ... d.bmp.html
http://www.file-upload.net/download-782 ... n.bmp.html
http://www.file-upload.net/download-782 ... r.bmp.html

Edit: und hier noch ein Screenshot, in dem man links die richtigen Bilder sieht und rechts im Screen die, die falsch angezeigt werden:
http://www.file-upload.net/download-782 ... 6.png.html

Re: DisplaySprite liefert anderes Ergebniss als ImageGadget

Verfasst: 10.07.2013 20:20
von RSBasic
@TheNewOne
Ich weiß nicht, ob andere ebenfalls das Problem haben, aber ich jedenfalls kann keine Grafiken von diesem File-Uploaddienst herunterladen. Ich klicke auf den Download-Button und werde nur zur "Danke für den Download"-Seite weitergeleitet und daraufhin sofort wieder auf die vorherige Downloadseite, auf der ich grad' eben war. Heruntergeladen wurde bei mir nichts.
Könntest du deine Grafiken vielleicht auf eine andere Uploadseite hochladen?

Re: DisplaySprite liefert anderes Ergebniss als ImageGadget

Verfasst: 10.07.2013 20:23
von KeyKon
Bei mir gings einwandfrei^^
Eine Frage hätte ich da aber noch, wie genau funktioniert dein Editor, ich schaffs nicht so recht ein Tile auf der Map einzufügen...

LG KeyKon

Re: DisplaySprite liefert anderes Ergebniss als ImageGadget

Verfasst: 10.07.2013 20:33
von TheNewOne
@KeyKon zuerst musst du oben auf Datei eine Neue Karte erstellen, und dann links unter aktuelles Tile, das Tile auswählen dass du setzen möchtest, und dann auf die im Screen auf das gewünschte Feld klicken.

Re: DisplaySprite liefert anderes Ergebniss als ImageGadget

Verfasst: 10.07.2013 21:13
von KeyKon
Das Problem scheint zu sein, dass du die BMPs mit Alphakanal (32bit) speicherst, daran scheint sich LoadSprite zu verschlucken, obwohl es eigentlich damit klar kommen sollte.
Eine Lösung wäre es die Bilder nur mit 24bit zu speichern, dann wird auch alles richtig geladen.
Wie man den Code in Richtung 32bit ändern könnte weis ich auch nicht.

Aber vll speicherst du das ganze auch einfach als PNG, dann ist es kleiner und gibt auch keine Probleme.

LG KeyKon

Re: DisplaySprite liefert anderes Ergebniss als ImageGadget

Verfasst: 10.07.2013 21:32
von TheNewOne
Danke KeyKon, ich habe es jetzt als PNG gespeichert und es funktioniert.