2010-04-06 4 views
0

J'ai créé par programme un graphique vectoriel (rect), repositionné le graphique et mis en place un MOUSE_MOVE eventListener pour tracer les informations de couleur du graphique en utilisant getPixel(). Cependant, le bitmapData est placé à 0,0 de la scène et je ne sais pas comment le déplacer afin qu'il corresponde à l'emplacement du graphique.Coordonnées de placement de bitmapData dans AS3

var coloredSquare:Sprite = new GradientRect(200, 200, 0xFFFFFF, 0x000000, 0xFF0000, 0xFFFF00); 
coloredSquare.x = 100; 

addChild(coloredSquare); 

var coloredSquareBitmap:BitmapData = new BitmapData(coloredSquare.width, coloredSquare.height, true, 0); 
coloredSquareBitmap.draw(coloredSquare); 

coloredSquare.addEventListener(MouseEvent.MOUSE_MOVE, readColor); 
function readColor(evt:Event):void 
    { 
    var pixelValue:uint = coloredSquare.getPixel(mouseX, mouseY); 
    trace(pixelValue.toString(16)); 
    } 

Répondre

2

utiliser la matrice de transformation du carré (qui contient la traduction aussi) en tant que deuxième paramètre de la méthode draw()

par exemple,

coloredSquareBitmap.draw(coloredSquare,coloredSquare.transform.matrix); 
+0

salut george. J'avais essayé cela mais l'évènement souris est perdu sur la moitié droite de la case colorée. il semble ne fonctionner que pour la moitié gauche. – TheDarkIn1978

+0

+1. bien que 'concatenatedMatrix' soit meilleur, puisqu'il fonctionne dans tous les cas, un pas juste si le parent n'a aucune transformation appliquée. – back2dos

+0

@ back2dos merci d'avoir souligné cela! –

2

Utilisez

var pixelValue:uint = coloredSquare.getPixel(coloredSquare.mouseX, coloredSquare.mouseY); 

De cette façon, le mouseX/mouseY sera local au carré de couleur et donc le double bitmap.

+0

merci. cela a fonctionné. :-) – TheDarkIn1978

2

Je ne comprends pas complètement le problème ou le code. Peut-être que cela aide:

coloredSquareBitmap.draw(coloredSquare, coloredSquare.transform.concatenatedMatrix);