Frage

Ich habe zum Spaß ein Open-Source-Spiel glücklich Codierung, aber ich erkennen, dass Graphics.setColor() nicht 0xAARRGGBB nicht versteht. Ich mag eine mehr und mehr transparent Farbe erhalten, in denen ich einige Bögen ziehen würde (Scheiben). Mein Ziel war es ihnen jedoch einander wie in diesem Bild glänzen: http://kenai.com/projects/xplode (das logo dort)

Ich weiß, dass Transparenz Manipulation ist möglich, mit Bildern (getRGB etc.) noch das beweist, sehr langsam für ein Spiel mit vielen Größe und Transparenz ändert.

Gibt es eine Möglichkeit i transparent skalierbare Scheiben in J2ME ziehen konnte, ohne JSR mit 184 noch JSR-226? Ich fürchte, dass es jetzt „gut“ Weg ist, um damit umzugehen und ich werde einfach ohne diese Effekte gehen, aber warum nicht fragen, wenn sie in Not?

War es hilfreich?

Lösung

Transparenz Zeug muss nicht langsam, so lange sein, wie Sie es auf ein Minimum halten und bleiben weg von sehr alten Handys. Sie sollten auch beachten, dass alpha manchmal auf einigen Implementierungen ignoriert und quantisiert manchmal hässlich Ebene (Einige Motorola Telefone Alpha-Werte bis zum nächsten 2-Bit-Wert einrasten. Bleh).

würde ich versucht sein, diese als eine einzige transparente Schicht auf den Bildschirm überlagert zu nähern. Halten Sie einen int-Array die Größe des Bildschirms in denen Sie Ihr transparentes Pixel (int [width * height]) plot. Auf jedem Rahmen, um einen Anruf zu Image.createRGBImage machen und das Bild auf den Bildschirm zeichnen.

Als ein Experiment, könnte man zunächst sicherstellen möchten, dass die Alpha-Verarbeitung nicht Sie verlangsamen wird durch dieses Array mit einem konstanten Wert Füllung und Bildschirm zum Plotten. Z.B. 0x80FF0000 sollte einen roten Farbton auf dem Bildschirm mischen und man kann leicht sehen, ob das Alpha-Geschäft auf dem gewählten Hörer sein bearbeitbar wird, das heißt können Sie messen, wie es Auswirkungen auf Ihre Frame-Rate.

Als Nächstes werden Sie Kreise in diesem Array zeichnen müssen. Geben Sie für Bresenhamschen Kreis Zeichnung Algorithmus und Nacharbeit es plotten in eine int Array von Pixeln. Vielleicht möchten Sie eine Lookup-Tabelle erhalten, die einen im Voraus berechneten Radius / sqrt (2) für jeden Radius der Lage sein, Sie zu zeichnen hat.

Als nächstes ist, wie die Farben zu mischen, um sie zu überlappen zu bekommen. Am einfachsten wäre nur einen Farbwert plotten mit Alpha in das Pixel. Sie würden nicht Farbmischung mit bereits aufgetragen Kreisen bekommen, aber es wäre billig und die Kreise würden verschmelzen mit dem Hintergrund.

Eine andere Methode wäre, die Farbmischung zu ignorieren, aber eine einfache Zusammenführung auf dem Alpha zu tun. Z.

newColour = ((destColour & 0xFF000000) + 0x20000000) | srcColour;
/* Where source colour is of the form 0x00RRGGBB. Note: Adding 0x20 to alpha each
 * time will only work for 7 overlapping circles. */

Die Farbe des überlappenden Kreis würde dominieren die darunterliegende, aber die Alpha würde undurchsichtiger, wo sie sich überlappen, die zumindest der Spieler erlauben würde, richtig alle Kreise zu sehen.

Wenn Sie wollten eine genaue Farbmischung zu tun, dann wird die Berechnungen viel komplizierter sind, vor allem, wenn Sie einen Wert mit alpha auf einem anderen mit Alpha-Blending, da die Farbbeiträge von jedem Pixel mit dem Anteil an alpha in jedem variieren Farbe. Es ist nicht unmöglich, aber es effizienter ist ein Schmerz zu machen. Ich versuche sein würde für eine billigere Option zu gehen.

Andere Tipps

Ich bin nicht sicher, ob man so etwas in eine einigermaßen effizienten Weise tun kann, allein die Graphics-Klasse. Warum versuchen Sie nicht OpenGL ES-Spezifikation für MIDP JSR 239?

Statt Bilder jeden Frame mit createRGBImage Erstellen () Sie können mit getRGB () und drawRGB ()

versuchen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top