Джойстик(Сенсорный экран)
Вложений: 1
Подскажите, как сделать так чтобы изображение джойстика которое следует за пальцем/пером не могло выйти за круглую огранку. Пример прилагается.
|
Ответ: Джойстик(Сенсорный экран)
у тебя есть радиус "пэда" (padRadius), и радиус "кнопки" (buttonRadius)
максимальное отклонение центра кнопки тогда может быть padRadius - buttonRadius есть координаты центра пэда и координаты центра кнопки, по теореме Пифагора находим расстояние между ними и смотрим, чтобы оно не превышало предельную длину. |
Ответ: Джойстик(Сенсорный экран)
Допустим нахожу по т. Пифагора значение отклонения и оно превысило норму, то каким образом из этого можно узнать нормальные координаты кнопки?
|
Ответ: Джойстик(Сенсорный экран)
Находишь вектор кнопки: координаты пальца минус координаты центра большого кружка. Нормализуешь его (делишь каждую компоненту на длину). Потом умножаешь на разницу между радиусом большого кружка и маленького. Прибавляешь координаты большого кружка.
|
Ответ: Джойстик(Сенсорный экран)
Вот то что пишу:
Размер пада 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; } Когда джойстик превышиает радиус, то начинает выпрыгивать в непонятных направлениях. В чем ошибка? З.Ы Это конечно не паскаль, но суть не меняется. |
Ответ: Джойстик(Сенсорный экран)
Суть:
dx - расстояние между двумя кругами по x dy - расстояние между двумя кругами по y r - радиус ограничительного круга dist = расстояние между центром "ограничительного круга" и центра "круга джойстика" (геометрию в школе все учили?) Если dist>r, тогда вычисляем "излишек", то есть насколько линия превысила лимит длинны: a=r/dist теперь изменяем координаты на основе "излишка" x=x*a; y:=y*a; так то! |
Часовой пояс GMT +4, время: 11:41. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot