Сценарий действия 3. Персонаж прыгает через потолок. Как добавить столкновение?

Я создаю простую флеш игру. На данный момент я кодирую управление персонажем. Я добавил столкновения персонажей с землей и стенами, но не могу успешно добавить столкновения с потолком, персонаж прыгает через потолок. Не могли бы вы мне помочь, пожалуйста? Спасибо.

Вот часть кода, что я пробовал:

      if(space){
                            if(myCollisionsList.checkCollisions().length > 0) {
                                if (hitTestPoint(hero.x + 28, hero.y, true)){
/////////////////////////////////////////////////////////////////////////////////////
                            //here I need to add any code for character's collision with the ceiling.
/////////////////////////////////////////////////////////////////////////////////////

Герой.y_скорость = 0; // мне это не помогает

                        }else{
                            Hero.y_speed = -jumpspeed;
   }

Я создал свой список столкновений, где храню все этапы, стены для столкновений с персонажем. Этот метод работает для столкновений, когда персонаж движется вправо или влево, потому что я просто установил x_speed персонажа на «0», когда он касается стены. Но как мне остановить Его, когда я коснусь потолка? Установка y_speed персонажа на «0» мне не помогает.

Изображение объясняет, что сейчас происходит: jumping


person Community    schedule 16.09.2013    source источник
comment
Можете ли вы быть немного более конкретным о вашей проблеме? Вы получаете ошибку? Hero.y_speed = 0; должно выдавать ошибку, так как экземпляр вашего персонажа явно является героем. Используете ли вы hitTestPoint против большого displayObject с его дочерними элементами в качестве препятствий, или вы пытаетесь вызвать hitTestPoint для каждого экземпляра препятствия, хранящегося в myCollisionsList?   -  person Marton Pallagi    schedule 16.09.2013
comment
Нет, я не получаю никакой ошибки, просто при прыжке мне нужно добавить столкновение. Я использовал private var Hero:hero = new hero; Я использую hitTestPoint для каждого экземпляра препятствия, хранящегося в myCollisionsList, потому что я не знаю, как сделать, как вы сказали, большой displayObject с его дочерними элементами, но я хотел бы использовать этот метод.   -  person    schedule 16.09.2013


Ответы (1)


Для столкновения замените своего персонажа прямоугольником и проверьте расстояние между этим прямоугольником и всем в myCollisionsList. Это очень простое решение, но для прямоугольных форм оно идеально подходит. Если ваша скорость низкая, вы можете использовать идеальное столкновение пикселей: проверьте это, например, http://www.freeactionscript.com/2011/08/as3-pixel-perfect-collision-detection/

person Azzy Elvul    schedule 16.09.2013
comment
Когда я использую это, я получаю код ошибки Error #1009: Cannot access a property or method of a null object reference. - person ; 16.09.2013
comment
Что использовать? Как использовать? Прямоугольник описывает вашего персонажа (hero.x, hero.y, ширина героя, высота героя), поэтому, если у вас есть препятствие в позиции x, y с размером ширины и высоты, его прямоугольник будет (x, y, ширина, высота). Чтобы найти проверку расстояния, прочитайте это, например: " title="как рассчитать расстояние между двумя прямоугольниками в контексте игры на lua"> stackoverflow.com/questions/4978323/ - person Azzy Elvul; 16.09.2013
comment
Но какую функцию мне нужно использовать, чтобы персонаж не перепрыгнул через прямоугольник? - person ; 16.09.2013