Развитие игровой вспышки
Текущее время: Пт окт 23, 2020 12:49 pm

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 11 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: zoom двумя пальцами
СообщениеДобавлено: Пт авг 28, 2020 9:46 pm 
Не в сети

Зарегистрирован: Вт апр 01, 2014 10:34 am
Сообщений: 275
Привет
нет у кого нибудь алгоритма как правильно зумить картинку используя два пальца?


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: zoom двумя пальцами
СообщениеДобавлено: Пт авг 28, 2020 10:50 pm 
Не в сети
Аватар пользователя

Зарегистрирован: Вс ноя 14, 2010 12:57 am
Сообщений: 1812
OneHalf писал(а):
Привет
нет у кого нибудь алгоритма как правильно зумить картинку используя два пальца?


Я делаю так: вычисляю скалярное произведение векторов (dxA, dyA)*(dxB, dyB), координатами которыя являются, соответстсвенно, сдвиги первого и второго пальцев между проверками.

Если скалярное произведение меньше нуля, значит, движенияпальцев или навстречу друг к другу или друг от другы => скейлим на коэффициент (расстояние между пальцами на текущей проверке)/расстояние между пальцами на предыдущей проверке. В противном случае -просто сдвигаем.


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: zoom двумя пальцами
СообщениеДобавлено: Сб авг 29, 2020 1:15 pm 
Не в сети

Зарегистрирован: Вт апр 01, 2014 10:34 am
Сообщений: 275
General писал(а):
OneHalf писал(а):
Привет
нет у кого нибудь алгоритма как правильно зумить картинку используя два пальца?


Я делаю так: вычисляю скалярное произведение векторов (dxA, dyA)*(dxB, dyB), координатами которыя являются, соответстсвенно, сдвиги первого и второго пальцев между проверками.

Если скалярное произведение меньше нуля, значит, движенияпальцев или навстречу друг к другу или друг от другы => скейлим на коэффициент (расстояние между пальцами на текущей проверке)/расстояние между пальцами на предыдущей проверке. В противном случае -просто сдвигаем.

не понятно как этот коэфициент получить, вот допустим есть картинка 100 на 100 и с текущим коэфициентом scale например 1.5 (т.е. картинка уже увеличена),
я взял и двумя пальцами тяну,
определил центр вокруг которого я тяну,
и та область которую я растягиваю должна увеличится на 4 пикселя, я могу тянуть как по диагонали так и по вертикали...
чет не могу сообразить как вычислить новый коэфициент :(


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: zoom двумя пальцами
СообщениеДобавлено: Сб авг 29, 2020 1:34 pm 
Не в сети

Зарегистрирован: Вт апр 01, 2014 10:34 am
Сообщений: 275
методом тыка примерно вышло так

newKof = scale
newKof = newKof * Math.abs( (distanceNew * newKof) / (distanceOld * newKof) );
scale = newKof

осталось как то сохранить центр картинки что бы картинка не улетала


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: zoom двумя пальцами
СообщениеДобавлено: Сб авг 29, 2020 2:41 pm 
Не в сети
Аватар пользователя

Зарегистрирован: Вс ноя 14, 2010 12:57 am
Сообщений: 1812
OneHalf писал(а):
методом тыка примерно вышло так

newKof = scale
newKof = newKof * Math.abs( (distanceNew * newKof) / (distanceOld * newKof) );
scale = newKof



Да-да, именно так: ты домножаешь текущий скейл на коэффициент, равный отношению расстоянию между пальцами до и после

OneHalf писал(а):
осталось как то сохранить центр картинки что бы картинка не улетала

А тут нужно сделать такие шаги
1. определи, какая точка в изменяемом спрайте находится сейчас между пальцами.
2. найди, куда эта точка переедет прискейле
3. сдвинь изменяемый спрайт, чтобы вернуть её обратно на исходные координаты


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: zoom двумя пальцами
СообщениеДобавлено: Пн авг 31, 2020 9:29 pm 
Не в сети

Зарегистрирован: Вт апр 01, 2014 10:34 am
Сообщений: 275
спросил я на форуме библиотеки feathers, что я использую и дали мне пример в котором все классно работает

https://community.feathersui.com/d/38-s ... wo-fingers


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: zoom двумя пальцами
СообщениеДобавлено: Вт сен 01, 2020 2:44 pm 
Не в сети

Зарегистрирован: Вт апр 01, 2014 10:34 am
Сообщений: 275
Но к сожалению не все так хорошо как хотелось бы :)
Разобрал я их пример и они там хитро просто устанавливали pivotX и pivotY у объекта, и видимо поэтому и сдвигать ничего не нужно, зумится вокруг этой точки, но у меня слишком многое нужно поменять уже в игре что бы учесть этот нюанс, по крайней мере с наскока не вышло, поэтому буду думать как угадать со сдвигом


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: zoom двумя пальцами
СообщениеДобавлено: Вт сен 01, 2020 6:44 pm 
Не в сети
Аватар пользователя

Зарегистрирован: Вс ноя 14, 2010 12:57 am
Сообщений: 1812
Да, пивот менять не стоит. Ну смотри, ты можешь узнать локальную координату нажатия пальцем на скейлируемом объекте? Пусть это будет localX. Если ты изменишь скейл объекта в modScale раз, то локальная координата точки с localX станет равной localX*modScale. А надо, чтобы точка осталась на том самом месте. Значит, надо сам объект сдвинуть на localX -localX*modScale

То же самое для у.


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: zoom двумя пальцами
СообщениеДобавлено: Ср сен 02, 2020 3:21 pm 
Не в сети

Зарегистрирован: Вт апр 01, 2014 10:34 am
Сообщений: 275
General, спасибо. снова попробовал поподбирать, более менее получается используя не координаты пальцев а ширину и высоту картинки, но как то все равно не гладко, по y вроде хорошо, а по x продолжает смещаться

x += ( oldWidth - width )/2;
y += ( oldHeigt - height )/2;


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: zoom двумя пальцами
СообщениеДобавлено: Ср сен 02, 2020 3:36 pm 
Не в сети

Зарегистрирован: Вт апр 01, 2014 10:34 am
Сообщений: 275
в общем фигня то что я делал с шириной, буду разбираться дальше, видимо я неправильно получаю координаты


Вернуться наверх
 Профиль Отправить e-mail  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 11 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB