Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   [Box2D] как определять на какой форме указатель мыши? (http://www.flasher.ru/forum/showthread.php?t=180935)

Roman_Konyukhov 11.06.2012 20:52

как определять на какой форме указатель мыши?
 
Как лучше определять shape, на котором находится указатель мыши в данный момент?

Я пробовал делать через обработчик столкновений, для указателя мыши создавал body и задавал ему позицию так:

Код AS3:

var tv:b2Vec2 = new b2Vec2(CMain.wmx, CMain.wmy);
bodyMouse.SetXForm(tv, 0);


Есть ли какие-нибудь другие способы?

Alex Lexcuk 13.06.2012 00:51

Таким методом можно
Код AS3:

                //http://www.emanueleferonato.com/2008/10/26/platform-game-basics-using-box2d/
                /* Following function gets the body from a cordinate (x, y)*/
                public function GetBodyAtPoint(px:Number, py:Number, includeStatic:Boolean = false):b2Body {
                        // Make a small box.
                        var px2:Number = px/physScale;
                        var py2:Number = py/physScale;
                        var PointVec:b2Vec2 = new b2Vec2();
                        PointVec.Set(px2, py2);
                        var aabb:b2AABB = new b2AABB();
                        aabb.lowerBound.Set(px2 - 0.001, py2 - 0.001);
                        aabb.upperBound.Set(px2 + 0.001, py2 + 0.001);
 
                        // Query the world for overlapping shapes.
                        var k_maxCount:int = 10;
                        var shapes:Array = new Array();
                        var count:int = myWorld.Query(aabb, shapes, k_maxCount);
                        var body:b2Body = null;
                        for (var i:int = 0; i < count; ++i) {
                                if (shapes[i].m_body.IsStatic() == false || includeStatic) {
                                        var tShape:b2Shape = shapes[i] as b2Shape;
                                        var inside:Boolean = tShape.TestPoint(tShape.m_body.GetXForm(), PointVec);
                                        if (inside) {
                                                body = tShape.m_body;
                                                break;
                                        }
                                }
                        }
                        return body;
                }



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

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