обнаружение столкновений в ActionScript с использованием bitmap.hittest - PullRequest
1 голос
/ 27 августа 2010

Хорошо, у меня есть два файла png, круг и лабиринт. В основном лабиринт представляет собой квадрат с несколькими прорезанными по нему дорожками. Я хочу нарисовать эти изображения, переместить круг к координатам мыши и получить текст с надписью «ударить», когда круг пересекает стену лабиринта, и «пропустить», когда это не так. Теперь я хочу сделать это с помощью метода bitmapdata.hittest. Круг - это изображение размером 32x32, а лабиринт - изображение размером 256 * 256. Я все настроил и все правильно рисует на экране, но я не могу заставить его работать фактическую часть обнаружения столкновений, то есть он всегда отображает «промах», а не «попадание», даже когда круг четко пересекает лабиринт. Вот что я сделал:

package 
{
    import flash.display.*;     
    import flash.events.*;
    import flash.geom.*;
    import flash.text.TextField;
    import flash.utils.getTimer;
    import flash.net.URLRequest;
    import flash.ui.Mouse;
    import flash.system.*;
    import Math;
    public class MAIN extends Sprite
    {
        private var TEXT:TextField = new TextField();
        public var LOADER_1:Loader = new Loader();
        public var LOADER_2:Loader = new Loader();
        public var DATA_1:BitmapData;
        public var DATA_2:BitmapData;

        public function MAIN()
        {   
            LOADER_2.load(new URLRequest('TEST.png'));
            LOADER_2.x = 125;       LOADER_2.y = 125;
            DATA_2 = new BitmapData(256,256,true,0);
            DATA_2.draw(LOADER_2);
            addChild(LOADER_2);

            LOADER_1.load(new URLRequest('BALL.png'));
            LOADER_1.x = mouseX;        LOADER_1.y = mouseY;
            DATA_1 = new BitmapData(32,32,true,0);
            DATA_1.draw(LOADER_1);
            addChild(LOADER_1);

            Mouse.hide();
            stage.frameRate = 60;
            addChild(TEXT);
            stage.addEventListener(Event.ENTER_FRAME,STEP);
        }
        public function STEP(event:Event):void
        {
            LOADER_1.x = mouseX;
            LOADER_1.y = mouseY;

            if (DATA_1.hitTest(new Point(LOADER_1.x,LOADER_1.y),255,DATA_2,new Point(LOADER_2.x,LOADER_2.y)))
            {
                TEXT.text = 'hit';
            }
            else
            {
                TEXT.text = 'miss';
            }
        }
    }
}

Так может кто-нибудь сказать мне, что я здесь не так делаю?

1 Ответ

0 голосов
/ 27 августа 2010

Вам нужно подождать, пока ваши изображения загрузятся, прежде чем рисовать их в BitmapData.

        LOADER_2.load(new URLRequest('TEST.png'));
        LOADER_2.x = 125;       LOADER_2.y = 125;
        DATA_2 = new BitmapData(256,256,true,0);
        DATA_2.draw(LOADER_2);

На данный момент вы делаете «снимок» вашего загрузчика, но у загрузчика нет содержимого. Таким образом, вам следует ожидать события Event.COMPLETE для каждого загрузчика и отрисовки объекта BitmapData.

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