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

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

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

Регистрация: Aug 2014
Сообщений: 10
Tools работа с графикой

Всем привет!. Возник вот такой вопрос. С какой частотой можно менять цвет отрисовки линии в shape через .graphics.lineStyle() ? Немного поясню. Мне нужно в shape рисовать несколько прямых разноцветных кривых. Каждые 10 милисекунд я для каждой кривой знаю текущую и следующую координату "головы". В функции я задаю цвет линии, эти координаты и рисую маленькую прямую, из которых и состоят кривые. Вот так

Код AS3:
function drawTochkaLine(zmeya,x1,y1,x2,y2) {
totalShape.graphics.lineStyle(3,zmeya.zmeykaColor,1);
 
	if (zmeya == zm2) {
		totalShape.graphics.moveTo(x1,y1);
		totalShape.graphics.lineTo(x2,y2);	
	}
 
	if (zmeya == zm) {
		totalShape.graphics.moveTo(x1,y1);
		totalShape.graphics.lineTo(x2,y2);	
	}
}
А получается черт знает что! Цвета змеек меняются местами, а одна змея вообще разноцветная! Дело в слишком высокой скорости смены цвета?

Старый 27.09.2014, 14:20
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 2  
Ответить с цитированием
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
Цитата:
Дело в слишком высокой скорости смены цвета?
А Вам сложно вместо 10 поставить 50 или 100 и посмотреть?
delay
Цитата:
Задержка в миллисекундах между событиями таймера. Не рекомендуется задавать свойству delay значение меньше 20 миллисекунд. Частота объекта Timer ограничена 60 кадрами в секунду, то есть задержка меньше 16,6 миллисекунд вызывает проблемы во время выполнения.

Старый 27.09.2014, 16:47
lisenok100 вне форума Посмотреть профиль Отправить личное сообщение для lisenok100 Найти все сообщения от lisenok100
  № 3  
Ответить с цитированием
lisenok100

Регистрация: Aug 2014
Сообщений: 10
Спасибо за ответ, попробовал увеличить. Но понял, что дело не в этом. Чудеса появляются, когда shape залит другим цветом.. Почему так, не знаете?

Старый 27.09.2014, 16:58
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 4  
Ответить с цитированием
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
Сделайте хоть скрин и кода побольше покажите, а то для Вас чудеса, это изменение цвета,
а для меня чудеса , это -
Цитата:
рисовать несколько прямых разноцветных кривых
Я не знаю что такое прямая кривая.

Старый 27.09.2014, 17:40
lisenok100 вне форума Посмотреть профиль Отправить личное сообщение для lisenok100 Найти все сообщения от lisenok100
  № 5  
Ответить с цитированием
lisenok100

Регистрация: Aug 2014
Сообщений: 10
прямая кривая... я хотел сказать, кривая из маленьких прямых).
Вот код и скрин. Верхняя просто рисуется синей, а у второй синяя только "голова", а все остальное красное

Код AS3:
var mainTimer:Timer = new Timer(500,0);
var a = 50;
var totalShape:Shape = new Shape();
totalShape.graphics.beginFill(0xff8e00);//если убрать эту строку, то все в порядке
totalShape.graphics.lineStyle(1,0xff0000,1);
totalShape.graphics.moveTo(0,0);
totalShape.graphics.lineTo(650,0);
totalShape.graphics.lineTo(650,600);
totalShape.graphics.lineTo(0,600);
totalShape.graphics.lineTo(0,0);
addChild(totalShape);
mainTimer.start();
mainTimer.addEventListener(TimerEvent.TIMER, tik);
function tik(e:TimerEvent) {
	totalShape.graphics.lineStyle(10,0xFF0000,1);//цвет верхней змеи должен быть красным
	totalShape.graphics.moveTo(a,200);
	a+=10;
	totalShape.graphics.lineTo(a,200);
	a-=10;
 
	totalShape.graphics.lineStyle(10,0x0000FF,1);//цвет нижней змеи должен быть синим
	totalShape.graphics.moveTo(a,300);	
	a+=10;
	totalShape.graphics.lineTo(a,300);	
}
Изображения
 

Старый 27.09.2014, 20:17
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 6  
Ответить с цитированием
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
Это весь код который рисует и рассчитывает линии? Я плохо знаком с рисованием в graphics и может быть по этому
мне кажется, что в данном коде нет ошибки.
А вот под оранжевым слоем у Вас нет синего и красного слоя? А то может это не рисунки, а дырки?)

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

Регистрация: Aug 2014
Сообщений: 10
Я написал другой код, который отражает суть проблемы (я не написал в него лишь несколько 'import'). В основном коде было бы долго разбираться. Можно просто взять все это и скопировать себе, дописав вверху
Код AS3:
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.display.Shape;
Если не сложно, посмотрите. А то я никак не могу понять, что это за ерунда

Старый 27.09.2014, 21:18
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 8  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от lisenok100 Посмотреть сообщение
С какой частотой можно менять цвет отрисовки линии в shape через .graphics.lineStyle()? Каждые 10 милисекунд <я рисую>
Обычный цикл рисования для меня выглядит как-то просто и незамысловато:

Код:
Дожидаемся события EnterFrame
Graphics#clear();
Graphics <draw>;
Может быть он и вам подойдет? Обратите особое внимание на инструкцию clear().

Добавлено через 16 минут
Кстати, очевидно, что проблема в том, что вы не очищаете graphics после предыдущего рисования на нем.
Но не на это я хочу обратить внимание. Ваш подход с рисованием по таймеру имеет более глубокие последствия. Дело в том, что flash player имеет свой т.н. elastic racetrack и он палец о палец не ударит, чтобы отрисовать заказанное вами, ранее, чем наступит Render Action. Получается, что какая-то часть кода, рисовавшего по таймеру просто нагревало процессор и ничего не существенного не делало. Есть, конечно, читерский способ заставить flash player рендерить экран. Имя ему #updateAfterEvent(). Но дети мне подсказывают, что вам это пока не нужно.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


Последний раз редактировалось dimarik; 27.09.2014 в 21:35.
Старый 27.09.2014, 21:35
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 9  
Ответить с цитированием
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
Цитата:
Если не сложно, посмотрите
Мне не сложно, мне просто сейчас не на чем это сделать.
А должно у Вас как быть? Верхняя все красная, а нижняя синяя?

Старый 28.09.2014, 17:12
lisenok100 вне форума Посмотреть профиль Отправить личное сообщение для lisenok100 Найти все сообщения от lisenok100
  № 10  
Ответить с цитированием
lisenok100

Регистрация: Aug 2014
Сообщений: 10
dimarik, мне не нужно движение, мне нужна линия из точки. Проблема решена, моя ошибка заключалась в том, что я забыл написать endFill(), после этого все пришло в порядок.
А теперь про таймер.. Честно, я почти ничего не понял. Вы можете посоветовать что-то конкретное? Сейчас я столкнулся с проблемой скорости. Я хочу сделать приложение для вконтакте, сейчас залил, и fps упало примерно до 10. Заменил timer на enter_frame, ничего не изменилось..

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

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

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


 


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


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