Случайны выбор дневника Раскрыть/свернуть полный список возможностей


Найдено 343 сообщений
Cообщения с меткой

зум - Самое интересное в блогах

Следующие 30  »
rss_rss_hh_new

[Из песочницы] Алгоритм жевания для тачскрина

Пятница, 29 Апреля 2016 г. 12:13 (ссылка)

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




  • Вычисление времени на сжатие челюстей;

  • Сочетание жевания с управлением персонажем;

  • Изменение параметров по ходу тестов.



Весь код написан на языке с# для движка Unity3D, для 2Д игры. Перейдем непосредственно к коду. В методе Update вычисляем кол-во тачей, и производим соответствующие действия. Двигаем персонажа в случае одного прикосновения:



//Если одно прикосновение
if (Input.touchCount == 1) {
//Если челюсти не сжимаются или не разжимаются, персонаж двигается к месту прикосновения
if (!compressing && !decompressing) {
Touch singleTouch = Input.GetTouch(0);
Vector3 targetPoint = Camera.main.ScreenToWorldPoint (singleTouch.position);
targetPoint = new Vector3 (targetPoint.x, targetPoint.y, 0);
transform.position = Vector3.MoveTowards (transform.position, targetPoint, movementSpeed * Time.deltaTime);
}
}


Тут ничего сложного, можно двигаться дальше. Код обработки двух касаний. Если нет сжимания/разжимания челюстей, то персонаж перемещается между двух пальцев.



if (Input.touchCount > 1) {
//Работа с двумя первыми касаниями.
Touch touch1 = Input.GetTouch(0);
Touch touch2 = Input.GetTouch(1);
//Если челюсти не работают, передвигаем персонажа между пальцами
if (!compressing && !decompressing) {
Vector3 targetPoint = Camera.main.ScreenToWorldPoint ((touch1.position + touch2.position) / 2);
targetPoint = new Vector3 (targetPoint.x, targetPoint.y, 0);
transform.position = Vector3.MoveTowards (transform.position, targetPoint, movementSpeed * Time.deltaTime);
}

float currentDistance = Vector2.Distance(touch1.position, touch2.position);
if(pastFingersDistance == 0) {
//Обнуление прошлого расстояния, если первый раз засечено два тача
pastFingersDistance = currentDistance;
}else if(currentDistance < pastFingersDistance - fingersMunchDetectionMin) {
//Метод включения сжатия челюстей. Управление графикой, у каждого индивидуально.
SetCompression();
}else if(currentDistance > pastFingersDistance + fingersMunchDetectionMin) {
//Метод включения разжатия челюстей. Управление графикой, у каждого индивидуально.
SetDecompression();
}
}
//Обнуление переменной, для того чтоб вычислять необходимость жевания относительно новой позиции пальцев.
if(Input.touchCount < 2) pastFingersDistance = 0;
//Если касаний стало меньше двух, а челюсти сжаты - они автоматически разжимаются.
if(Input.touchCount < 2 && isCompressed) SetDecompression();


fingersMunchDetectionMin — переменная, определяющая какое расстояние достаточно для того, чтобы начать жевание. Достаточно долго настраивал с помощью нескольких друзей. У каждого оказалось разное восприятие, вывел нечто среднее. В ходе тестов также выяснилось, что постоянно жевать пальцами пользователю попросту неудобно. Возникла необходимость сделать сжимание челюстей по простому тапу и метод, изложенный выше, приобрел следующий вид:



if (Input.touchCount > 1) {
//Работа с двумя первыми касаниями.
Touch touch1 = Input.GetTouch(0);
Touch touch2 = Input.GetTouch(1);
//Проверка если челюсти не работают
if (!compressing && !decompressing) {
float touch1Time = 0;
float touch2Time = 0;
//Вычисляется сколько времени активен тач 1
if (tapsHash.Contains (touch1.fingerId)) {
float startTouch1Time = (float) tapsHash [touch1.fingerId];
touch1Time = Time.time - startTouch1Time;
}
//Вычисляется сколько времени активен тач 2
if (tapsHash.Contains (touch2.fingerId)) {
float startTouch2Time = (float) tapsHash [touch2.fingerId];
touch2Time = Time.time - startTouch2Time;
}
//Если время отведенное на тап уже превышено для двух пальцев, персонаж передвигается между пальцами.
if (touch1Time > SECONDS_FOR_TAP && touch2Time > SECONDS_FOR_TAP) {
Vector3 targetPoint = Camera.main.ScreenToWorldPoint ((touch1.position + touch2.position) / 2);
targetPoint = new Vector3 (targetPoint.x, targetPoint.y, 0);
transform.position = Vector3.MoveTowards (transform.position, targetPoint, movementSpeed * Time.deltaTime);
}
}
float currentDistance = Vector2.Distance(touch1.position, touch2.position);
if(pastFingersDistance == 0) {
//Обнуление прошлого расстояния, если первый раз засечено два тача
pastFingersDistance = currentDistance;
}else if(currentDistance < pastFingersDistance - fingersMunchDetectionMin) {
//Метод включения сжатия челюстей. Управление графикой, у каждого индивидуально.
SetCompression();
}else if(currentDistance > pastFingersDistance + fingersMunchDetectionMin) {
//Метод включения разжатия челюстей. Управление графикой, у каждого индивидуально.
SetDecompression();
}
}
//Обнуление переменной, для того чтоб вычислять необходимость жевания относительно новой позиции пальцев.
if(Input.touchCount < 2) pastFingersDistance = 0;
//Если касаний стало меньше двух, а челюсти сжаты - они автоматически разжимаются.
if(Input.touchCount < 2 && isCompressed) SetDecompression();
//Метод который отвечает за осуществление жевания по тапу.
SetTapAttackListener ();


