![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2013
Сообщений: 82
|
В программе есть мувик. Внутри мувика картинка (большущая и тяжелая). Картинкой можно двигать с помощью стрелочек. Когда картинка движется, то сильно трясётся, а так не должно быть. Можно её как-то стабилизировать?
|
|
|||||
|
Регистрация: Apr 2013
Сообщений: 82
|
Активируется при событии "нажатая клавиша"
Добавлено через 1 минуту Сама картинка отображается адекватно и вполне нормально, если не перемещать её. Но она очень большая (4.6 Мб, размер 2000*1600), так что я подозреваю, что Цитата:
|
|
|||||
|
Тогда попробуйте со сглаживанием. Его можно "включить" - установив флаг Allow smoothing в настойках вашей картинки в библиотеке (если вы работаете во Flash). Либо с помощью кода, если эту картинку вы создавали динамически
Но я почему-то уверен, что проблема в коде движения. Возможно вы двигаете её не по enterFrame, а просто от зажатой клавиши. |
|
|||||
|
Регистрация: Apr 2013
Сообщений: 82
|
Вроде не так ужасно, но всё равно немного мерехтит изображение. А можно как-то усилить свойство?
|
|
|||||
|
Пожалуйста, покажите весь код, который относится к движению картинки. Если у вас примерно так
то проблема в коде, а не в сглаживании. |
|
|||||
|
Регистрация: Apr 2013
Сообщений: 82
|
// Неизменная величина ускорения. var _accValue:Number = shvidkist; // Сопротивление окружающей среды, чтобы персонаж остановился. var _envResistance:Number = 0.9; // Тут будем хранить вектор скорости. var _velocity:Point = new Point(); // Направление, задаваемое игроком. var _direction:Point = new Point(); // А тут у нас вспомогательные переменные, для работы с клавой. var _keyL:Boolean = false; var _keyR:Boolean = false; var _keyU:Boolean = false; var _keyD:Boolean = false; var _keyLL:Boolean = false; var _keyRR:Boolean = false; var _keyUU:Boolean = false; var _keyDD:Boolean = false; // Слушаем необходимые события. stage.addEventListener(Event.ENTER_FRAME, onEnterFrameУ); stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownУ); stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUpУ); /** Весь движняк, как обычно. */ function onEnterFrameУ(event:Event):void { // Вычисляем теперь уже ускорение на основании // вектора направления. var acceleration:Point = _direction.clone(); acceleration.normalize(_accValue); // Ускоряемся. _velocity = _velocity.add(acceleration); // Испытываем сопротивление среды _velocity.x *= _envResistance; _velocity.y *= _envResistance; // И наконец движемся карта.чоловічок.x += _velocityР.x; карта.чоловічок.y += _velocityР.y; карта.fire.x += _velocityР.x; карта.fire.y += _velocityР.y; карта.x -= _velocityР.x; карта.y -= _velocityР.y; } /** Коли нажали кнопку на клавіатурі. */ function onKeyDownУ(event:KeyboardEvent):void{ switch (event.keyCode) { case Keyboard.LEFT: case Keyboard.A: _keyL = true; _direction.x = -1; if (!карта.чоловічок.грав.play()) карта.чоловічок.грав.play(); break; case Keyboard.RIGHT: case Keyboard.D: _keyR = true; _direction.x = 1; if (!карта.чоловічок.грав.play()) карта.чоловічок.грав.play(); break; case Keyboard.UP: case Keyboard.W: _keyU = true; _direction.y = -1; if (!карта.чоловічок.грав.play()) карта.чоловічок.грав.play(); break; case Keyboard.DOWN: case Keyboard.S: _keyD = true; _direction.y = 1; if (!карта.чоловічок.грав.play()) карта.чоловічок.грав.play(); break; } } /** Когда кнопочку отпустили, соответственно. */ function onKeyUpУ(event:KeyboardEvent):void { switch (event.keyCode) { case Keyboard.LEFT: case Keyboard.A: _keyL = false; _direction.x = _keyR ? 1 : 0; карта.чоловічок.грав.stop(); _keyLL = true; break; case Keyboard.RIGHT: case Keyboard.D: _keyR = false; _direction.x = _keyL ? -1 : 0; карта.чоловічок.грав.stop(); _keyRR = true; break; case Keyboard.UP: case Keyboard.W: _keyU = false; _direction.y = _keyD ? 1 : 0; карта.чоловічок.грав.stop(); _keyUU = true; break; case Keyboard.DOWN: case Keyboard.S: _keyD = false; _direction.y = _keyU ? -1 : 0; карта.чоловічок.грав.stop(); _keyDD = true; break; } } |
|
|||||
|
Если вы о дёрганье карты, после отжатия всех клавиш, то вам нужно добавить дополнительное условие, чтобы обнулять скорость, если она слишком мала. Попробуйте в самый конец метода onEnterFrameУ добавить
Но если вы не об этой проблеме, тогда не знаю. У меня движения идут плавно. Может ваш fps меньше 30? |
|
|||||
|
Регистрация: Apr 2013
Сообщений: 82
|
Да, было 20, при изменении на 30 качество значительно лучше стало. Спасибо
|
![]() |
![]() |
Часовой пояс GMT +4, время: 19:53. |
|
|
« Предыдущая тема | Следующая тема » |
|
|