Lustiges Phänomen mit -DisplayTransparentSprite-

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
kdeparade
Beiträge: 41
Registriert: 16.01.2006 21:08

Lustiges Phänomen mit -DisplayTransparentSprite-

Beitrag von kdeparade »

Habe ein Prog geschrieben, welches mir aus einer Configdatei die dort angegeben Bilder und Positionen darstellt.
Beim 1. Bild funktioniert noch das wegfiltern von "Schweinchenrosa". Beim 2. wird die Farbe schwarz nicht mehr dargestellt aber dafür ist der Bildrand in rosa sichtbar.
An den Bildern liegt es nicht , da ich schon die Reihenfolge in der Config-Datei umgekehrt habe.
Hier mal mein Code. Vielleicht weiss der Eine oder andere Rat.
Der Code ist nach unten hin gekürzt, also die Schleifen usw. sind richtig.

Code: Alles auswählen

Repeat                                                   ; Eine Schleife wird gestartet...
  FlipBuffers()

  TransparentSpriteColor(0,255,0,255) ; Hintergrundfarbe "Rosa" ausblenden     
  ; Hintergrund einblenden
  DisplaySprite(99,0,0)
  ;--Sprites darstellen--
  ; Setzte Index für Array auf 0
  arrayindex = 0  
  Repeat
  ;TransparentSpriteColor(0,255,0,255) ; Hintergrundfarbe "Rosa" ausblenden     
  bildstring.s = element(arrayindex)\Bildposi
  bildx.w = Val( Mid(bildstring,1,(FindString(bildstring, ",", 1) - 1)))
  bildy.w = Val( Mid(bildstring,(FindString(bildstring, ",", 1) +1),100 ))
  DisplayTransparentSprite(arrayindex,bildx,bildy)
   ;-- Zeiger, Texte.. darstellen---
  StartDrawing(ScreenOutput())            
    DrawingMode(1)  ; transparenter Text
    FrontColor(0,160,0) 
    
    textstring.s = element(arrayindex)\Textposi
    textx.w = Val( Mid(textstring,1,(FindString(textstring, ",", 1) - 1)))
    texty.w = Val( Mid(textstring,(FindString(textstring, ",", 1) +1),100 ))
    Locate (textx,texty)
    DrawText(element(arrayindex)\Text + Str(arrayindex))
    
    
    zeigerstring.s = element(arrayindex)\Zeigerposi
    zeigerx.w = Val( Mid(zeigerstring,1,(FindString(zeigerstring, ",", 1) - 1)))
    zeigery.w = Val( Mid(zeigerstring,(FindString(zeigerstring, ",", 1) +1),100 ))
    zeigergrad.f = element(arrayindex)\Zeigerwinkel
    Zeigerrad.w = element(arrayindex)\Zeigerradius
    LineXY(zeigerx,zeigery,zeigerx+GSin(- zeigergrad)*Zeigerrad,zeigery+GCos(- zeigergrad)*Zeigerrad,$0000FF)
    zeigermalen(zeigerx,zeigery,zeigergrad,Zeigerrad)
  StopDrawing()
  arrayindex + 1 ; Index für Array um 1 erhöhen
Until arrayindex > elementezahl ; wiederhole für alle Einträge im Array
kdeparade
Beiträge: 41
Registriert: 16.01.2006 21:08

Beitrag von kdeparade »

Hier ist der Code noch einmal streng gekürzt.
Funktion ist. Stelle soviel Sprites dar, wie es Einträge im Array gibt.
Wie gesagt.Das auslesen des Arrays und das Aufdröseln der x und y Daten funktioniert!
Warum wird beim 2. Durchlauf der Schleife die Transparentspritecolor auf schwarz gesetzt?

Code: Alles auswählen

Repeat                                                   
  FlipBuffers()
  TransparentSpriteColor(0,255,0,255) ;"Rosa" ausblenden     
  DisplaySprite(99,0,0) ; Hintergrundgrafik darstellen
  ;-- beliebige Anzahl Sprites darstellen--
  ; Setzte Index für Array auf 0
  arrayindex = 0 
  Repeat
         bildstring.s = element(arrayindex)\Bildposi
         bildx.w = Val( Mid(bildstring,1,(FindString(bildstring, ",", 1) - 1)))
         bildy.w = Val( Mid(bildstring,(FindString(bildstring, ",", 1) +1),100 ))
         DisplayTransparentSprite(arrayindex,bildx,bildy)
         arrayindex + 1 ; Index für Array um 1 erhöhen
  Until arrayindex > elementezahl ; wiederhole für alle Einträge im Array 
..... usw
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

Sieh Dir mal das hier genauer an:

TransparentSpriteColor(0,255,0,255)

Und dann mal das:

Code: Alles auswählen

arrayindex + 1 ; Index für Array um 1 erhöhen 
Na verstanden?
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
kdeparade
Beiträge: 41
Registriert: 16.01.2006 21:08

Beitrag von kdeparade »

Asche auf mein Haupt!!!!
Wirklich doooooof von mir so eine Frage zu stellen!!!
Danke für den Tip.

Gruss KU
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

No Problem...
Dafür sind wir da ;-)
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Kleiner Tip, schreib einmal ganz am Anfang Deines Programms, am besten nach InitSprite() den Befehl TransparentSpriteColor(-1,255,0,255) - das gilt dann ein für allemal für sämtliche Sprites, die Du danach laden wirst.

Sinnvoll, da Du Dich normalerweise sowieso auf eine einzige Transparenzfarbe festlegen wirst...
kdeparade
Beiträge: 41
Registriert: 16.01.2006 21:08

Beitrag von kdeparade »

Also das beschriebe

Code: Alles auswählen

TransparentSpriteColor(-1,255,0,255)
funktioniert nicht! Egal wo ich diesen Befehl ausführe, es wird "Rosa" dargestellt und "schwarz" weggefiltert.
Wenn ich allerdings

Code: Alles auswählen

TransparentSpriteColor(arrayindex,255,0,255)
in der Schleife ausführe funzt es wunderbar.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Hmm komisch, bei mir lief es immer perfekt.
Mach am besten eine eigene Procedure namens LoadGraphics() oder so. Dort lädst Du alle Sprites und sagst anfangs TransparentSpriteColor(-1,255,0,255), dann muß das klappen. Wenn nicht, versuch mal erst mind. 1 Sprite zu laden und dann den Befehl aufrufen und danach den Rest laden... und wenn es dann immer noch nicht geht, poste hier den Code Deiner LoadGraphics() :D
Antworten