![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Jul 2008
Адрес: Рига
Сообщений: 176
|
Народ. Подскажите как вы боритесь с подергиваниями при необхоимости равномерно перемещать больших и средних размеров растр?
У меня проблема, аналагична этой http://www.flasher.ru/forum/showthre...E2%E0%ED%E8%E5. Я перепробывал всё, что советовалось в выше приведенном линке. Только в моем случае, мне нужна создать имитацию скорости, не особо большой. Делаю так, у меня есть псд отдного колышка забора. Я их размножываю, получая 3 длинных части забора, 2е из которых распологаются на экране, а 3я за ним. Сдвигаю на EnterFtame все 3 части, и когда 1я скрывается за экраном, перекидваю её за экран вправо, продливая забор, и так по кругу. Так вот, подергивания и как будто мерцания преследуют сие действо. У меня уже навязчивая идея попробовать BitmapData.scroll(). Посдкажите что-нибудь! |
|
|||||
|
Сори. Несколько не по вашему вопросу.
А мерцание происходит при удалении - создании одного из кусков забора?
__________________
http://erinphoto.ru/ Последний раз редактировалось Loshadka; 03.12.2008 в 17:11. |
|
|||||
|
Регистрация: Jul 2008
Адрес: Рига
Сообщений: 176
|
Нет, добавляются они перед анимацией. И дефекты движения, включая,
своеброзное мерцание, скорее даже подергивание, происходят при движении. |
|
|||||
|
Насколько я понимаю - тут решили эту проблему: http://tmgame.mail.ru/
Вы бы кусочек маленький исходников выложили, где имменно происходит "передергивание".
__________________
http://erinphoto.ru/ |
|
|||||
|
Регистрация: Jul 2008
Адрес: Рига
Сообщений: 176
|
Там и при меньших скоростях дергается..
В общем, кончено, наименьшее подергивание происходит при работе с Битмапом, ещё вечером попробую BitmapData.scroll(), хотя думаю разницы не будет. Последний раз редактировалось Xpb7; 03.12.2008 в 19:38. |
|
|||||
|
Регистрация: Nov 2008
Сообщений: 65
|
Лучше избегать небольших скоростей и выравнивать итоговые координаты под целый пиксель. Но если сильно необходимо двигать с очень маленькой скоростью, то нарисуйте все части забора в один Bitmap и двигайте его по дробным частям пикселя. Чтобы забор не съедал много памяти, можно создать только один кусок, а на каждый кадр перерисовывать. В итоге что-то типа:
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(); } } |
|
|||||
|
Регистрация: Jul 2008
Адрес: Рига
Сообщений: 176
|
Цитата:
Я сдвигаю по 9 пикселей за кадр, и по целым числам: 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} } UPD: ZlPredator, я попробою ваш подход (признаюсь он несколько мне не ясен в силу отстутвия опыта работы с битмапой) и отпишусь, хоть там несколько ошибок, но выглядит очень лаконично! В общем, подитоживая, должен вам сказать, что оба метода работают с одинакомыми дефектами, только вот возможно ZlPredator-а метод меньше кушает памяти.. Не проверял, но резултат не впечатлил. Последний раз редактировалось Xpb7; 03.12.2008 в 22:56. |
|
|||||
|
Я когда переходил на AS3 тоже заметил этот неприятный глюк.. . По моему мнению происходит он изза того что в AS2 у координат был тип Number и соответственно мы могли двигать на полпикселя объекты, а в AS3 тип - int и мы на полпихеля соответственно не подвинем...
BitmapData.scroll() тоже не поможет так как тоже работает только с целыми значениями смещения короче полная попа. Единственный совет не забывать включать Smoothing у картинки |
|
|||||
|
Регистрация: Nov 2008
Сообщений: 65
|
Не знаю где Вы это заметили, но и в AS3 остался Number и можно выставлять на дробные части пикселя.
|
|
|||||
|
loading 50%
|
Проще не париться и воткнуть зацикленый кусок видео.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 15:07. |
|
|
« Предыдущая тема | Следующая тема » |
|
|