Помощь · Поиск · Пользователи · Календарь
Полная версия этой страницы: Опеределить тип поверхности
Flash Zone Forum > Macromedia Flash > ActionScript
Marta
Здравствуйте!
Делаю flash игру бродилку. Столкнулась с такой проблемой. Надо определять тип поверхности. Идет человечек по лесу с определённой скоростью, когда попадает на песчаную дорогу скорость уменьшается, а в воде он вообще тонет. Все эти территории на разных этапах игры разной формы.
Помогите, пожалуйста.
Заранее спасибо
tiHo
отвечу. чють позже smile.gif
MustLive
Цитата
Делаю flash игру бродилку. Столкнулась с такой проблемой. Надо определять тип поверхности. Идет человечек по лесу с определённой скоростью, когда попадает на песчаную дорогу скорость уменьшается, а в воде он вообще тонет. Все эти территории на разных этапах игры разной формы.

Marta

В данном случае оптимально будет использовать ООП, но и в случае использования классических (не ООП) подходов, или например комбинированных, также можно решить данную задачу (сделав нужные функции).

В общем случае у тебя будет следующий алгоритм.

У всех типов поверхности есть параметры (свойства объёктов). Например сделаешь иерархию классов, главнный класс surface, а подкласс grass - его потомок. В главном классе задашь свойство (которое наследуют потомки) отвечающее за скорость. Но это не speed (т.е. не сама скорость), а коэффициент трения к примеру, специальный коэффициет. Который участвует в формуле расчёта скорости персонажа. И она будет динамически изменяться во время игры в зависимости от той поверхности, где находится персонаж.

К примеру задашь свойство koef.

В разных подклассах задашь разные значения: в grass = 1, в sand = 0.5 и т.д. (т.е. grass.koef = 1; sand.koef = 0.5).

И далее в игре в методе (или функции) отвечающем за определение поверхности будет определяться значение данного коефициента - через метод класса surface (и его потомков) getKoef или напрямую, если публик свойство. В общем случае код метода getKoef будет отдавать this.koef (значение коэффициента). Которое далее будет участвовать в функции установки скорости (по определённой формуле, где скорость будет прямо зависить от значения коэффициента). Т.е. на траве скорость будет равна 100%, на песке уже 50% (и так нужно будет задать для всех типов поверхности).
Marta
А как написать именно функцию отвечающую за определение поверхности? В этом основная проблема..
tiHo
Код
if (игрок.hitTest(асфальт))
{
    // если асфальт
}
if (игрок.hitTest(трава))
{
    // если трава
}
if (игрок.hitTest(вода))
{
    // если вода
}


может так
MustLive
Цитата
А как написать именно функцию отвечающую за определение поверхности? В этом основная проблема..

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

Пример использования hitTest для твоего случая привёл tiHo. Этот код вставишь в тело функции или метода, который будет вызываться для проверки поверхности, а далее уже будет происходить пересчёт скорости персонажа.

Например метод (функция) будет называться checkSurface и будет проверять поверхность. Данную функцию стоит вызывать каждый раз, когда происходит движение персонажа, т.е. поставь её вызов в обработчик нажатия кнопки, где у тебя задан алгоритм движения в сторону (при нажатии кнопки). Тем самым при каждом движении будет проверяться поверхность и устанавливаться скорость.

И всё у тебя получиться сделать, Marta, сделаешь свою игру - главное иметь желание и уверенность в своих силах. Кстати, у нас на форуме регулярно участники рассказывают о разрабатываемых ими играх (и потому задают вопросы, с чем у них там проблемы возникают). Можешь почитать форум, может найдёшь интересную информацию для своих игровых разработок.
AvDay
А можно создать плиточный мир. Если игра делатся на локации, тогда подойдет такой способ!
tiHo
да, создание плиточных миров будет лучший выбор. научившась создавать простые плиточные миры(ПМ), можно с легкостью создавать изометрический вид ПМ.

очень подробно и понятно о создании МП и изоПМ рассказано в книке Джоба Макара - Секраты разработки игр на Flash MX.
Русская версия IP.Board © 2001-2009 IPS, Inc.