|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jan 2013
Сообщений: 322
|
getTimer надо на 1000 делить.
|
|
|||||
Регистрация: Jan 2012
Сообщений: 836
|
Во спасибо, так работает, вся проблема была в типе переменной _speed, надо было поменять на Number). Однако как тогда мне рассчитать движение по диагонали?
Таким образом, объект неправильно движется по диагонали. |
|
|||||
Регистрация: Dec 2014
Сообщений: 312
|
а так?
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; } } |
|
|||||
Регистрация: Jan 2012
Сообщений: 836
|
Неа. тоже самое
|
|
|||||
Регистрация: Dec 2014
Сообщений: 312
|
Что значит "объект неправильно движется по диагонали"?
|
|
|||||
Регистрация: Jan 2012
Сообщений: 836
|
Объект движется в нескольких направлениях, в том числе и по диагонали. Если же _speed используется для перемещений, вверх, вниз, влево, вправо, то speedDiag просчитывает по формуле движение вверх-влево, вверх-вправо и т.д. Но получается так, что по формуле получается неправильный результат и если к примеру взять квадрат и идти из угол в угол, он не попадет в противоположный угол. В этом и ошибка, хотя должен, потому что скорость по диагоноли и скорость обычная должны быть равны
|
|
|||||
обычно во всяких физ движках и других либах работающих с положением и передвижением объекта в нескольких осях скорость задается не скалярной величиной , а вектором.
для ваших целей вполне себе подойдет какой-нибудь Point. при этом, обычно скаляром задается длина этого вектора, а по осям раскладывается каждое приращение (т.е. скорость по каждой из осей) через длину вектора и угол (все методы у поинта есть). при этом при любом значении угла (направления движения) итоговое значение перемещения объекта в единицу времени остается константным Добавлено через 40 секунд п.с. Тригонометрия
__________________
http://cleptoman.free-lance.ru achivements: дважды благословлен на воровство. осеяный благодатью |
|
|||||
Регистрация: Dec 2014
Сообщений: 312
|
Может я вас неправильно понял, но запустите этот код. Квадрат идет идеально из угла в угол.
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; } } |
|
|||||
Регистрация: Jan 2012
Сообщений: 836
|
callme Спасибо за помощь) Решил эту проблему, посредством деления квадрата скорости на 4. И как выяснялось - теперь движется объект правильно во всех направлениях)
|
Часовой пояс GMT +4, время: 17:48. |
|
« Предыдущая тема | Следующая тема » |
|
|