2012-06-28 2 views
0

Я полностью новичок в Flash и Actionscript, так что извините, если мой квестуун глуп. Я должен сделать платформу - я собираюсь написать что-то вроде Icy Tower - мой персонаж прыгает с одной платформы на другую, чтобы добраться до вершины башни чего-то. И вот моя проблема - я хочу позволить персонажу прыгать на платформу только сверху, но если он столкнется с платформой whe снизу или со стороны, я хочу, чтобы он отскочил (надеюсь, вы поймете, что я хочу означать).Обнаружение точки, где сталкиваются два объекта

Итак, чтобы сделать что-то подобное, мне нужно определить, где именно сталкиваются эти два объекта - единственные решения, которые мне приходят, - это сохранить координаты каждой платформы в каком-то массиве и сравнить их с положение эллипса символа, которое он прыгает, но это просто не кажется правильным. Есть ли лучший способ решить эту проблему?

Буду благодарен за любые советы.

PS. Извините за мой английский

ответ

0

Вы можете использовать библиотеку игр, такую ​​как flixel, или flashpunk. Они оба великолепны.

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

Таким образом, в псевдо коде

for each (var platform:DisplayObject in platforms) { 
    if (character.hitTestObject(platform)) { 
     if (collideFromBottom || collideFromSide) { 
      // allow movement 
     } 
     if (collideFromTop) { 
      // stop downward velocity 
     } 
     break; // might as well, as you have detected the collision 
    } 
} 

CollideFromBottom бы сравнивая верх вашего персонажа с нижней платформы. Помните, что в качестве спрайтов оба игрока и платформа имеют свойства [x, y] и [ширина, высота], что позволяет вам определять координаты.

P.S. этот вопрос должен был задан в gamedev.stackexchange.com

+0

Спасибо за ответ, но я есть еще один вопрос - есть ли способ сделать это, когда все платформы являются частью одного и того же объекта (у меня есть объект клипа под названием «платформы» и он состоит из нескольких прямоугольников), или они должны быть отдельными? – user1315305

+0

И еще одно: что означает именно DisplayObject.x? (координата x в левом верхнем углу или что?) – user1315305

+0

DisplayObject.x - сколько пикселей с левой стороны относительно его родителя, а DisplayObject.y - сверху, поэтому строка от 0,0 до 100,100 будет диагональная линия, взятая из левого верхнего угла, получила это? – Neil

0

Я бы рекомендовал вам использовать физический движок, как Box2D ( вот примеры), вместо того чтобы создавать некоторую Трассировку colision игры, основанную с нуля.
Вероятность того, что у вас серьезные проблемы с кодом/дизайном и оставление проекта в стороне, большие.

Там очень много хороших учебников по Интернету, здесь хороший ресурс - Использование Box2d Создать прокрутка игры:

  1. Part 1
  2. Part 2
Смежные вопросы