Константа SECONDS_FOR_TAP — время, отведенное на тап, как и расстояние на жевание, достаточно долго тестировалась и настраивалась. Ну и собственно последние методы, которые осуществляют жевание по простому тапу:



void SetTapAttackListener() {
if (Input.touchCount > 0) {
foreach (Touch touch in Input.touches) {
//Обработка активного тача
DetectOneTouchTap (touch);
}
}
}

void DetectOneTouchTap(Touch touch) {
if (touch.phase == TouchPhase.Began) {
//В случае если тач только начался, он записывается в хэш-таблицу для обработки.
//Ключ - ид тача, значение - начало прикосновения.
tapsHash.Add (touch.fingerId, Time.time);
} else if(touch.phase == TouchPhase.Ended) {
float startTouchTime = (float) tapsHash [touch.fingerId];
float timeOfTouch = Time.time - startTouchTime;
//Осуществление сжатия и разжатия челюстей, если тач был тапом
if (timeOfTouch <= SECONDS_FOR_TAP) {
SetCompression();
SetDecompression();
}
tapsHash.Remove (touch.fingerId);
}
}


В начале пытался найти сей алгоритм на просторах интернета, не для копипаста, а для проверки своего хода мыслей. Однако ничего не нашел и решил выложить его в помощь коллегам. Сейчас очень хорошо вижу, что код несколько хаотичен, ну а в остальном — жду комментариев.

Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/282752/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
Свет_Алексеевна

Как сделать хорошее фото на расстоянии

Пятница, 29 Января 2016 г. 09:06 (ссылка)

Это цитата сообщения BARGUZIN Оригинальное сообщение

Как сделать хорошее фото на расстоянии




3509984_1 (700x617, 201Kb)Понятно, что хорошие фотографии можно снять только хорошим фотоаппаратом. Спорить на тему, какой фотоаппарат лучше - дело неблагодарное и трудное. Правильно многие говорят, что нужно хорошо освоить свой фотоаппарат, а затем говорить о его достоинствах и пробелах. Вытащить максимум возможностей из камеры - вот главная задача для вас. Только хорошая фотография может как-то заставить читателя прочитать ваш пост и остаться у вас на некоторое время.



Советов, как это сделать, найти в интернете можно довольно много. Но главное, нужно запомнить, что ни один редактор точно не сможет спасти плохое фото. Именно поэтому процессу создания снимка нужно уделить самое пристальное внимание. Важно при этом и хорошее освещение, и знание такого важного фактора, что белый фон придаст особый стиль вашей фотографии. Для предметной съемки хорошо использовать цветы, а также журналы, книги и красивую посуду. В конечном итоге все зависит лишь от вашей фантазии, от желания создать красивую картинку, естественно, от опыта, который приходит со временем.



 



 3509984_smailik_kopeechka (51x45, 2Kb)Между тем важным фактором получения качественного снимка на расстоянии является возможность получить качественное приближение. Это можно достичь наличием оптического зума, который есть во всех профессиональных зеркальных фотокамерах. То есть там, где собственно имеется сам объектив. К примеру, все мобильные телефоны снабжены только цифровым зумом. Так в чем же отличие фотоаппарата с оптическим зумом  от цифровой мыльницы.   Цифровой зум - это своего рода фикция, а пользование им не дает хорошего результата! Читайте советы профессионалов здесь!



 





 

 

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
lj_prophotos_ru

Женщины любят объективы побольше

Четверг, 28 Января 2016 г. 15:43 (ссылка)

Горячо рекомендуем взять и новичкам фотографии, и профи взять этот ролик на вооружение. Пригодится, чтобы просвещаться и просвещать, вдохновляться и вдохновлять на фототворчество.


Фотолюбителям он поможет быстро разобраться в разнообразии объективов. Кит, фикс, зум, суперзум — кто эти ребята? И самое главное — стоит ли покупать всё, чтобы стать крутым фотографом?


А профессионалы теперь смогут ссылкой на видео ответить на один из самых частых вопросов домашних и друзей: "Ну вот зачем тебе столько объективов?"

http://prophotos-ru.livejournal.com/2329699.html

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
mvnazarov

