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

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

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

Регистрация: Jul 2008
Адрес: Рига
Сообщений: 176
По умолчанию Плавное движение растра

Народ. Подскажите как вы боритесь с подергиваниями при необхоимости равномерно перемещать больших и средних размеров растр?
У меня проблема, аналагична этой http://www.flasher.ru/forum/showthre...E2%E0%ED%E8%E5.

Я перепробывал всё, что советовалось в выше приведенном линке.

Только в моем случае, мне нужна создать имитацию скорости, не особо большой. Делаю так, у меня есть псд отдного колышка забора.
Я их размножываю, получая 3 длинных части забора, 2е из которых распологаются на экране, а 3я за ним. Сдвигаю на EnterFtame все 3 части,
и когда 1я скрывается за экраном, перекидваю её за экран вправо, продливая забор, и так по кругу. Так вот, подергивания и как будто мерцания преследуют сие действо.
У меня уже навязчивая идея попробовать BitmapData.scroll().
Посдкажите что-нибудь!

Старый 03.12.2008, 16:45
Loshadka вне форума Посмотреть профиль Посетить домашнюю страницу Loshadka Найти все сообщения от Loshadka
  № 2  
Ответить с цитированием
Loshadka
 
Аватар для Loshadka

Регистрация: Aug 2004
Адрес: *
Сообщений: 10
Отправить сообщение для Loshadka с помощью ICQ
Сори. Несколько не по вашему вопросу.
А мерцание происходит при удалении - создании одного из кусков забора?
__________________
http://erinphoto.ru/


Последний раз редактировалось Loshadka; 03.12.2008 в 17:11.
Старый 03.12.2008, 18:12
Xpb7 вне форума Посмотреть профиль Отправить личное сообщение для Xpb7 Найти все сообщения от Xpb7
  № 3  
Ответить с цитированием
Xpb7

Регистрация: Jul 2008
Адрес: Рига
Сообщений: 176
Нет, добавляются они перед анимацией. И дефекты движения, включая,
своеброзное мерцание, скорее даже подергивание, происходят при движении.

Старый 03.12.2008, 18:16
Loshadka вне форума Посмотреть профиль Посетить домашнюю страницу Loshadka Найти все сообщения от Loshadka
  № 4  
Ответить с цитированием
Loshadka
 
Аватар для Loshadka

Регистрация: Aug 2004
Адрес: *
Сообщений: 10
Отправить сообщение для Loshadka с помощью ICQ
Насколько я понимаю - тут решили эту проблему: http://tmgame.mail.ru/
Вы бы кусочек маленький исходников выложили, где имменно происходит "передергивание".
__________________
http://erinphoto.ru/

Старый 03.12.2008, 19:36
Xpb7 вне форума Посмотреть профиль Отправить личное сообщение для Xpb7 Найти все сообщения от Xpb7
  № 5  
Ответить с цитированием
Xpb7

Регистрация: Jul 2008
Адрес: Рига
Сообщений: 176
Там и при меньших скоростях дергается..
В общем, кончено, наименьшее подергивание происходит при работе с Битмапом, ещё вечером попробую
BitmapData.scroll(), хотя думаю разницы не будет.


Последний раз редактировалось Xpb7; 03.12.2008 в 19:38.
Старый 03.12.2008, 19:57
ZlPredator вне форума Посмотреть профиль Отправить личное сообщение для ZlPredator Найти все сообщения от ZlPredator
  № 6  
Ответить с цитированием
ZlPredator

Регистрация: Nov 2008
Сообщений: 65
Лучше избегать небольших скоростей и выравнивать итоговые координаты под целый пиксель. Но если сильно необходимо двигать с очень маленькой скоростью, то нарисуйте все части забора в один Bitmap и двигайте его по дробным частям пикселя. Чтобы забор не съедал много памяти, можно создать только один кусок, а на каждый кадр перерисовывать. В итоге что-то типа:

Код AS3:
class Zabor extends Shape
{
	private var bgImage:BitmapData;
	private var bgDimension:Rectangle;
 
	public function Zabor(clip:DisplayObject):void
	{
		bgDimension = clip.getRect(null);
		bgImage = new BitmapData(bgDimension.width, bgDimension.height);
		bgImage.draw(clip);
	}
 
	public function redraw(delta:Number,width:Number):void
	{
		graphics.clear();
		var matrix:Matrix = new Matrix();
		matrix.translate(delta % bgDimension.width, 0);
		graphics.beginBitmapFill(bgImage, matrix, true, true);
		graphics.drawRect(width, bgDimension.height);
		graphics.endFill();
	}
}
Такой объект помещаете куда вам надо и вызываете через промежутки меняя delta.

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

