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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.02.2015, 20:57
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 11  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
getTimer надо на 1000 делить.

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

Регистрация: Jan 2012
Сообщений: 836
Во спасибо, так работает, вся проблема была в типе переменной _speed, надо было поменять на Number). Однако как тогда мне рассчитать движение по диагонали?

Код AS3:
var speedDiag:Number = Math.sqrt(_speed * _speed / 2);
Код AS3:
_speed = 0.15;
Таким образом, объект неправильно движется по диагонали.
Код AS3:
object.x -= delta * speedDiag;
object.y += delta * speedDiag;

Старый 05.02.2015, 09:28
callme вне форума Посмотреть профиль Отправить личное сообщение для callme Найти все сообщения от callme
  № 13  
Ответить с цитированием
callme
 
Аватар для callme

Регистрация: Dec 2014
Сообщений: 312
а так?

Код AS3:
package
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.utils.getTimer;
 
    public class Main extends Sprite
    {
        public function Main()
        {
            _object = new Bitmap(new BitmapData(100, 100, false, 0xffcc33));
            addChild(_object);
 
            addEventListener(Event.ENTER_FRAME, enterFrame);
            _time = getTimer();
        }
 
        private function enterFrame(e:Event):void
        {
            var newTime:Number = getTimer();
            var delta:Number = newTime - _time;
            _time = newTime;
 
            var speedDiag:Number = Math.sqrt(_speed * _speed / 2);
 
            _x += delta * speedDiag;
            _y += delta * speedDiag;
           _object.x = _x;
           _object.y = _y;
        }
 
        private var _x:Number = 0;
        private var _y:Number = 0;
        private var _time:Number;
        private var _speed:Number = 0.01;
        private var _object:Bitmap;
    }
}

Старый 05.02.2015, 13:28
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 14  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 836
Неа. тоже самое

Старый 05.02.2015, 13:39
callme вне форума Посмотреть профиль Отправить личное сообщение для callme Найти все сообщения от callme
  № 15  
Ответить с цитированием
callme
 
Аватар для callme

Регистрация: Dec 2014
Сообщений: 312
Что значит "объект неправильно движется по диагонали"?

Старый 05.02.2015, 13:43
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 16  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 836
Объект движется в нескольких направлениях, в том числе и по диагонали. Если же _speed используется для перемещений, вверх, вниз, влево, вправо, то speedDiag просчитывает по формуле движение вверх-влево, вверх-вправо и т.д. Но получается так, что по формуле получается неправильный результат и если к примеру взять квадрат и идти из угол в угол, он не попадет в противоположный угол. В этом и ошибка, хотя должен, потому что скорость по диагоноли и скорость обычная должны быть равны

Старый 05.02.2015, 13:52
cleptoman вне форума Посмотреть профиль Отправить личное сообщение для cleptoman Найти все сообщения от cleptoman
  № 17  
Ответить с цитированием
cleptoman
 
Аватар для cleptoman

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
обычно во всяких физ движках и других либах работающих с положением и передвижением объекта в нескольких осях скорость задается не скалярной величиной , а вектором.
для ваших целей вполне себе подойдет какой-нибудь Point.

при этом, обычно скаляром задается длина этого вектора, а по осям раскладывается каждое приращение (т.е. скорость по каждой из осей) через длину вектора и угол (все методы у поинта есть).

при этом при любом значении угла (направления движения) итоговое значение перемещения объекта в единицу времени остается константным

Добавлено через 40 секунд
п.с. Тригонометрия
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

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

Регистрация: Dec 2014
Сообщений: 312
Может я вас неправильно понял, но запустите этот код. Квадрат идет идеально из угла в угол.

Код AS3:
package
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.utils.getTimer;
 
    public class Main extends Sprite
    {
        public function Main()
        {
            addChild(new Bitmap(new BitmapData(500, 500, false, 0x3377FF)));
 
            _object = new Bitmap(new BitmapData(100, 100, false, 0xffcc33));
            addChild(_object);
 
            addEventListener(Event.ENTER_FRAME, enterFrame);
            _time = getTimer();
        }
 
        private function enterFrame(e:Event):void
        {
            var newTime:Number = getTimer();
            var delta:Number = newTime - _time;
            _time = newTime;
 
            var speedDiag:Number = Math.sqrt(_speed * _speed / 2);
 
            _x += delta * speedDiag;
            _y += delta * speedDiag;
           _object.x = _x;
           _object.y = _y;
        }
 
        private var _x:Number = 0;
        private var _y:Number = 0;
        private var _time:Number;
        private var _speed:Number = 0.01;
        private var _object:Bitmap;
    }
}

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

Регистрация: Jan 2012
Сообщений: 836
callme Спасибо за помощь) Решил эту проблему, посредством деления квадрата скорости на 4. И как выяснялось - теперь движется объект правильно во всех направлениях)

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

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

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


 


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


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