2010-11-03 4 views
1

«Режущий» эффект, о котором я говорю, можно увидеть в знаменитой игре на iPhone «Фруктовый ниндзя» и «Отрежьте веревку», то есть когда вы двигаете пальцем по экрану, имитировать эффект резания ножа.Как реализовать эффект резки на iPhone?

Мне интересно, как называется этот эффект и как он реализован. Может ли кто-нибудь дать мне подсказку?

ответ

2

Это зависит от того, как вы реализовали свою игру до сих пор, то есть с использованием 2D-графики, например, в Cocoa или с использованием OpenGL. Например, фруктовый ниндзя использует последний, потому что его плоды - это 3D-модели. В этом случае ваша цепочка Render(), как правило, рисует все ваши 3D-объекты, а затем меняет проекцию на орфографию, чтобы сделать что-то вроде sprite-шрифтов или нетрансформированных 2D-спрайтов (например, HUD) поверх всего. Каждый из этих «спрайтов» представляет собой квадрант (два треугольника, образующих прямоугольник) с изображением текстуры, сопоставленным с ним. Как только текстура загружается в графическую память, графический процессор может нарисовать его поверх & по очень быстрому и растянуть или повернуть его без дополнительных затрат!

Так вот как я это сделал: квадрат с прозрачной текстурой, который выглядит как «полоса», которую вы хотите. Затем следите за касанием и отслеживайте предыдущие (или несколько предыдущих) сенсорных координат. Рассчитайте расстояние между двумя точками («формулу расстояния» Google) и его вектор угла (только две операции деления на deltaX, deltaY теперь, когда у вас есть расстояние). Примените их к матрице 4x4, которую вы будете использовать для преобразования вашего квадроцикла, чтобы вы растянули его (масштаб X на расстояние), поверните его в соответствии с вашим вектором и переведите его на X, Y самой последней точки касания. Когда прикосновение будет поднято, вы можете легко сжимать/исчезать полоску.

Существует другой подход, который вы могли бы использовать для обработки изогнутых пальцев. Это сложнее, но будет выглядеть лучше. Используйте TRIANGLE STRIP с вашим «штриховым» изображением (текстурные координаты от 0.0 до 1.0) по вершинам вдоль его длины. Затем, основываясь на всех предыдущих пунктах касания, задайте все координаты вершин самостоятельно, вычисляя линии между точками и смещая вершины перпендикулярно. Имеют смысл? Я надеюсь, что это так! Этот подход - забава, и это не так больно, как может показаться, я обещаю!

+0

Это действительно хороший ответ, спасибо. Я использую 2D-графику (cocos2d lib) для реализации эффекта. Я попытался использовать следующий метод для этого: 1) создать изображение, представляющее след, например, 16x16 белый блок; 2) Нарисуйте изображение на каждом кадре на месте вашего пальца; 3) Примените эффект альфа-затухания на образы. Но изображения тропы разбросаны, а не непрерывны. Согласно вашему ответу, кажется, что каждый кадр я должен рассчитать расстояние двух точек и применить преобразование на изображении моей дорожки. Я попробую это позже, спасибо за ваш ответ снова. – icethawless

0

Образец GLPaint может дать вам некоторый намек.

+0

Хорошо, я посмотрю. Благодарю. – icethawless