应用程序图形制作(透明且无额外空间)

时间:2011-10-07 09:46:25

标签: objective-c xcode graphics

我是编码员但不是图形制作者。虽然我不能生产技术上“工作”的图形,但我可以在视觉上合理地生产出符合质量标准的图形。这就是我的意思:

我正在使用CGRectIntersectsRect来碰撞图像。我的图像有一些额外的空间,我已经使用Adobe PhotoShop完全透明,但即使这个额外的透明空间不可见,当两个图像碰撞时,看起来你将什么都没打,因为这个额外的隐形透明空间是图像和调用CGRectIntersectsRect时,它检测两个图像之间的触摸。因此,如果另一个图像触及透明空间,则调用CGRectIntersectsRect并执行我的代码。我只希望我的代码在它碰到图像的实际COLOR空间时被执行。这有两件事可以帮助我完成这些工作,他们会提出问题。

  1. 了解如何在photoshop中对图像进行无额外的操作。我怎么能这样做,教程?
  2. 仅在触摸图像的颜色部分时调用CGRectIntersectsRect。一种方法吗?
  3. 谢谢你们!

3 个答案:

答案 0 :(得分:2)

关于你的问题#1,这取决于。所有图像都是矩形的。因此,如果您的精灵是矩形,您可以在Photoshop中将其裁剪为矩形区域。但是如果你想要处理一个圆球,那么就不能做“移除额外空间”这样的事情。您的圆球将始终存储在矩形图像中,角落上有透明空间。

答案 1 :(得分:1)

  

了解如何在photoshop中的图像上制作NO EXTRA SPACE。我怎么能这样做,教程?

您可以使用矩形选框工具和Image > Crop手动选择区域,或使用Image > Trim基于边缘像素颜色自动修剪图像。

  

CGRectIntersectsRect仅在触摸图像的颜色部分时调用。一种方法吗?

您可以使用pixel-perfect collisions或为游戏对象创建更好的边界形状。例如,不是像this one这样的太空船使用像素完美碰撞,而是可以使用翅膀的三角形,身体的矩形和头部的三角形。

像素完美碰撞

你可以实现它的一种方法是

  1. 内存中有空白图片。
  2. 从一个蓝色图像(#0000ff)中绘制可见像素。
  3. 从另一个图像中以红色(#ff0000)绘制可见像素。
  4. 如果图像中有任何紫色像素(#ff00ff),则会有一个交叉点。
  5. 备用碰撞检测解决方案

    如果您的游戏是基于物理的,那么您可以使用像Box2D这样的物理引擎。您可以使用圆形,矩形和多边形来表示所有游戏对象,它可以为您提供准确的结果,而不会产生不必要的开销。

答案 2 :(得分:1)

对于非矩形形状的碰撞检测,您应该查看可用于iOS的许多游戏和/或物理库之一。 Cocos2d加上Box2d或花栗鼠是很受欢迎的选择。

如果你想自己做,你需要从像自定义CGPath跟踪每个对象的实际形状的东西开始,然后使用像CGPathContainsPoint这样的函数(来自内存,它可能是错误的)。但这不是一项简单的工作。愤怒的小鸟使用box2d,AFAIK。