Показать сообщение отдельно
Старый 12.11.2012, 20:48   #5
Atqt
AnyKey`щик
 
Регистрация: 06.08.2011
Сообщений: 14
Написано одно полезное сообщение
(для 4 участников)
Ответ: Джойстик(Сенсорный экран)

Вот то что пишу:
Размер пада 240,240
Размер кнопки 80,80
al, bl, c - переменные для вычисления т. Пифагора
size.X, size.Y - перменнаые хранящие размер кнопки
sizeJ.X, sizeJ.Y - перменнаые хранящие размер пада
pos.X, pos.Y - переменные хранящие координаты кнопки
posJ.X, posJ.Y - переменные хранящие координаты пада
tc.X, tc.Y - переменные хранящие координаты нажатия
isHit - переменная для проверки попадания в пад
vB.X, vB.y - переменная нормализованного вектора
al = pos.X - (posJ.X + size.X / 2) - size.X;
if (al < 0) { al *= -1; }
bl = pos.Y - (posJ.Y + size.Y / 2) - size.Y;
if (bl < 0) { bl *= -1; }
c = Sqrt(al^2 + b^2);
if (tc.X > posJ.X && tc.X < posJ.X + sizeJ.X &&
tc.Y > posJ.Y && tc.Y < posJ.Y + sizeJ.Y)
{ isHit = true; }
else { isHit = false; };
if (isHit)
{
if (c > 80)
{
vB.X = (((tc.X - (posJ.X + sizeJ.X / 2)) / 120) * 80) + posJ.X;
vB.Y = (((tc.Y - (posJ.Y + sizeJ.Y / 2)) / 120) * 80) + posJ.Y;
pos.X = vB.X;
pos.Y = vB.Y;
}
else
{
pos.X = tc.X - size.X / 2;
pos.Y = tc.Y - size.Y / 2;
}
}
else
{
pos.X = posJ.X + sizeJ.X / 2 - size.X / 2;
pos.Y = posJ.Y + sizeJ.Y / 2 - size.Y / 2;
}

Когда джойстик превышиает радиус, то начинает выпрыгивать в непонятных направлениях. В чем ошибка?
З.Ы Это конечно не паскаль, но суть не меняется.
(Offline)
 
Ответить с цитированием