PDA

Просмотр полной версии : Препятствие-столкновение


noode
09.03.2009, 14:40
Всем привет. Задался таким вопросом как сделать препядствия в прмере игры. На картинке я все изобразил для тог очто бы ничего долго не расписывать. Прошу мне помочь.
Главное то что я хочу это осуществить не на основе платформ.
_________________________________________________________________

Препядсвие, тоесть герой не должен через него проходить... а прсото стопориться...
Очки, некие предметы которые герой должен собирать... тоесть при достижения героя в место расположения предмета он удаляется...

http://img5.imageshost.ru/imgs/090309/73be57db22420cbef85e702e693228aa/04bbdf95865fe88b45c173fd24312ab1.gif

gloomyBrain
09.03.2009, 15:11
И что у Вас не получается?

noode
09.03.2009, 15:21
я не имею представления как это осуществить!

etc
09.03.2009, 15:44
И как вы себе представляете ответ на ваш вопрос в рамках форума?

noode
09.03.2009, 16:31
я же не прошу вас напсиать мне все это в вде игры.. не так ли?

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

CrazyFlasher
09.03.2009, 16:46
2noode, слушай, а ты не знаешь какую функцию надо вызывать, чтобы в тебя стреляли из-за угла? оч срочно надо!

etc
09.03.2009, 16:50
noode, давайте я задам вам вопрос в стиле вашего вопроса: как мне собрать двигатель внутреннего сгорания у себя в гараже? На картинке я вам всё изобразил, вот машинка, у неё четыре колеса, нужно чтобы она сама ехала, фарами моргала и т. п.
Я вас не прошу собирать машину, вы мне расскажите, как собрать двигатель?

Вопрос ваш относится к разряду невозможных. Чтобы ответить на подобный вопрос, необходимо написать целую статью на тему разработки игр.

noode
09.03.2009, 16:58
может кто-то знает....

aksios
09.03.2009, 17:00
noode, а ключевое слово в данном случае hitTest.

etc
09.03.2009, 17:08
Давайте вы начнёте что-то делать, писать код. Возникнут конкретные трудности и проблемы с кодом — приходите и спрашивайте.

Fernando Costa
09.03.2009, 17:20
ударим ссылкой по снобизму!

http://www.emanueleferonato.com/2007/07/03/creation-of-a-platform-game-with-flash-step-1/

VVall
09.03.2009, 17:26
Герой и каждый объект вписываются в прямоугольники. Проверяется пересечение прямоугольника героя и каждого прямоугольника сцены. Если оно есть, предпринимаются определённые действия (например, выталкивание героя из препятствия). Прямоугольники могут быть меньше и больше реально видимых объектов, чтобы определение столкновение происходило в нужный момент (например, близко к центру приза). При необходимости очень точной проверки столкновения можно выполнять попиксельный тест после обнаружения пересечения прямоугольников.

Начните без графики, с двумя прямоугольниками, которые будут выводиться на экран.

NoCD
09.03.2009, 17:58
Ну тут три способа решения проблем со столкновением.

1. это hitTest() - самый простой способ, но и для серьезных игр не годится для работы со столкновениями

2.Математический, вычислять расстояние от края npc, до краев объектов. Здесь нужны якоря. Т.е. точки для проверки столкновений.

3.это на основе tile - самый интересный способ.

ну и изучить ООП, существенно облегчает программинг

gloomyBrain
09.03.2009, 21:51
Я бы тайлами сделал (исходя из скриншота)

Давно известный подход по созданию уровней в блокноте:
- создаем текстовый докуметн
- пишем в него примерно вот такой текст

O O O O O O O O
O T T T T T T O
O T T T T T T O
O T T T T T T O
O T T T T T T O
O T T T T T T O
O T T T T T T O
O T T T T T T O

В данном случае для повышения читаемости между буквами стоят пробелы, можно и без них - не принципиально
Как видно из содержания файла - мы имеем буквы T ограниченные снаружи буквами O (при размере 8х8)
Что это такое? - это уровень. Каждая буква обозначает тип ячейки
Можно где-то в этом же файле обозначить размеры уровня (8х8, 12х15 и тд)
- С помощью loadVars загружаем содержимое файлика (который надо сохранить в кодировке UTF-8) во Flash
- Пишем функцию, которая бы аттачила мувики соответствующие типу (букве) с учетом положения буквы в файле
(если рассматриваемая буква находится в 3-ем столбце и в 5-ой строке, то мы аттачим мувик в точку _x = 3*tileWidth, _y = 5*tileHeight)
Считаем, что tileWidth и tileHeight - размеры ячейки
- При добавлении каждой ячейки (мувика) на сцену, задаем ей 2 дополнительных свойства:
mc.x = 5;
mc.y = 7;

Данные свойства содержат в себе своего рода координаты ячейки (как на шахматной доске)
- Герой может перемещаться по ячейкам типа Т и не может - по ячейкам типа О (считаем что О - препятствие)
- при нажатии на клавишу "вправо" проверяем, какая ячейка находится справа от героя, и если это ячейка типа О - запрещаем движение, иначе - разрешаем

CrazyFlasher
09.03.2009, 21:54
2gloomyBrain это очень частный случай, который пододёт в основоном для игр аля 80-х

noode
09.03.2009, 22:14
смысл на тайлах понял... но каким методом ограничить то что бы герой на место с тайлами О не мог попасть.

VVall
09.03.2009, 22:42
Можно проверять, куда попадёт герой, до выполнения перемещения. Если там стена, то не перемещать. Если нужно приближаться к стенам вплотную, можно уменьшать шаг при обнаружении столкновения.

Можно перемещать, а потом проверять - если герой попал в стену, выталкивать его с небольшим шагом в обратном направлении.

gloomyBrain
09.03.2009, 23:18
Почему частный?
перемещение внутри ячейки (ячеек) можно сделать плавным
я попытался описать сам принцип - проверка только соседних ячеек
игра N сделана примерно так (noregret.org (http://noregret.org/tutor/n/grid/))

VVall
09.03.2009, 23:29
Частный, потому что подходит только для организации проверки столкновения со стенками уровня и только если используется тайловая организация карты с элементами, почти полностью заполняющими тайл (как в Super Mario). Для проверки столкновений с подвижными объектами понадобится отдельный код, для организации неровных тайлов (наклоны, неровности) тоже дополнительный код, со всякими масками высоты и т.п.

gloomyBrain
09.03.2009, 23:58
По поводу быстрого хит-теста для множества движущихся объектов не на тайлах, а КАК на тайлах, могу сказать следущее:

Предвариловка:
- определяем для себя (в уме) предполагаемый размер ячейки - возьмем 20х20 пикселей
- размер ячейки не превышает максимальный размер объекта (герой, бонус, препятствие)
- создаем массив, каждый элемент которого будет описывать строку в таблице из воображаемых ячеек
- строка - массив, описывающий ячейки
- ячейка - массив, содержащий мувиклипы

Процесс обнаружения пересечений:
- берем координаты мувика
- делим их на 20 (15, 25) - величину воображаемой ячейки, затем округляем - получаем индексы для массива-строки и массива-столбца (координаты ячейки, в которой находится мувик)
- проверяем, есть ли в этой ячейке еще что-нибудь (если да, то берем это что-нибудь и проверяем хит-тестом на пересечение с нашим мувиком)
- если нет ничего кроме нашего мувика - проверяем содержимое соседних ячеек на пересечение с искомым мувиком

Таким образом мы отрезаем большое число проверок на пересечение

Жень Шень
10.03.2009, 11:18
to noode
Вот пример с форума в эпоху 6-го флеша. Может облегчит вам жизнь. :quiet: