Mam obraz bazowy i kilka ikonek na wierzchubazowy obraz movieclip ... Niektóre sprite'y mogą zostać narysowane przez użytkownika za pomocą graficznej api w actionscript 3. Mogę rysować rzeczy na sprite'ach, ale nie mogę „utworzyć gumki jak pędzla, która może usunąć część niechcianych rysunków. Staram się używać Alpha, ale nie działa
Sprawdziłem go i wymyśliłem rozwiązanie:
1) Linebitmapstyle ... To rozwiązanie nie jest najlepsze, ponieważ moje duchy mogą być przenoszone, więc jeśli używam linebitmapstyle, to rysuje piksel z obrazu do ikonki, ale jeśli ikonka przesunie narysowany piksel, nie zmieni się.
2) Maskowanie może nie działać u mnie albo ....
Jaki jest najlepszy sposób tworzenia gumki
Odpowiedzi:
3 dla odpowiedzi № 1Możesz raczej użyć bitmapy, aby to zrobićrzeczy łatwiejsze do manipulowania (chyba, że musisz zrobić skalowalną grafikę wektorową!). Aby narysować kształty, możesz nadal używać graficznego interfejsu API do tworzenia kształtów.
W tym celu utwórz instancję „sztucznej” ikonki (lub innej) IBitmapDrawable
implementacja) do tworzenia grafiki, a następnie „kopiowania” ich do BitmapData
temu bitmapData.draw()
funkcjonować. W ten sposób możesz na przykład rysować z opcją BlendMode.ERASE
w celu usunięcia pikseli kształtu.
Przykład (z góry głowy):
// creates a bitmap data canvas
var bitmapData:BitmapData = new BitmapData(500, 500);
// creates a bitmap display object to contain the BitmapData
addChild(new Bitmap(bitmapData));
// creates a dummy object to draw and draws a 10px circle
var brush:Sprite = new Sprite(); // note this is not even added to the stage
brush.graphics.beginFill(0xff0000);
brush.graphics.drawCircle(10, 10, 10);
// the matrix will be used to position the "brush strokes" on the canvas
var matrix:Matrix = new Matrix();
// draws a circle in the middle of the canvas
matrix.translate(250, 250);
bitmapData.draw(brush, matrix
// translates the position 5 pixels to the right to slightly erase the previously
// drawn circle creating a half moon
matrix.translate(5, 0);
bitmapData.draw(brush, matrix,null,BlendMode.ERASE);