![]() |
|
||||||||||
|
|||||
|
Работаю с заливкой. Собственно документ класс: (fps 31):
package {
import flash.display.*;
import flash.events.*;
import flash.geom.*
public class Landscape extends Sprite {
public var isMouseDown:Boolean;
private var matrix:Matrix;
public function Landscape(){
isMouseDown = false;
matrix = new Matrix();
configureListeners();
}
public function configureListeners():void{
this.stage.addEventListener(MouseEvent.MOUSE_DOWN, mousePress, false, 0, true);
this.stage.addEventListener(MouseEvent.MOUSE_UP, mouseRelease, false, 0, true);
this.stage.addEventListener(Event.ENTER_FRAME, update, false, 0, true);
}
public function mousePress(e:MouseEvent):void{
isMouseDown = true;
}
public function mouseRelease(e:MouseEvent):void{
isMouseDown = false;
}
public function update(e:Event=null){
if(isMouseDown){
matrix.createGradientBox(100,100, 0,mouseX-50, mouseY-50);
this.graphics.beginGradientFill(GradientType.RADIAL, [0x150D04, 0x150D04], [0.1, 0], [0x00, 0xFF], matrix,SpreadMethod.PAD);
//this.graphics.beginFill(Number(Math.random()*255),0.1);
this.graphics.drawCircle(mouseX,mouseY,50);
this.graphics.endFill();
}
}
}
}
1. Почему при длительном рисовании начинаются задержки и как по этому поводу сделать "кеш" рисунка чтобы каждый след кружок рисовался с одинаковой скоростью. 2. Почему на крае круга при длительном удержании мышки в одном и том же положении (не перемещая) - на крае образуется белая кромка (или кромка с цветом фона сцены) при условии что цвет градиента на крае имеет альфу 0. |
|
|||||
|
1. задержки из-за того что по Event.ENTER_FRAME плодишь столько шейпов, которые плееру вообще-то нужно перерисовывать на каждом такте, что он затыкается..
2. откуда берется твердый цвет при нулевой альфе на краю градиента не могу сказать.. как вариант решения: на каждом такте enterFrame скидывать нарисованный шейп в битмап.., некотрые артефакты тоже имеют место быть, но не такие дикие.. и хотя бы производительность не страдает package {
import flash.display.*;
import flash.events.*;
import flash.geom.*
public class Landscape extends Sprite {
public var isMouseDown:Boolean;
private var matrix:Matrix;
private var drawShape:Shape;
private var drawCanvas:Graphics;
private var resultBitmap:Bitmap;
public function Landscape(){
isMouseDown = false;
matrix = new Matrix();
resultBitmap = new Bitmap(new BitmapData(stage.stageWidth, stage.stageHeight, true, 0));
resultBitmap.smoothing = true;
addChild(resultBitmap);
drawShape = new Shape();
drawCanvas = drawShape.graphics;
addChild(drawShape);
configureListeners();
}
public function configureListeners():void{
stage.addEventListener(MouseEvent.MOUSE_DOWN, mousePress, false, 0, true);
stage.addEventListener(MouseEvent.MOUSE_UP, mouseRelease, false, 0, true);
stage.addEventListener(Event.ENTER_FRAME, update, false, 0, true);
}
public function mousePress(e:MouseEvent):void {
isMouseDown = true;
}
public function mouseRelease(e:MouseEvent):void{
isMouseDown = false;
}
public function update(e:Event=null):void{
if(isMouseDown){
matrix.createGradientBox(100, 100, 0, mouseX - 50, mouseY - 50);
drawCanvas.beginGradientFill(GradientType.RADIAL, [0x150D04, 0x150D04], [0.1, 0], [0x00, 0xFF], matrix,SpreadMethod.PAD);
drawCanvas.drawCircle(mouseX,mouseY,50);
//дорисовываем шейп к битпаму, а сам шейп очищаем
resultBitmap.bitmapData.draw(drawShape);
drawCanvas.clear();
}
}
}
}
|
![]() |
![]() |
Часовой пояс GMT +4, время: 09:27. |
|
|
« Предыдущая тема | Следующая тема » |
|
|