ich will unter Pygame einen eigenen Mauszeiger in Form einer Hand benutzen. Da mir ein einfacher Zeiger in schwarz / weiß reicht, wollte ich einen aus einem String ( enthällt "X", "." und " ") erstellen. Mit dem selbst erstellten String von der Größe 24x24 funktioniert das auch wie gewünscht. Eingebunden habe ich den Mauszeiger so:
Allerdings ist der Hintergrund des Mauszeigers jetzt nicht mehr transparent sondern weiß und der Mauszeiger flackert teilweise. Da ich bis auf die Größe des Strings nichts geändert habe, weiß ich nicht so recht, wo ich mit der Fehlersuche beginnen soll...
Kann da zufällig jemand weiter helfen oder hat sonst eine Idee?
Vergleiche mal datatuple klein gross und masktuple klein gross,
die müssten ja nur doppelt so gross sein und sich sonst nicht weiter unterscheiden
Ist das der Fall?
Die kleinen Tuple haben eine länge von 72 und die großen von 288. Also sind die großen 4-mal so lang, so wie man es erwarten würde.
Ich glaube zwar nicht, dass das viel hilft, aber das hier ist der Inhalt der Tuple. Bei den großen zeigt PyCharm gar nicht mehr alles an.
@ThomasL: Danke schon einmal für den Link.
Ich werde mir morgen noch mal in Ruhe anschauen müssen, wie ich mit Hilfe von bin() aus dem datatuple und dem masktuple den lesbaren String generiere. Irgend etwas mache ich da noch falsch. Dann verstehe ich vielleicht auch, was da zur Zeit noch falsch läuft.
Ansonsten lasse ich mir mit dem Code unter GitHub mal einen String-Cursor aus einem Bild generieren. Vielleicht funktioniert das ja besser.
Ich habe noch etwas mit dem Erstellen der Mauszeiger herumprobiert. Dabei habe ich unterschiedliche Mauszeiger aus Strings und aus Bildern generiert.
Auffällig ist dabei, dass "pygame.mouse.set_cursor()" Zeiger bis zu einer Größe von 32x32 Pixel so umsetzt wie man sich das vorstellt und ab 40x40 Pixel transparente und xor Flächen weiß bzw. schwarz anzeigt. Getestet habe ich die Größen 24x24, 32x32, 40x40 und 48x48.
Warum das so ist, habe ich (noch) nicht heraus bekommen.
Oder vielleicht noch spezieller eine Limitierung des Grafikkartentreibers oder gar der Hardware für welche Cursorgrössen Hardwarebeschleunigung angeboten wird, und dann vielleicht ein Bug der bei nicht unterstützten Grössen dann Mist baut statt auf etwas langsameres aber funktionierendes zurück zu fallen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Wenn man das zu dem unterliegenden Systemcall verfolgt, kommt man zu https://docs.microsoft.com/en-us/window ... or#remarks - und da gibt's definitiv Limitierungen. KA ob die auch exponiert sind in pygame, aber da kann man ja auch mal mit ctypes probieren was zu machen.
@__deets__: Bei SDL gibt's diese Limitierungen nur teilweise und ich würde da halt erwarten, dass es Fallbackcode gibt, wenn das OS eine Cursorgrösse nicht unterstützt, denn Code um das selbst zu machen muss auf jeden Fall da sein, da SDL auch ganz simple Framebuffer unterstützt und dort die Cursor ja auf jeden Fall komplett selbst zeichnen muss.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Ich sehe da nichts im Windows Backend, das diese These stuetzen wuerde. Was in der pygame Dokumentation selbst empfohlen wird ist, den Cursor zu verstecken, und stattdessen ein normales Surface zu verwenden, und das an der Mausposition zu blitten.