Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.11.2012, 14:06
uglan вне форума Посмотреть профиль Отправить личное сообщение для uglan Посетить домашнюю страницу uglan Найти все сообщения от uglan
  № 1  
Ответить с цитированием
uglan

Регистрация: Mar 2003
Адрес: moscow
Сообщений: 102
Отправить сообщение для uglan с помощью ICQ Отправить сообщение для uglan с помощью Skype™
Tools lineTo тормозит - SOLVED!

Привет всем!)
Вот такая странная ситуация сложилась. Код предельно простой на отрисовку линии последством стандартного GraphicsAPI c moveTo, lineTo функциями. Однако проблема в том что при тесте мувика во флеше линия рисуется адекватно(верхний скрин),

но если запустить полученный swf самостоятельно то линии получаются резкие, когда ведешь отклик соответствующий 5-10 FPS. А оригинальный FPS = 60, это же показывает счетчик, то есть тормозит не ролик а сама функция... Возникает вопрос, почему имеет место такая разность в скорости и как это исправить?
Спасибо)

код:
Код AS3:
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. Причина: проблема решена
Старый 22.11.2012, 14:08
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 2  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Код AS3:
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

Старый 22.11.2012, 14:17
uglan вне форума Посмотреть профиль Отправить личное сообщение для uglan Посетить домашнюю страницу uglan Найти все сообщения от uglan
  № 3  
Ответить с цитированием
uglan

Регистрация: Mar 2003
Адрес: moscow
Сообщений: 102
Отправить сообщение для uglan с помощью ICQ Отправить сообщение для uglan с помощью Skype™
Так я тоже пробовал, так в целом плавнее получается, но при начале рисования каждой линии стабильно с жестких углов начинает. Как будто ему разгон нужен.
__________________
uglan

Старый 22.11.2012, 14:27
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 4  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Тогда есть вариант другой. Держите битмапу в нижнем слое и шэйп в верхнем. Зажали курсор — рисуем в шэйпе. Отжали курсор — шэйп отрисовываем в битмапу, шэйп очищаем.
__________________
hauts.ru

Старый 22.11.2012, 14:31
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 5  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
У меня нормально рисует, что из IDE что отдельно
Код AS3:
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();
		}
	}
}

Старый 22.11.2012, 14:32
uglan вне форума Посмотреть профиль Отправить личное сообщение для uglan Посетить домашнюю страницу uglan Найти все сообщения от uglan
  № 6  
Ответить с цитированием
uglan

Регистрация: Mar 2003
Адрес: moscow
Сообщений: 102
Отправить сообщение для uglan с помощью ICQ Отправить сообщение для uglan с помощью Skype™
хм. А что изменится? Дело в не очищении спрайтовой графики?
А битмапа вроде не содержит graphics функций? Лучше уж graphics.copyTo в другой шейп использовать. Ща попробую...
__________________
uglan

Старый 22.11.2012, 14:34
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 7  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
uglan попробуйте как я написал, с updateAfterEvent()

Старый 22.11.2012, 14:35
uglan вне форума Посмотреть профиль Отправить личное сообщение для uglan Посетить домашнюю страницу uglan Найти все сообщения от uglan
  № 8  
Ответить с цитированием
uglan

Регистрация: Mar 2003
Адрес: moscow
Сообщений: 102
Отправить сообщение для uglan с помощью ICQ Отправить сообщение для uglan с помощью Skype™
Цитата:
У меня нормально рисует, что из IDE что отдельно
Может дело в самом плеере? Я под 11.2 компиллирую.
__________________
uglan

Старый 22.11.2012, 14:38
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 9  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Код AS3:
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();
	}
}
Вот мой вариант, попробуйте.
draw_example.swf   (1.2 Кб)
Вложения
Тип файла: swf draw_example.swf (1.2 Кб, 178 просмотров)
__________________
hauts.ru

Старый 22.11.2012, 14:39
uglan вне форума Посмотреть профиль Отправить личное сообщение для uglan Посетить домашнюю страницу uglan Найти все сообщения от uglan
  № 10  
Ответить с цитированием
uglan

Регистрация: Mar 2003
Адрес: moscow
Сообщений: 102
Отправить сообщение для uglan с помощью ICQ Отправить сообщение для uglan с помощью Skype™
Цитата:
Сообщение от caseyryan Посмотреть сообщение
uglan попробуйте как я написал, с updateAfterEvent()
O! Вот так заработало Не знал про такую фишку. Спасибо!

Добавлено через 1 минуту
Hauts, ваш способ тоже работает! Всем спасибо!
__________________
uglan

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:52.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
fps , graphics , lineTo , лаги
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 12:52.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.