Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   BitmapData hittest при вращении (http://www.flasher.ru/forum/showthread.php?t=181810)

Andrej 03.07.2012 14:43

BitmapData hittest при вращении
 
Вложений: 1
Добрый день.Долго искал всети,столкновение 2ух обектов неправельной формы при вращении.Вобщем нашел кое что.Выдрал от туда часть кода.Вроде как все получилось и работет.Но проблема такая,в данном случае крест врашается вокруг левой верхней точки.Мне же надобы,чтоб он вращался по центру.И если ставлю регистрацию по центру,то вся точность пропадает.Подскажите плиз как мне это сделать.Вот код:
Код AS3:

var _onePoint:Point;
var _twoPoint:Point;
 
var plusrs:Rectangle;
var starrs:Rectangle;
 
 var bmp1:BitmapData;
var bmp2:BitmapData;
 
var _oneOffset:Matrix;
var _twoOffset:Matrix;
function hittest(e:Event)                {
        plus.x= mouseX;
        plus.y = mouseY;
        plus.rotation++;
plusrs = plus.getBounds(plus);
                        _oneOffset = plus.transform.matrix;
                        _oneOffset.tx = plus.x - star.x;
                        _oneOffset.ty = plus.y - star.y;       
 
 
                        bmp1 = new BitmapData(plusrs.width, plusrs.height, true, 0);
                        bmp1.fillRect(bmp1.rect, 0);
                        bmp1.draw(plus, _oneOffset);               
 
                        starrs = star.getBounds(star);
                        bmp2 = new BitmapData(starrs.width, starrs.height, true, 0);
 
                        _twoOffset = star.transform.matrix;
                        _twoOffset.tx = star.x - star.x;
                        _twoOffset.ty = star.y - star.y;       
                        bmp2.fillRect(bmp2.rect, 0);
                        bmp2.draw(star, _twoOffset);
 
                        _onePoint = new Point(plusrs.x, plusrs.y);
                        _twoPoint = new Point(starrs.x, starrs.y);
 
                        if(bmp1.hitTest(_onePoint, 255, bmp2, _twoPoint, 255))
                        {
 
 
 
                                star.filters = [new GlowFilter()];
                                plus.filters = [new GlowFilter()];
 
                        }
                        else
                        {
                                star.filters = [];
                                plus.filters = [];
 
                        }
 
 
}
 
stage.addEventListener(Event.ENTER_FRAME, hittest);

На всяк случай прикрепляю fla.
С уважением Андрей.

Art_133 03.07.2012 17:09

Вложений: 1
Код AS3:

plusrs = plus.getBounds(plus);
// fix
plusrs.x += plusrs.width * 0.5;
plusrs.y += plusrs.height * 0.5;


Andrej 03.07.2012 22:47

Art_133,Огромное спасибо.Все отлично.

Добавлено через 1 час 29 минут
Сорру.Можно еще вопросик.Если я рисую более большой обьект например ту же PolyStar скажем 180х180.Уже hittest совсем не точен.В чем причина?Спасибо.

Art_133 04.07.2012 00:31

Вложений: 1
Архив с большим объектом прикрепите.
UPD:
В моём примере с большим плюсом всё ок.
Вы точно в центре клипа-контейнера размещаете его?

Andrej 04.07.2012 15:53

Вложений: 1
Плюс я как раз оставляю таким же а меняю второй обьект.Ваш же пример вкладываю.Кстати еслю плюс большой и второй обьект большой то все ок,если же плюс оставляем маленьким,а второй обьект увеличиваем то уже нет.


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

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