Ich habe ein Sprite, das ein primitives Rechteck ist, das um 45 Grad gedreht ist. Ich würde gerne eine Bitmap
mit BitmapData
erstellen, die es genau kopieren wird. Ich dachte, dass BitmapData#draw
nur auf meinem Sprit arbeitet, also versuchte ich naiven Ansatz:Sprite auf BitmapData ohne Padding zeichnen
var a = new Sprite();
a.graphics.beginFill(0xFF0000);
a.graphics.drawRect(0, 0, 200, 100);
a.graphics.endFill();
a.x = 100;
a.y = 100;
a.rotation = 45;
addChild(a);
var bitmapData = new openfl.display.BitmapData(1500, 1500, false, 0x00000000);
bitmapData.draw(a);
var bitmap = new openfl.display.Bitmap(bitmapData);
bitmap.x = 500;
bitmap.y = 100;
addChild(bitmap);
aber das Ergebnis hat mich überrascht:
Es scheint, es Transformations-Matrix bewahrt (die in der Tat Sinn macht, sonst Rotation wäre verloren). Also habe ich versuchte robusten Ansatz:
var bitmapData = new openfl.display.BitmapData(1500, 1500, false, 0x00000000);
var rect = a.getBounds(a.parent);
var matrix = a.transform.concatenatedMatrix;
matrix.translate(-rect.left, -rect.top);
bitmapData.draw(a, matrix);
gewünschtes Ergebnis ist
Und noch, die gleiche Resultat wie im Bild zur Verfügung gestellt. Ich habe versucht Ich vergaß clipRect
param, aber noch seltsamer, egal wie groß das Rechteck ist, Objekt überhaupt nicht kopiert wird (nur schwarzer Raum bleibt).x
und y
, ist Clip kein Problem
var bitmapData = new openfl.display.BitmapData(1500, 1500, false, 0x00000000);
var clip = new openfl.geom.Rectangle(1500, 1500);
bitmapData.draw(a, clip);
I BitmapData#draw
mißbrauchen Bin? Jede Hilfe willkommen
(Es muss BitmapData- sein, wie ich es in pixelgenaue Kollisionsprüfung zu verwenden, haben mit BitmapData#hitTest
)
OpenFL 4.0.0
Getestet mit Cpp, Neko und HTML5
Thank Sie.
Ich bin nicht sicher, was Ihre Frage genau ist, weil ich nicht sicher bin, was Ihr gewünschtes Ergebnis ist. – null
Bild mit gewünschtem Ergebnis hinzugefügt. Aber ich denke, der Code ist richtig, aber es könnte [ein Fehler in OpenFL 4] sein (https://github.com/openfl/openfl/issues/1214) – Misiur