Создание графики в приложении (прозрачной и без лишних пробелов)

#objective-c #xcode #graphics

#objective-c #xcode #графика

Вопрос:

Я программист, но не создатель графики. Я могу прилично создавать графику, которая визуально соответствует стандартам качества, хотя я не могу создавать графику, которая будет технически «работать». Вот что я имею в виду:

Я использую CGRectIntersectsRect для сталкивающихся изображений. На моем изображении есть дополнительное пространство, которое я сделал полностью прозрачным с помощью Adobe PhotoShop, но даже если это дополнительное прозрачное пространство не видно, при столкновении двух изображений будет выглядеть так, что вы ничего не нажмете, поскольку это дополнительное невидимое прозрачное пространство является ЧАСТЬЮ изображения, и при вызове CGRectIntersectsRect оно обнаруживает касаниемежду двумя изображениями. Поэтому, если другое изображение касается прозрачного пространства, вызывается CGRectIntersectsRect и выполняется мой код. Я хочу, чтобы мой код выполнялся только в том случае, если он попадает в фактическое ЦВЕТОВОЕ пространство изображения. Вот две вещи, которые могли бы мне помочь в этом, они сопровождаются вопросами.

  1. Узнайте, как не создавать ЛИШНИХ ПРОБЕЛОВ на изображении в Photoshop. Как я мог это сделать, учебные пособия?
  2. CGRectIntersectsRect вызывается только при касании цветной части изображения. Способ сделать это?

Спасибо, ребята!

Ответ №1:

Что касается вашего вопроса № 1, это зависит от обстоятельств. Все изображения прямоугольные, все. Итак, если ваш спрайт прямоугольный, вы можете обрезать его в Photoshop только до прямоугольной области. Но если вы хотите обработать, скажем, круговой шар, то вы не можете сделать такую вещь, как «убрать лишнее пространство». Ваш круглый шар всегда будет храниться в виде прямоугольного изображения с прозрачным пространством по углам.

Комментарии:

1. Я не понимаю: все изображения прямоугольные, все. Итак, если ваш спрайт прямоугольный, вы можете обрезать его в Photoshop только до прямоугольной области

2. могу ли я использовать cgrectintersects? Как это делают другие программисты?

3. Не существует такого понятия, как круговое изображение. Все изображения хранятся в виде прямоугольных, с прозрачными пикселями по краям.

Ответ №2:

Узнайте, как не создавать ЛИШНИХ ПРОБЕЛОВ на изображении в Photoshop. Как я мог это сделать, учебные пособия?

Вы можете вручную выделить область с помощью инструмента Прямоугольное выделение и Image > Crop / или автоматически обрезать изображение на основе цвета пикселя с помощью Image > Trim .

CGRectIntersectsRect вызывается только при касании цветной части изображения. Способ сделать это?

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

Идеальное столкновение пикселей

Одним из способов его реализации было бы

  1. Имейте пустое изображение в памяти.
  2. Нарисуйте видимые пиксели из одного изображения синим цветом (#0000ff).
  3. Выделите видимые пиксели из другого изображения красным цветом (#ff0000).
  4. Если на изображении есть фиолетовые пиксели (#ff00ff), значит, есть пересечение.

Альтернативное решение для обнаружения столкновений

Если ваша игра основана на физике, вы можете использовать физический движок, такой как Box2D. Вы можете использовать круги, прямоугольники и полигоны для представления всех ваших игровых объектов, и это даст вам точные результаты без лишних затрат.

Комментарии:

1. я сделал изображение и обрезку, но при этом удаляется лишнее пространство, но остается некоторое пространство по диагонали

2. Могу ли я увидеть изображение, которое вы обрезали? Возможно, в пустом пространстве есть несколько пикселей.

3. я не понимаю, что такое идеальное столкновение пикселей и как реализовать iit

4. спасибо, но мне нужно немного больше, чем что-то более эффективное

5. Я бы предположил, что они использовали физический движок, такой как Box2D. Для Angry Birds они, вероятно, использовали круги для птиц и прямоугольники для деревянных блоков. Для Doodle Jump они, вероятно, использовали только прямоугольники.

Ответ №3:

Для обнаружения столкновений для непрямоугольных форм вам следует обратиться к одной из многих библиотек игр и / или физики, доступных для iOS. Cocos2d в сочетании с Box2d или chipmunk являются популярными вариантами.

Если вы хотите сделать это самостоятельно, вам нужно начать с чего-то вроде пользовательского CGPath, отслеживающего фактическую форму каждого объекта, затем используйте функцию типа CGPathContainsPoint (это из памяти, это может быть неправильно). Но это непростая работа. Angry birds использует box2d, AFAIK.