При выполнении хитстейта круг реагирует на невидимую часть лабиринта

Я делаю игру-лабиринт. У меня есть два объекта, которые должны реагировать на хит-тест, мой маленький круг (называемый "брикке") и сам лабиринт (называемый "формой"). (Я норвежец)

Я нарисовал часть лабиринта во вспышке (как один большой объект, связанный) и преобразовал его в символ (мувиклип), как для круга.

Моя проблема в том, что когда я выполняю тестирование, круг, кажется, реагирует на невидимые части лабиринта, как PNG. Он реагирует на невидимые "пиксели" в моем рисунке лабиринта, даже если я нарисовал его внутри вспышки, это не png. Но форма лабиринта прямоугольная.

Я также использую клавиатуры для управления кругом вокруг лабиринта.

Любые идеи о том, как я могу сделать эту работу? Сделайте круг самым хитрым с формой лабиринта, и только так, используя клавиатуры для перемещения по кругу. Поэтому, когда круг попадает в "стены" лабиринта, он снова возвращается в начало.

package  {
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    import flash.ui.Keyboard;
    import flash.events.KeyboardEvent;

    public class Dokument extends MovieClip {

        var startskjerm: Startskjerm=new Startskjerm(); 
        var startknapp: Startknapp=new Startknapp(); 
        var bakgrunnbane: Bakgrunnbane=new Bakgrunnbane(); 
        var brikke: Brikke=new Brikke(); 
        var bane: Bane=new Bane();
        var form: Form=new Form(); 
        var regler: Regler=new Regler(); 
        var spilleregler: Spilleregler=new Spilleregler(); 
        var tilbake: Tilbake=new Tilbake(); 

    public function Dokument() {

            addChild(startskjerm); 
            addChild(startknapp); 
            addChild(regler);

            startknapp.x= 1020;
            startknapp.y= 350;

            regler.x= 920;
            regler.y= 450;

            startknapp.addEventListener(MouseEvent.CLICK, trykket);
            regler.addEventListener(MouseEvent.CLICK, klikket); 
            stage.addEventListener(KeyboardEvent.KEY_DOWN, tastetrykk); 

            }


    public function trykket (evt:MouseEvent) {

            removeChild(startknapp); 
            removeChild(startskjerm); 
            addChild(bakgrunnbane); 
            addChild(bane);
            addChild(form); 
            addChild(brikke);

            brikke.x= 200;
            brikke.y= 95; 

            bane.x= 630;
            bane.y= 485;

            form.x= 628;
            form.y= 449;

           }



    public function klikket (evt:MouseEvent) {

            removeChild(regler); 
            removeChild(startskjerm); 
            addChild(spilleregler); 
            addChild(tilbake); 

            tilbake.x= 1100;
            tilbake.y= 850;

            tilbake.addEventListener(MouseEvent.CLICK, tilbakeklikk);

            }

    public function tilbakeklikk (evt:MouseEvent) {

            removeChild(spilleregler); 
            removeChild(tilbake); 
            addChild(startskjerm); 
            addChild(startknapp); 
            addChild(regler);

            tilbake.x= 1100;
            tilbake.y= 850;

            startknapp.x= 1020;
            startknapp.y= 350;

            regler.x= 920;
            regler.y= 450;

            tilbake.addEventListener(MouseEvent.CLICK, tilbakeklikk);

            }


    public function tastetrykk(evt:KeyboardEvent) {


            if(evt.keyCode==Keyboard.LEFT){

                brikke.x= brikke.x-8; 
            }


            if(evt.keyCode==Keyboard.RIGHT){

                brikke.x= brikke.x+8; 
            }

            if(evt.keyCode==Keyboard.UP){

                brikke.y= brikke.y-8; 
            }

            if(evt.keyCode==Keyboard.DOWN){

                brikke.y= brikke.y+8; 
            }

            if(brikke.hitTestObject(form)== true) {

                trace('truffet');
            }
        }
    }   
}

1 ответ

Попробуй использовать hitTestPoint вместо hitTestObject,

Если ваш "брикке" имеет большую форму, вы можете создать в нем больше точек, а затем проверить HitTestPoint для каждой точки. Помните, чтобы использовать localToGlobal или же globalToLocal чтобы быть уверенным, что вы работаете в тех же координатах.

Другие вопросы по тегам