Просмотр полной версии : Объект с траекторией полета огибающей предметы
RedDiamond
13.04.2007, 02:31
Почему-то когда создал тему http://flasher.ru/forum/showthread.php?t=94454 модератор ее закрыл из-за несоответствия названия вопросу, сейчас я думаю соответствует.
Повторю вопрос:
Нужно сделать такую фишку: Есть объект(точка) Летит слева на право. Мышкой перемещаем предмет и ставим на пути этой точки. Точка должна облететь этот предмет с наибольшей реалистичностью(как пузыри воздуха в воде обходят камни и т.п.)
Как можно сделать? Голову ломаю второй месяц:wacko:
Было предложение сделать так:
Препятствие которое передвигаешь нужно сделать побольше т.е. под ним в мувике нарисовать прозрачный квадрат(по форме) побольше.
В коде рассказываешь, что когда хиттестит, то, типа, облетай!
Для меня и есть главная проблема как в коде "рассказываешь, что когда хиттестит, то, типа, облетай!" Я можно сказать только начинаю изучать серьезно AS и поэтому не силен. Подскажите как реализовать! Всем заранее огромное спасибо!!!
Почему-то когда создал тему http://flasher.ru/forum/showthread.php?t=94454 модератор ее закрыл из-за несоответствия названия вопросуПотому-то, это нарушение правил было.
Mr. Fixit
13.04.2007, 02:45
тебе полностью вряд ли кто-то поможет решать такую проблему.
Сам знаю, так что дерзай. Поверь так лучше. :)
RedDiamond
13.04.2007, 03:21
тебе полностью вряд ли кто-то поможет решать такую проблему.
Сам знаю, так что дерзай. Поверь так лучше. :)
Может у кого-то пример есть чего-то похожего. Может кто-то подскажет как написать функцию движения?
Может у кого-то пример есть чего-то похожего. Может кто-то подскажет как написать функцию движения?
Слева направо?
var speed:Number = 5;
this.onEnterFrame = function () {
имя_объекта._x += speed;
}
screamge
13.04.2007, 06:43
Мышкой перемещаем предмет и ставим на пути этой точки.
this.имя_объекта.onPress = function() {
this.startDrag();
};
В коде рассказываешь, что когда хиттестит, то, типа, облетай!
Вы знаете, что совершенных алгоритмов решения данной проблемы не существует, а что если у вас фигура - какой-нибудь невыпуклый предмет?
Предлагаю упростить и делать по прямоугольной форме:
1. летит предмет (П1), как летит писал iNils.
2. тащим предмет (П2), как тащим тоже написано.
3. проверем на hitTest П1 П2, как лучше в хелп или поиск
4. потом, пока hitTest идем вверх или вниз
5. как только не hitTest продоолжаем движение прямо
Если надо "(как пузыри воздуха в воде обходят камни и т.п.)", рекомендую нарисовать траектории движения обтекания камня пузырьками. На бумаге.
Потом отсканировать и/или прорисовать траектории.
Потом каждую линию сделать Motion Guide для клипа - шарика. Шарик не забыть назвать. Все должно быть в библиотеке, указать linkage id.
Далее, пузырек подплывает к камешку, по формуле iNils'а и в какой-то момент приближается настолько, что пора бы начинать обтекать. Тут вы сохраняете текущие координаты пузырька,
bubble._x0=bubble._x;
bubble._y0=bubble._y;
про _x+=5 забываете, аттачите нужный клип куда-нибудь вне поля зрения, и каждый кадр сумируете координаты того шарика, что на траектории, с сохраненным положением пузырька.
var depth = getNextHighestDepth();
var treck_mc = attachMovie( "trek1", "treck"+ depth, depth );
var lider:MovieClip = treck_mc.ball;
bubble.onEnterFrame = function(){
this._x = this._x0 + lider._x;
this._y = this._y0 + lider._y;
}
Потом надо будет грохнуть пузырь вместе с траекторией. Как программно исполнить обтекание предмета струей, не спрашивайте. Этим занимаются большие институты, и то они все проверяют в бассейнах. Траектория слишком перегружена переменными.
Можно пачитать насчет алгоритмов расчета координат. Можна даже задать траекторию движения уравнением, в котором по мере необходимости менять кое какие координаты.
В принципе, у объекта и точки есть координаты, и они доступны. Придумываем условие, типа если разность координат х меньше чего та, надо изменить у точки в зависимости от текущего у предмета. Тогда если предмет не на пути точки, пролетаем с минимальным отклонением, на пути, огибаем сверху или снизу - в зависимости от координат центра предмета. Если координата х точки больше х предмета, то надо возвратиться на прежнюю траекторию. Делаем все то же что при приближении, тока наоборот. Форма фигуры не имеет зачения, нас интересует тока положение ее центра, ну и задаем на каком расстоянии точка должна облететь фигуру.
ЗЫ: Насчет реалистичности: реалистично всегда значит реально за деньги.
RedDiamond
13.04.2007, 13:08
Всем спасибо за советы! Буду пробовать! Если что-то будет не получаться, обязательно спрашу
Жень Шень
13.04.2007, 16:33
Привет!
На форуме есть всё! Или почти всё. Вот два исходника - практически реализующие поставленную задачу.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.