我的程序中有5个对象当前正在-2或2处移动。如果它们触摸,我希望它们彼此相反,但我无法弄清楚它...我有此刻
if(CGRectIntersectsRect(Unit1.frame, Unit2.frame)){
Unit1SideMovement = 2;
Unit2SideMovement = -2;
}
有什么更好的方法可以确保他们在触摸后采取相反的方式,因为有些可能会从另一个方向进入/重新产生?我有10种不同的可能性,1-5编码相同。
一个小问题是"框架"被认为是它的确切中心,所以为了使碰撞发生,它们似乎必须直接在彼此之上。因此,当图像重新出现时,它们会相互重叠
答案 0 :(得分:0)
第一部分只是否定当前值 -
Unit1SideMovement = -Unit1SideMovement;
Unit2SideMovement = -Unit2SideMovement;
要扩展用于碰撞测试的矩形边界,您可以使用带有负偏移的CGRectInset
(负插入使矩形变大),这样您就可以得到 -
if(CGRectIntersectsRect(CGRectInset(Unit1.frame,-2,-2), CGRectInset(Unit2.frame,-2,-2))){
Unit1SideMovement = -Unit1SideMovement;
Unit2SideMovement = -Unit2SideMovement;
}
您可能需要使用插入值来计算最佳效果。
另外,作为一种风格问题,变量和方法应该以小写字母和带大写字母的类开头。