|
|
|||||
lineTo тормозит - SOLVED!
Привет всем!)
Вот такая странная ситуация сложилась. Код предельно простой на отрисовку линии последством стандартного GraphicsAPI c moveTo, lineTo функциями. Однако проблема в том что при тесте мувика во флеше линия рисуется адекватно(верхний скрин), но если запустить полученный swf самостоятельно то линии получаются резкие, когда ведешь отклик соответствующий 5-10 FPS. А оригинальный FPS = 60, это же показывает счетчик, то есть тормозит не ролик а сама функция... Возникает вопрос, почему имеет место такая разность в скорости и как это исправить? Спасибо) код: addChild(sprt); sprt.graphics.lineStyle(4,0x333333,1); addChild(new Stats());// - счетчик stage.addEventListener(MouseEvent.MOUSE_DOWN,downDraw); stage.addEventListener(MouseEvent.MOUSE_UP,upDraw); stage.addEventListener(Event.ENTER_FRAME,LetsDraw); // -------------------------------------------------// function downDraw(e:MouseEvent):void{ sprt.graphics.moveTo(mouseX,mouseY); canDraw = true; } // -------------------------------------------------// function upDraw(e:MouseEvent):void{ canDraw = false; } // -------------------------------------------------// function LetsDraw(e:Event):void{ // if(canDraw){ sprt.graphics.lineTo(mouseX,mouseY); } }
__________________
uglan Последний раз редактировалось uglan; 22.11.2012 в 14:42. Причина: проблема решена |
|
|||||
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
|
addChild(sprt); sprt.graphics.lineStyle(4,0x333333,1); addChild(new Stats());// - счетчик stage.addEventListener(MouseEvent.MOUSE_DOWN,downDraw); stage.addEventListener(MouseEvent.MOUSE_UP,upDraw); stage.addEventListener(MouseEvent.MOUSE_MOVE,LetsDraw); // -------------------------------------------------// function downDraw(e:MouseEvent):void{ sprt.graphics.moveTo(mouseX,mouseY); canDraw = true; } // -------------------------------------------------// function upDraw(e:MouseEvent):void{ canDraw = false; } // -------------------------------------------------// function LetsDraw(e:MouseEvent):void{ // if(canDraw){ sprt.graphics.lineTo(mouseX,mouseY); } }
__________________
hauts.ru |
|
|||||
Так я тоже пробовал, так в целом плавнее получается, но при начале рисования каждой линии стабильно с жестких углов начинает. Как будто ему разгон нужен.
__________________
uglan |
|
|||||
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
|
Тогда есть вариант другой. Держите битмапу в нижнем слое и шэйп в верхнем. Зажали курсор — рисуем в шэйпе. Отжали курсор — шэйп отрисовываем в битмапу, шэйп очищаем.
__________________
hauts.ru |
|
|||||
У меня нормально рисует, что из IDE что отдельно
package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.geom.Point; /** * ... * @author casey ryan */ public class Main extends Sprite { private var _sprite: Sprite = new Sprite(); private var _drawing: Boolean = false; public function Main() { addChild(_sprite); stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); _sprite.graphics.lineStyle(3, 0x000000); } private function onMouseUp(e:MouseEvent):void { _drawing = false; } private function onMouseDown(e:MouseEvent):void { _drawing = true; _sprite.graphics.moveTo(mouseX, mouseY); } private function onMouseMove(e:MouseEvent):void { if (_drawing == false) return; _sprite.graphics.lineTo(mouseX, mouseY); e.updateAfterEvent(); } } } |
|
|||||
хм. А что изменится? Дело в не очищении спрайтовой графики?
А битмапа вроде не содержит graphics функций? Лучше уж graphics.copyTo в другой шейп использовать. Ща попробую...
__________________
uglan |
|
|||||
Цитата:
__________________
uglan |
|
|||||
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
|
import flash.display.Shape; import flash.display.BitmapData; import flash.display.Bitmap; import flash.events.MouseEvent; var canDraw:Boolean = false; var shape:Shape = new Shape(); var bitmapData:BitmapData = new BitmapData(2000,1000,true,0x000000); var bitmap:Bitmap = new Bitmap(bitmapData); addChild(bitmap); addChild(shape); stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHadler); stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHadler); stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHadler); function mouseDownHadler(e:MouseEvent):void { canDraw = true; shape.graphics.lineStyle(5,0x000000); shape.graphics.moveTo(mouseX, mouseY); } function mouseUpHadler(e:MouseEvent):void { canDraw = false; bitmapData.draw(shape); shape.graphics.clear(); } function mouseMoveHadler(e:MouseEvent):void { if (canDraw) { shape.graphics.lineTo(mouseX, mouseY); e.updateAfterEvent(); } }
__________________
hauts.ru |
|
|||||
O! Вот так заработало Не знал про такую фишку. Спасибо!
Добавлено через 1 минуту Hauts, ваш способ тоже работает! Всем спасибо!
__________________
uglan |
Часовой пояс GMT +4, время: 12:52. |
|
« Предыдущая тема | Следующая тема » |
Теги |
fps , graphics , lineTo , лаги |
Опции темы | |
Опции просмотра | |
|
|