Actionscript 3 обнаружение попадания в стену - PullRequest
2 голосов
/ 01 июля 2011

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

       var hitWall:Boolean = checkWallHitlvl1();



        if ( downKeyIsBeingPressed  )
            {
                avatar.moveABit( 0, 1 );
                if(hitWall)
                {
                    avatar.moveABit( 0, -5);

                }

            }
            else if ( upKeyIsBeingPressed  )
            {
                avatar.moveABit( 0, -1 );
                if(hitWall)
                {
                    avatar.moveABit( 0, 5 );

                }

            }   
            else if ( leftKeyIsBeingPressed  )
            {
                avatar.moveABit( -1, 0 );
                if(hitWall)
                {

                    avatar.moveABit( 5, 0 );


                }

            }
            else if ( rightKeyIsBeingPressed )
            {
                avatar.moveABit( 1, 0 );
                if(hitWall)
                {
                    avatar.moveABit( -5, 0 );

                }

            }   

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

какие-либо предложения, пожалуйста?

thanx = D

EDIT1: я отредактировал код, теперь он работает, но выглядит довольно резко, так как мне нужно сделать шаг назад на 5 пикселей, я, к сожалению, не могу сделать шаг назад на 1 пиксель, поскольку hitTestObject во флэш-памяти по-прежнему возвращает true ( checkWallHitLvl1 () в основном использует hitTestObject, чтобы проверить, попал ли игрок в стену), какие-либо предложения?

EDIT2: Я нашел способ исправить это, просто нужно запустить еще несколько тестов и убедиться, что все работает нормально, если они все пройдут, я опубликую код, в основном я просто использовал 4 логических значения переменные, чтобы проверить, в каком направлении я ударил стену и пошел оттуда ... = D

Ответы [ 3 ]

3 голосов
/ 05 июля 2011

Что я делаю, так это сохраняю положение, когда оно не поражено.

    if ( downKeyIsBeingPressed  )
        {
            avatar.moveABit( 0, 1 );
            if(hitWall)
            {
                avatar.moveTo(safeX, safeY);

            } else {
                safeX = x;
                safeY = y;
        }
2 голосов
/ 01 июля 2011

Вы можете использовать Flixel (www.flixel.org) для этого; Это хорошая легковесная библиотека Actionscript, которая обрабатывает такие вещи для вас, или, если вы хотите обрабатывать коллизии самостоятельно, она дает вам hitFromLeft (), hitFromRight () и т. д. (я могу иметь имена функций для тех, кто не прав, но вы получить представление.)

0 голосов
/ 01 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...