Seite 1 von 1

Lustiges Phänomen mit -DisplayTransparentSprite-

Verfasst: 08.02.2006 19:26
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

Verfasst: 09.02.2006 12:40
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

Verfasst: 09.02.2006 12:46
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?

Verfasst: 09.02.2006 12:51
von kdeparade
Asche auf mein Haupt!!!!
Wirklich doooooof von mir so eine Frage zu stellen!!!
Danke für den Tip.

Gruss KU

Verfasst: 09.02.2006 12:54
von DrShrek
No Problem...
Dafür sind wir da ;-)

Verfasst: 09.02.2006 13:39
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...

Verfasst: 09.02.2006 14:19
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.

Verfasst: 11.02.2006 02:25
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