ТЕСТИРУЕМ NIKON COOLPIX P900 С ОПТИЧЕСКИМ ЗУМОМ 83!!!

Суббота, 09 Января 2016 г. 18:54 (ссылка)

БОЛЬШИНСТВО ЛЮДЕЙ НЕ ЗНАЮТ, ЧЕГО ОНИ ХОТЯТ. НО ТОЧНО ЗНАЮТ, ЧТО ТО, ЧТО ОНИ ИМЕЮТ - ЭТО СОВСЕМ НЕ ТО, ЧТО ОНИ ХОТЯТ. (Р.БЭНДЛЕР)

clip_image001

Посмотрим на основные характеристики Nikon Coolpix P900:
• 16,1 Мпкс CMOS матрица формата 1/2,3"
• Объектив 24-2000мм f/2,8-6,5
• Система стабилизации изображения Dual Detect Optical VR
• Светочувствительность ISO 100-6,400
• 1080p/60fps видео со стереозвуком
• Режимы высокоскоростной видеосъемки, панорамной фотосъемки
• 3" 921,600-точечный экран с шарнирным креплением
• 0,2" 921,000-точечный электронный видоискатель
• Скорость серийной съемки 7fps
• Ресурс аккумулятора 360 снимков
• Заряд батареи в камере

• Размеры и вес - 140?103?137мм и 899г с батареей и картой памяти

Японская компания Nikon ежегодно выпускает множество новых фотокамер. Среди них популярностью до сих пор пользуются компакты. Кто бы что ни говорил, а многим людям нужен универсальный фотоаппарат, который прост в освоении, а его стоимость не приводит в разорение семейный бюджет.

Nikon Coolpix P900 стала следующим шагом в развитии таких компактных суперзумов, выйдя за рамки уже привычных 50...65х зум-объективов и предлагая гигантский 83-кратный оптический зум, непревзойденный пока никем среди компактных камер.

clip_image002

Начнем наш обзор с главной "фишки" P900 - оптики. Сверхмощный оптический зум, охватывающий фокусные расстояния от 24 до 2000 мм (с возможностью расширения до 4000 мм благодаря функции Dynamic Fine Zoom) поможет фотографу окунуться в мир дикой природы и запечатлеть ее красоту во всех подробностях - как на фотографиях, так и в видеороликах Full HD. Объектив камеры, имея диапазон эквивалентных фокусных расстояний 24-2000 мм, способен увеличить картинку в 83 раза! Эта модель со сверхмощным 83-кратным оптическим зумом позволяет запечатлеть детали, невидимые человеческому глазу. Большой светосильный объектив с диафрагмой f/2,8–6,5 обеспечивает получение исключительно резких изображений с высоким разрешением при любом коэффициенте увеличения — даже в максимальном телескопическом положении с заданным фокусным расстоянием 2000 мм (эквивалент формата 35 мм).
Это позволит на "коротком " конце сфотографировать интерьер помещения или запечатлеть красивый пейзаж. Ну а на крайних "длинных" значениях не составит труда прямо снять котиков на крыше соседнего дома. Или соседку в окне того же дома напротив. :)

 

Читать далее

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
lj_prophotos_ru

Маленькие удовольствия в доме напротив

Пятница, 25 Декабря 2015 г. 14:54 (ссылка)

Настало время узнать, чем цифровые фотокамеры нового поколения способны удивить даже бывалого фотолюбителя!


Начнём с простого и интригующего: объективы некоторых камер могут приближать объекты в рекордные 25 раз. Только представьте, вы смотрите из окна и ловите в кадр даже сильно удалённые сюжеты, получая возможность устроить смотровую площадку везде где только можно!


Сегодня герой нашего ролика решил пошпионить за жителями соседней многоэтажки:


http://prophotos-ru.livejournal.com/2307029.html

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
kseniasamohina

Основные характеристики ip видеокамер

Пятница, 09 Октября 2015 г. 20:28 (ссылка)
md-eksperiment.org/etv_page...ory=STATJI


На что следует обратить внимание при покупке ip камеры видеонаблюдения.

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
bnkp

Основные характеристики ip видеокамер

Суббота, 15 Ноября 2014 г. 19:35 (ссылка)
md-eksperiment.org/etv_page...ory=STATJI

На что следует обратить внимание при покупке ip камеры видеонаблюдения.
Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
Понтифик_Иванов

Основные характеристики ip видеокамер

Суббота, 15 Ноября 2014 г. 19:29 (ссылка)
md-eksperiment.org/etv_page...ory=STATJI

На что следует обратить внимание при покупке ip камеры видеонаблюдения.
Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество

Следующие 30  »

<зум - Самое интересное в блогах

Страницы: [1] 2 3 ..
.. 10

LiveInternet.Ru Ссылки: на главную|почта|знакомства|одноклассники|фото|открытки|тесты|чат
О проекте: помощь|контакты|разместить рекламу|версия для pda