Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Функция касания

15K
19 марта 2007 года
Ybr
31 / / 19.03.2007
Я пишу простейшую игру. Только учусь. Короче, шарик в квадрате (через вьюпорт) должен двигаться, а если натыкается на одну из сторон - то отскакивает под рандомным углом. На одной из сторон квадрата дыра. Если шарик попадет туда, то гейм овер. Предотвращаем гейм овер курсором (то есть если шарик попадает в окрестность дыры, но на курсор мыши, то гейм не овер:) ). Кстати, квадрат я сделал из лайнов.
Вот в чем вопрос: как лучше задать алгоритм касания о сторону квадрата (то есть одну из линий). Ест ли в Паскале такая функция? Или можно как-нибудь по-другому?
247
19 марта 2007 года
wanja
1.2K / / 03.02.2003
Ну, если рассуждать логически, то если координаты шарика больше(меньше) координат края квадрата плюс(минус) радиус шара, то он вышел.
584
19 марта 2007 года
brodotsky
33 / / 25.01.2004
A - сторона квадрата, R - радиус шарика.
Shar_X, Shar_Y - координаты центра шарика (0...A).
Mouse_X, Mouse_Y - координаты указателя мыши (0...A).
Dyra_X, Dyra_Y - координаты центра дыры.

Пусть дыра - в середине одной из сторон квадрата.
Номер стороны с дырой - Storona
(Storona=1 - дыра вверху, Storona=2 - дыра внизу,
Storona=3 - дыра слева, Storona=4 - дыра справа).
Ширина дыры - RazmerDyry (RazmerDyry<A).

Шарик считается попавшим в дыру,
если расстояние от центра шарика до центра дыры
(D_Shar_Dyra)
не больше, чем R
(при том, что указатель мыши не находится в дыре).

Указатель мыши считается находящемся в дыре,
если расстояние от указателя мыши до центра дыры
(D_Mouse_Dyra)
не больше, чем Dyra.

Function IsGameOver:Boolean;
{A, R, Shar_X, Shar_Y, Mouse_X, Mouse_Y,}
{RazmerDyry, Storona определены вне функции.}
Var Dyra_X,Dyra_Y,D_Shar_Dyra,D_Mouse_Dyra:Integer;
Begin

{Определение Dyra_X,Dyra_Y}
Case Storona Of
1:Begin Dyra_X:=A Div 2; Dyra_Y=0 End;
2:Begin Dyra_X:=A Div 2; Dyra_Y=A End;
3:Begin Dyra_X:=0; Dyra_Y=A Div 2 End;
4:Begin Dyra_X:=A; Dyra_Y=A Div 2 End
End;

{Определение D_Shar_Dyra}
D_Shar_Dyra:=
Sqrt (Sqr(Shar_X-Dyra_X)+Sqr(Shar_Y-Dyra_Y);

{Определение D_Mouse_Dyra}
D_Mouse_Dyra:=
Sqrt (Sqr(Mouse_X-Dyra_X)+Sqr(Mouse_Y-Dyra_Y);

{Результат функции}
IsGameOver:=
(D_Shar_Dyra<=R) And (D_Mouse_Dyra>RazmerDyry);

End;
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог