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

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

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

Регистрация: Apr 2013
Сообщений: 82
По умолчанию Отрисовка картинки при движении

В программе есть мувик. Внутри мувика картинка (большущая и тяжелая). Картинкой можно двигать с помощью стрелочек. Когда картинка движется, то сильно трясётся, а так не должно быть. Можно её как-то стабилизировать?

Старый 27.06.2014, 18:47
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 2  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Причин может быть несколько, либо в коде (скорее всего), либо в сглаживании у картинки (вряд ли).
Хоть код покажите или исходник с наброском этой проблемы.

Старый 27.06.2014, 18:59
Anabel вне форума Посмотреть профиль Отправить личное сообщение для Anabel Найти все сообщения от Anabel
  № 3  
Ответить с цитированием
Anabel

Регистрация: Apr 2013
Сообщений: 82
Активируется при событии "нажатая клавиша"
Код AS3:
mapa.x += 1;
mapa.y += 1;
Добавлено через 1 минуту
Сама картинка отображается адекватно и вполне нормально, если не перемещать её. Но она очень большая (4.6 Мб, размер 2000*1600), так что я подозреваю, что
Цитата:
Причин может быть несколько, либо в коде (скорее всего), либо в сглаживании у картинки (вряд ли).

Старый 27.06.2014, 19:29
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 4  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Тогда попробуйте со сглаживанием. Его можно "включить" - установив флаг Allow smoothing в настойках вашей картинки в библиотеке (если вы работаете во Flash). Либо с помощью кода, если эту картинку вы создавали динамически
Код AS3:
битмапВашейКартинки.smoothing= true;
Но я почему-то уверен, что проблема в коде движения. Возможно вы двигаете её не по enterFrame, а просто от зажатой клавиши.

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

Регистрация: Apr 2013
Сообщений: 82
Вроде не так ужасно, но всё равно немного мерехтит изображение. А можно как-то усилить свойство?

Старый 27.06.2014, 19:53
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 6  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Пожалуйста, покажите весь код, который относится к движению картинки. Если у вас примерно так
Код AS3:
stage.addEventListener(KeyboardEvent.KEY_DOWN,stage_kd);
function stage_kd(e:KeyboardEvent):void
{
	mc.x+=1;
}
то проблема в коде, а не в сглаживании.

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

Регистрация: Apr 2013
Сообщений: 82
Код AS3:
// Неизменная величина ускорения.
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;
        }
}

Старый 27.06.2014, 20:44
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 8  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Если вы о дёрганье карты, после отжатия всех клавиш, то вам нужно добавить дополнительное условие, чтобы обнулять скорость, если она слишком мала. Попробуйте в самый конец метода onEnterFrameУ добавить
Код AS3:
var vel:Number=_velocity.x+_velocity.y
if( vel < 0.1 && vel > -0.1) _velocity.setTo(0,0);
Но если вы не об этой проблеме, тогда не знаю. У меня движения идут плавно.

Может ваш fps меньше 30?

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

Регистрация: Apr 2013
Сообщений: 82
Да, было 20, при изменении на 30 качество значительно лучше стало. Спасибо

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

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

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


 


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


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