2016-04-03 13 views
1

Gibt es eine Möglichkeit, eine unsichtbare Farbe in Pygame zu definieren, so dass der Aufruf auf screen.fill(invisibleColor,pygame.mouse.get_pos()) würde nicht die Zeichnungen dahinter abdecken?Pygame unsichtbar Farbe

+0

Sie könnten versuchen, eine RBGA-Farbe mit einer Transparenz von 100% zu verwenden. – Oisin

+0

Wie kann ich die Transparenz zu 100% machen? Die Verwendung von Farben wie (255,255,255,255) (mit dem Alpha-Argument) hilft nicht – amirteymuri

+0

Alpha von 255 ist völlig undurchsichtig - versuchen Sie stattdessen (255,255,255,0)? – SteJ

Antwort

2

Es gibt drei verschiedene Methoden für die Transparenz in Python; Mit Blick auf The documentation for fill sieht es so aus, als müssten Sie die speziellen Flags in den letzten Parameter übergeben, um die von Ihnen verwendete Transparenzmethode zu unterstützen.

Was ich nützlich fand, war die Verwendung der convert_alpha() Funktion Documented here statt convert auf meinen Oberflächen; Ich entdeckte, dass die Transparenz in meinem Fall nicht funktionierte, weil ich reguläre convert verwendete.

ZUSÄTZLICH:

Ich bin nicht 100% klar, was Sie erreichen wollen, aber es fällt mir ein, dass Sie bedeuten, können Sie nur ein Rechteck unter der Maus wollen sichtbar sein und Sie bedeuten zu verwenden Transparenz dafür. Wenn das der Fall ist, gibt es ein paar Probleme:

  • Eine transparente Farbe ist nur das - transparent - Zeichnen über ein vorhandenes verkauftes Rechteck können Sie dieses durchgehende Rechteck durch Ihre transparente Farbe sehen; mit anderen Worten, es wird genau dasselbe sein, als wenn das Rechteck nicht an erster Stelle gezeichnet wäre
  • Sie werden einen ganzen Bildschirm zeichnen und dann abdecken; Das wird langsam sein.
  • Wenn dies das ist, was Sie erreichen möchten, können Sie besser eine kleinere Fläche (das unter der Maus befindliche Bit) rendern und diese über den einfarbigen Hintergrund auf den Bildschirm zeichnen.

    Wenn Sie wirklich ein festes Rechteck mit einem Loch unter der Maus zeichnen wollen, müssen Sie vier Rechtecken so (sorry für den ascii art) zeichnen:

    +------------------+ 
    |  1   | 
    +------+---+-------+ 
    | 2 | m | 3 | 
    +------+---+-------+ 
    |  4   | 
    +------------------+ 
    

    Auf diese Weise wird das Bit von der Bildschirm unter der Maus (m im 'Diagramm' markiert) wird nicht durch Ihre Volltonfarbe abgedeckt, aber die Rechtecke 1,2,3 & 4 werden alle als ein durchgehendes Rechteck (mit einem Loch unter der Maus) angezeigt.

    Hoffen, dass dies hilft, die Antwort auf Ihre Bedürfnisse zu verfeinern.

    +0

    'convert' und' convert_alpha' arbeiten an 'Surface' Objekten. Was, wenn ich eine transparente Farbe haben möchte, um ein 'Rect' zu zeichnen (zum Beispiel in' pygame.draw.rect (screen, COLOR, pygame.Rect) ')? – amirteymuri

    +1

    Das Zeichnen eines transparenten Rechtecks ​​ist genau das Gleiche wie das Zeichnen des Rechtecks ​​an erster Stelle; es ist eine Verschwendung von Berechnungen (und ich würde versuchen, jedes bisschen Leistung aus pygame herauszuholen, das ich bekommen könnte). Meinst du, du willst es halbtransparent (dh ein Alpha> 0)? – SteJ