如果精灵的下半部分很重要,如何检查碰撞(想想有茎的樱桃)
How to check collision if only bottom half of the sprite matters (think of a cherry with a stem)
我正在尝试在 Swift 中使用 SpriteKit 制作游戏。
我有一个移动的精灵,它是一个矩形,宽度为 (sprite.frame.size.width),高度为 2*(sprite.frame.size.width)
我只想检查宽度为 (sprite.frame.size.width) 高度为 (sprite.frame.size.width)
我设置 sprite.anchorPoint = CGPointMake(0.5, 0.25) 并使用方法 CGRectIntersectsRect 检查与另一个精灵的碰撞.但这不起作用。碰撞区域保持为第一个矩形。
我不想使用调用 physicsBody 的方法,因为游戏中没有其他物理。
我在这里错过了什么?
我实际上发现了这个 UIEdgeInsets 函数可以用来缩小框架。如果 spriteB 是有问题的精灵,那么不要像这样测试:
if CGRectIntersectsRect(spriteA.frame, spriteB.frame) {
// something happens
}
只需插入 spriteB 下半部分的边缘,如下所示:
if CGRectIntersectsRect(spriteA.frame, UIEdgeInsetsInsetRect(spriteB.frame, UIEdgeInsetsMake(spriteB.frame.height/2 , 0 , 0 , 0))) {
// something happens
}
我正在尝试在 Swift 中使用 SpriteKit 制作游戏。
我有一个移动的精灵,它是一个矩形,宽度为 (sprite.frame.size.width),高度为 2*(sprite.frame.size.width)
我只想检查宽度为 (sprite.frame.size.width) 高度为 (sprite.frame.size.width)
我设置 sprite.anchorPoint = CGPointMake(0.5, 0.25) 并使用方法 CGRectIntersectsRect 检查与另一个精灵的碰撞.但这不起作用。碰撞区域保持为第一个矩形。
我不想使用调用 physicsBody 的方法,因为游戏中没有其他物理。
我在这里错过了什么?
我实际上发现了这个 UIEdgeInsets 函数可以用来缩小框架。如果 spriteB 是有问题的精灵,那么不要像这样测试:
if CGRectIntersectsRect(spriteA.frame, spriteB.frame) {
// something happens
}
只需插入 spriteB 下半部分的边缘,如下所示:
if CGRectIntersectsRect(spriteA.frame, UIEdgeInsetsInsetRect(spriteB.frame, UIEdgeInsetsMake(spriteB.frame.height/2 , 0 , 0 , 0))) {
// something happens
}