Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   [Nape] Сенсоры, группы, маски (http://www.flasher.ru/forum/showthread.php?t=211337)

neonoviiwolf 07.08.2015 02:14

Сенсоры, группы, маски
 
Добрый день, пытаюсь разобраться с сенсорными телами, но что-то не получается
Код работает, когда я ставлю Collision, а когда sensor не работает

Большая просьба, объясните про группы и маски, зоны видимости


Код AS3:

//отрывок из одного класса
 
                public function get getBody():Body
                {
                        var collisionGroup:int = 0xFFFFFFFF;
                        var collisiomMask:int = 0x00000010;
                        var sensorGroup:int = 0xFFFFFFFF;
                        var sensorMask:int = 0xFFFFFFFF;
 
                        var mouse:Mouse = new Mouse;
                        body = new Body(BodyType.DYNAMIC);
                        body.userData.sprite = mouse;
                        mouse.setBody = body; //вызывается в Mouse для передачи параметров body
                        var shape:Shape = new Polygon(Polygon.box(35, -35), Material.rubber(), new InteractionFilter(collisionGroup, collisiomMask, sensorGroup, sensorMask));
 
                        body.shapes.add(shape);
                        body.align();
                        return body;
                }

Код AS3:

//отрывок из второго класса
                public function CatNape()
                {
                        var collisionGroup:int = 0xFFFFFFF0;
                        var collisiomMask:int = 0x00000010;
                        var sensorGroup:int = 0xFFFFFFFF;
                        var sensorMask:int = 0xFFFFFFFF;
 
                        body = new Body(BodyType.DYNAMIC, new Vec2(100, 220));
                        var shape:Shape = new Polygon(Polygon.box(60, -45), Material.rubber(), new InteractionFilter(collisionGroup, collisiomMask, sensorGroup, sensorMask));
 
                        body.shapes.add(shape);
                        body.align();
                }

тут функция слушателя событий nape, если вместо InteractionType.COLLISION написать InteractionType.SENSOR, то событие не вызывается, при этом параметр var collisiomMask:int = 0x00000010; одного из классов я меняю на var collisiomMask:int = 0x00000001;
Код AS3:

                private var interactionListener:InteractionListener;
                private var catCollisionType:CbType = new CbType();
                private var mouseCollisionType:CbType = new CbType();
 
                public function startGame():void
                {
                        interactionListener = new InteractionListener(CbEvent.BEGIN, InteractionType.COLLISION, catCollisionType, mouseCollisionType, sensorMouseAndCat)
                        space.listeners.add(interactionListener);
                }
 
                private function sensorMouseAndCat(collision:InteractionCallback):void
                {
                        trace(3333);
                }


caseyryan 07.08.2015 06:24

Код AS3:

shape.sensorEnabled = true;


neonoviiwolf 07.08.2015 11:13

Цитата:

Сообщение от caseyryan (Сообщение 1185547)
Код AS3:

shape.sensorEnabled = true;


писал так, но у меня пропадает физика тогда, все объекты находятся на платформе и при добавлении этой строчки сквозь неё проваливаются

caseyryan 07.08.2015 11:27

Естественно. Это же сенсор. А какое поведение тогда ожидается?

neonoviiwolf 07.08.2015 12:10

Вложений: 1
На рисунке круглое тело пусть ball, квадратное box
ball прыгает на одном месте с постепенным угасанием. box движется по направлению к ball, если тела сталкиваются(физика столкновения не нужна тут, т.к. ball должен прыгать строго вертикально), нужно поймать событие sensor, при этом событии я решаю, менять ли значение ball.velocity.y и какие коэффициенты применить

caseyryan 07.08.2015 17:37

Тут надо не сенсор ловить, а CbEvent.PRE тогда

neonoviiwolf 09.08.2015 12:00

caseyryan большое спасибо, то что нужно
Если не затруднит, объясните про маски и группы

Добавлено через 14 часов 18 минут
ещё вопрос
Код AS3:

                private var catCollisionType:CbType = new CbType();
                private var mouseCollisionType:CbType = new CbType();
 
                public function startGame():void
                {
                        space.listeners.add(new PreListener(InteractionType.COLLISION, catCollisionType, mouseCollisionType, preListenerHandler));
                }
 
                private function preListenerHandler(cb:PreCallback):PreFlag
                {
                        var normal:Vec2 = cb.arbiter.collisionArbiter.normal;
                        if (cat.velocity.y > 0)
                        {
                                cat.velocity.y *= -1;
                                trace(cat.velocity.y);
                        }
 
                        return PreFlag.IGNORE;
                }

в mouseCollisionType я закидываю массив экземпляров Body, а как получить ссылку, с каким точно было столкновение?

Добавлено через 26 часов 13 минут
как получить ссылку на Body разобрался, остался вопрос про группы и маски


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

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