Регистрация: Jul 2008
Адрес: Рига
Сообщений: 176
Цитата:
Сообщение от ZlPredator Посмотреть сообщение
Лучше избегать небольших скоростей и выравнивать итоговые координаты под целый пиксель.
Так в том-то и дело, что скорость не маленькая.
Я сдвигаю по 9 пикселей за кадр, и по целым числам:

Код AS3:
var vSSpeed: Number = 9;
..
this.addEventListener(Event.ENTER_FRAME, moveSurroundings);
...
private function drawSurroundings():void
{
	var sourceBMP:BitmapData = new perilaUp(0, 0);
 
	upBorder1.graphics.beginBitmapFill(sourceBMP);
	upBorder1.graphics.drawRect(0, 0, 1008, 168);
	upBorder1.graphics.endFill();
	addChild(upBorder1);
	upBorder1.y = 17;
	upBorder1.x = 0;
 
	upBorder2.graphics.beginBitmapFill(sourceBMP);
	upBorder2.graphics.drawRect(0, 0, 1008, 168);
	upBorder2.graphics.endFill();
	addChild(upBorder2);
	upBorder2.y = 17;
	upBorder2.x = 1008;
}
 
...
 
private function moveSurroundings(e: Event):void
{
	upBorder1.x -= vSSpeed;
	upBorder2.x -= vSSpeed;
	downBorder1.x -= vSSpeed;
	downBorder2.x -= vSSpeed;
	if (upBorder1.x < -1008) {upBorder1.x +=1008}
	if (upBorder2.x < 0) {upBorder2.x += 1008}
	if (downBorder1.x < -1008) {downBorder1.x +=1008}
	if (downBorder2.x < 0) {downBorder2.x += 1008}			
}
aksios, это не подходит, скорость будет меняться.

UPD:
ZlPredator, я попробою ваш подход (признаюсь он несколько мне не ясен в силу отстутвия опыта работы с битмапой) и отпишусь, хоть там несколько ошибок, но выглядит очень лаконично!
В общем, подитоживая, должен вам сказать, что оба метода работают с одинакомыми дефектами, только вот возможно ZlPredator-а метод меньше кушает памяти.. Не проверял, но резултат не впечатлил.


Последний раз редактировалось Xpb7; 03.12.2008 в 22:56.
Старый 03.12.2008, 20:44
TERRORist вне форума Посмотреть профиль Отправить личное сообщение для TERRORist Найти все сообщения от TERRORist
  № 8  
Ответить с цитированием
TERRORist
 
Аватар для TERRORist

блогер
Регистрация: Jun 2005
Адрес: RU
Сообщений: 1,540
Записей в блоге: 12
Я когда переходил на AS3 тоже заметил этот неприятный глюк.. . По моему мнению происходит он изза того что в AS2 у координат был тип Number и соответственно мы могли двигать на полпикселя объекты, а в AS3 тип - int и мы на полпихеля соответственно не подвинем...

BitmapData.scroll() тоже не поможет так как тоже работает только с целыми значениями смещения

короче полная попа. Единственный совет не забывать включать Smoothing у картинки

Старый 03.12.2008, 21:47
ZlPredator вне форума Посмотреть профиль Отправить личное сообщение для ZlPredator Найти все сообщения от ZlPredator
  № 9  
Ответить с цитированием
ZlPredator

Регистрация: Nov 2008
Сообщений: 65
Цитата:
Сообщение от TERRORist Посмотреть сообщение
Я когда переходил на AS3 тоже заметил этот неприятный глюк.. . По моему мнению происходит он изза того что в AS2 у координат был тип Number и соответственно мы могли двигать на полпикселя объекты, а в AS3 тип - int и мы на полпихеля соответственно не подвинем...
Не знаю где Вы это заметили, но и в AS3 остался Number и можно выставлять на дробные части пикселя.

Старый 03.12.2008, 21:39
aksios вне форума Посмотреть профиль Отправить личное сообщение для aksios Найти все сообщения от aksios
  № 10  
Ответить с цитированием
aksios
loading 50%
 
Аватар для aksios

Регистрация: Jun 2005
Адрес: I am where I should be
Сообщений: 3,567
Отправить сообщение для aksios с помощью ICQ
Проще не париться и воткнуть зацикленый кусок видео.

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

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

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


 


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


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