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

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

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

Регистрация: Feb 2008
Сообщений: 12
Question Быстрая отрисовка

Здраствуйте знатоки.
Столкнулся с такой проблемой... строю график функии пошагово. При прорисовке все дело притормаживает... особенно, если графиков функций строится очень много. Как это избежать?
Код:
// построение графика
public function paintGraph(Graph: TGraph, Clip: MovieClip): void {
	var I: Number = minX; // в декартовой системе координат
	var _Y: Number;
	Clip.graphics.lineStyle(Graph.thicknes, Graph.color, 1);
	do {
	_Y = Func.Calculator(Graph.Func, I); // высчитывается значение функции в экранных координатах
	if ((_Y < maxY) && (_Y > minY) && (I < maxX) && (I > minX)) {
		Clip.graphics.moveTo(X(I), Y(_Y));
		I += 0.01;
		_Y = Func.Calculator(Graph.Func, I); 
		Clip.graphics.lineTo(X(I), Y(_Y));
	} else I += 0.01;
} while (I <= maxX); 
}
Я во флэше новичок... программирую недавно.. поэтому буду признателен к подробным объяснениям. Спасибо

Старый 13.05.2008, 23:50
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 2  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 613
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
тоже была такая проблема - Спасибо Silin'у. В твоем примере все линии храняться как объекты и каждый раз перересовываются. Можешь сделать так:
Код:
// построение графика

public function paintGraph(Graph: TGraph, resultBitmap:Bitmap): void {
	var drawSprite:Sprite = new Sprite();
	var drawCanvas:Graphics = drawSprite.graphics;
	var I: Number = minX; // в декартовой системе координат
	var _Y: Number;
	drawCanvas.lineStyle(Graph.thicknes, Graph.color, 1);
	do {
	_Y = Func.Calculator(Graph.Func, I); // высчитывается значение функции в экранных координатах
	if ((_Y < maxY) && (_Y > minY) && (I < maxX) && (I > minX)) {
		drawCanvas.moveTo(X(I), Y(_Y));
		I += 0.01;
		_Y = Func.Calculator(Graph.Func, I); 
		drawCanvas.lineTo(X(I), Y(_Y));
	} else I += 0.01;
} while (I <= maxX); 
resultBitmap.bitmapData.draw(drawSprite);
drawCanvas.clear();
}
Все запихиваем не в мувик, а РИСУЕМ в битмап. И обязательно используй resultBitmap.smoothing = true; там где ты создаешь Bitmap.


Последний раз редактировалось Rzer; 13.05.2008 в 23:53.
Старый 14.05.2008, 20:21
Bad_Guy вне форума Посмотреть профиль Отправить личное сообщение для Bad_Guy Найти все сообщения от Bad_Guy
  № 3  
Ответить с цитированием
Bad_Guy

Регистрация: Feb 2008
Сообщений: 12
Использовав ваш способ, Rzer, скорость прорисовки увеличилась буквально в 1.1 раз... возможно я много хочу от свего приложения. Для улучшения скорости мне пришлось увеличить шаг до 0.5 , а перелом графиков на различных участках избегать с помощью curveTo()... но... прорисовка стала не столь быстрой, как бы хотелось (

Хотя... Rzer... а не могли вы более подробно описать отображение того битмана, в котором прорисовывается график. (возможно я сделал что то не правильно - передавая в функцию resultBitmap = Clip.Bitmap)

Старый 14.05.2008, 22:37
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
У вас туча вызовов неких методов X, Y, Calculator и прочих вещей, жрущих процессорное время на раз. Это кусок кода надо переписывать совсем, а не допиливать рашпилем.

Старый 14.05.2008, 23:15
Bad_Guy вне форума Посмотреть профиль Отправить личное сообщение для Bad_Guy Найти все сообщения от Bad_Guy
  № 5  
Ответить с цитированием
Bad_Guy

Регистрация: Feb 2008
Сообщений: 12
Ок. Как мне быть в таком случае???!!!
По заданному мат. выражению строится график функции. Не использовать:
1) X(), Y() - преобразование координат из декартовой в экранную плоскость;
2) Calculator() - высчитывание разобранное выражение (обратная польская запись)
...я не могу.

Как мне быть в таком случае?! Урезать свою программу в возможностях?
Подскажите... что может ускорить все это хозяйство?

Старый 14.05.2008, 23:17
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
А экранные координаты с каких пор недекартовые?

Старый 14.05.2008, 23:23
Bad_Guy вне форума Посмотреть профиль Отправить личное сообщение для Bad_Guy Найти все сообщения от Bad_Guy
  № 7  
Ответить с цитированием
Bad_Guy

Регистрация: Feb 2008
Сообщений: 12
В методах X, Y идет отображения декартовой системы координат на экранную систему координат. На сколько мне известно... )))) экранные координаты всегда > 0

Старый 14.05.2008, 23:26
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Ради простого добавления константы писать целую функцию и вызывать её неразумно.

Старый 14.05.2008, 23:36
Bad_Guy вне форума Посмотреть профиль Отправить личное сообщение для Bad_Guy Найти все сообщения от Bad_Guy
  № 9  
Ответить с цитированием
Bad_Guy

Регистрация: Feb 2008
Сообщений: 12
Все таки... эт не так существенно. (тем более, что там не констатна - координаты х, у - постоянно пересчитываются в этих методах). Все таки хотелось бы услышать что нить более существенное в помощь при прорисовке.

Старый 14.05.2008, 23:42
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 10  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от Bad_Guy Посмотреть сообщение
Все таки... эт не так существенно.
Очень жаль, что меня не услышали.
Да и отрисовывать с точностью до одной сотой пикселя смысла никакого.


Последний раз редактировалось etc; 14.05.2008 в 23:57.
Создать новую тему Ответ Часовой пояс GMT +4, время: 22:31.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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