Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   hitTestObject в "дырке" (http://www.flasher.ru/forum/showthread.php?t=143572)

Dr_Bra 19.08.2010 19:18

hitTestObject в "дырке"
 
Вложений: 1
Подскажите как бы сделать так, чтобы рыбки не выплывали за пределы аквариума? Думал, сделать проверку на hitTestObject, но с такой фигурой не прошел этот вариант, ведь превратив красную фигуру в мувиклип, он автоматически заполнит неотрисованые места. И в "дырке", где должны плавать рыбки, все объекты пересекутся. Что делать?

Jarproger 19.08.2010 20:34

Если просто - можешь задать внутри окружности прямоугольник из 4-х стенок и проверять столкновение рыбок с ними. При столкновении рыбка меняет направление

Если сложно - то можно представить все объекты в виде BitmapData и вызвать HitTest(), который попиксельно сравнивает битмапы

t4arty 19.08.2010 20:58

лучше просто координаты проверять.

Dr_Bra 19.08.2010 21:03

с координатоми кажется все сложнее

gloomyBrain 19.08.2010 22:15

Цитата:

с координатоми кажется все сложнее
Наоборот - все гораздо проще.
Т.к. аквариум круглый, то достаточно измерить расстояние от его центра до рыбки, и если расстояние больше радиуса аквариума - значит надо разворачивать рыбку

Dr_Bra 23.08.2010 15:50

Значит нужно рассчитывать расстояние от центра аквариума до положения рыбки. Центр аквариума у нас x=0 и у=0, делаем событие на ENTER_FRAME отслеживающее положение рыбки по X и Y. Ну и сам радиус равен 170 pix. А по какой формуле можно рассчитать расстояние, которое преодолевает рыбка?

Добавлено через 10 минут
Ну как бы по теореме Пифагора? Помогите записать это с помощью as3.0
h - гипатенуза
x - катет
y - второй катет
h = корень квадратный из суммы x в квадрате и у в квадрате

Zik. 23.08.2010 16:09

А зачем здесь теорема Пифагора, которая, как я помню относится вовсе к треугольникам?
Я считаю здесь можно просто измерять расстояние от центра аквариума, до центра рыбки (учитывая ее ширину). Расчитать расстояние между точками можно по формуле
Код AS3:

Math.sqrt((x1-x2)^2+(y1-y2)^2));

Дальше просто проверяете если расстоение больше (170 - ширина рыбки), тогда рыбка ударилась об аквариум

Zebestov 23.08.2010 16:29

Рыбка:
Xfish
Yfish
Rfish (радиус круга описывающего рыбку, определяется ее размером)

Аквариум:
Raquarium

Расстояние до центра круга, описывающего рыбку не должно быть больше радиуса аквариума за вычетом радиуса вышеуказанного круга:

Код AS3:

function keepItInside( Xfish : Number, Yfish : Number, Rfish : Number, Raquarium : Number ) : void
{
    var R : Number = Raquarium - Rfish;
    if ( Xfish*Xfish + Yfish*Yfish > R*R)
    {
        // разворачиваем рыбку
    }
}

Сравниваем разумеется квадраты значений, что быстрее вычисления корня.
Вот и все. Разворачивайся рыбка большая и маленькая.

Dr_Bra 23.08.2010 17:00

ничего не получилось, с вот этой формулой всегда вылетают предупреждения
Код AS3:

Math.sqrt((x1-x2)^2+(y1-y2)^2));

Код AS3:

syntaxis error:  expecting semicolonbefore rightparen


Zebestov 23.08.2010 17:02

Скобку лишнюю убери в конце.


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

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