Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   работа с хиттестами и подводные камни (http://www.flasher.ru/forum/showthread.php?t=152061)

in4core 10.03.2011 22:41

работа с хиттестами и подводные камни
 
Никогда не приходилось работать плотно с hitTest тем более в АС3. Поэтому хочется спросить у вас пару вещей

1. hitTestObject

совершенно не понятно как работает. Вешаю на стейдж слушателя маусдавн и пишу

Код AS3:

if(!hitTestObject(someSprite)) trace('ok')

эффекта ноль

2. hitTestPoint . тут же ситуация наоборот

Код AS3:

if(!hitTestPoint(someSprite.mouseX, someSprite.mouseY)) trace('ok')

срабатывает всегда

Вообщем поясните ситуацию, и как с этим работать.

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

cr0w312 10.03.2011 22:54

Код AS3:

if(someSprite.hitTestPoint(mouseX, mouseY)) trace('ok')


scarbo 10.03.2011 22:54

И зачем тут hitTest? Повесить MOUSE_DOWN на stage, и смотреть во target/currentTarget, по какому элементу "тыкнули"

in4core 10.03.2011 22:58

cr0w312 срабатывает всегда! так что проблема пока висит

scarbo покажите примерчик )) даже интересно стало

scarbo 10.03.2011 23:03

Цитата:

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

in4core 10.03.2011 23:03

Да криво написал вы правы. По нажатию на спрайт нужно его спрятать, и сделать определенное действие, а по нажатию на любое место сцены - только спрятать этот самый спрайт.

Добавлено через 8 минут
решил хиттестпойнтом. всем спасибо

cr0w312 10.03.2011 23:15

Цитата:

Сообщение от in4core (Сообщение 979461)
cr0w312 срабатывает всегда! так что проблема пока висит

Либо у вас спрайт размером в стэйдж либо внимательнее смотрите к чему применяете hitTestPoint

scarbo 10.03.2011 23:23

Цитата:

решил хиттестпойнтом. всем спасибо
и зря
Main.as
Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
 
        /**
        * ...
        * @author Scarbo
        */

        public class Main extends Sprite
        {
                private var _current:Square;
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
                        _current = new Square();
                        _current.x = _current.y = 50;
                        addChild(_current);
                        stage.addEventListener(MouseEvent.MOUSE_DOWN, _mouseDownHandler);
                }
 
                private function _mouseDownHandler(e:MouseEvent):void {
                        if (e.target is Square) {
                                _current.visible = false;
                        }else {
                                _current.visible = true;
                        }
                }
        }
 
}

Square.as
Код AS3:

package  
{
        import flash.display.Graphics;
        import flash.display.Sprite;
 
        /**
        * ...
        * @author Scarbo
        */

        public class Square extends Sprite
        {
 
                public function Square()
                {
                        super();
                        this._draw();
                }
 
                private function _draw(s:Number = 100, c:uint = 0xff0000):void {
                        var g:Graphics = this.graphics;
                        g.clear();
                        g.beginFill(c);
                        g.drawRect(0, 0, s, s);
                        g.endFill();
                }
 
        }
 
}


in4core 10.03.2011 23:30

scarbo кстати спасибо. А вот именно за то, что я уже и забыл что Stage является так же контейнером.... и у него e.target не является Object Stage !!!!

scarbo 10.03.2011 23:56

Цитата:

e.target не является
хм, да вообще-то не только у stage так, добавьте детей любому контейнеру, тоже самое будет (если только mouseChildren=false не выставить)


Часовой пояс GMT +4, время: 21:35.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.