我是IOS开发的新手,目前在didBeginContact方法中遇到一些sprite工具包冲突问题。
如果一个碰撞的物理物体被移走了,我如何摆脱或者停止didBeginContact的运行?例:一颗子弹与两个重叠的敌人相撞。因为子弹击中第一个敌人并被摧毁,所以在第二个敌人上运行的碰撞检查抛出异常,因为子弹不再存在。
我试过检查nil和NSNULL值,但运气不好。我收到的错误代码是“线程1:EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOIP,子代码=0x0)”,并在尝试检查类别位掩码时发生(因为鱼雷不再存在)。
代码:
var bodyA:SKPhysicsBody = contact.bodyA
var bodyB:SKPhysicsBody = contact.bodyB
if(contact.bodyA.categoryBitMask == alienCategory && contact.bodyB.categoryBitMask == alienCategory){
return
}
if((bodyA.categoryBitMask == alienCategory) && (bodyB.categoryBitMask == photonTorpedoCategory)){
torpedoDidCollideWithAlien(bodyA.node as SKSpriteNode)
}
var currTorpedo:SKSpriteNode = contact.bodyB.node as SKSpriteNode
var currAlien:SKSpriteNode = contact.bodyA.node as SKSpriteNode
currTorpedo.removeFromParent()
currAlien.removeFromParent()
}
func torpedoDidCollideWithAlien(alien:SKSpriteNode){
aliensDestroyed++
label.text = ("Current Score: " + String(aliensDestroyed))
}
也许你可以把鱼雷从现场移走推迟到下一个场景“更新”。你可以将鱼雷标记为禁用/不活动,这样它就不会影响你的第二个重叠敌人。类似这样:
class YourScene: SkScene {
// Array of disabled torpedos
var disabledTorpedos = SKSpriteNode()[]
func didBeginContact(contact: SKPhysicsContact) {
var bodyA:SKPhysicsBody = contact.bodyA
var bodyB:SKPhysicsBody = contact.bodyB
if(contact.bodyA.categoryBitMask == alienCategory && contact.bodyB.categoryBitMask == alienCategory){
return
}
if((bodyA.categoryBitMask == alienCategory) && (bodyB.categoryBitMask == photonTorpedoCategory)){
torpedoDidCollideWithAlien(bodyA.node as SKSpriteNode)
}
var currTorpedo:SKSpriteNode = contact.bodyB.node as SKSpriteNode
var currAlien:SKSpriteNode = contact.bodyA.node as SKSpriteNode
// Created a new photonTorpedoDisabledCategory so the torpedo cannot hit a 2nd alien
currTorpedo.physicsBody.categoryBitMask = photonTorpedoDisabledCategory
disabledTorpedoes.append(currTorpedo)
// Hide torpedo from scene
currTorpedo.hidden = true
currAlien.removeFromParent()
}
override func update(currentTime: NSTimeInterval) {
// loop through disabledTorpedos array and removeFromParent
}
}
我已经寻找并找到了单个碰撞的答案,但我正在寻找一种检测多种类型的碰撞的方法。我正在制作一个游戏,其中有3个我想要的碰撞。用户飞机与敌方子弹相撞,用户子弹与敌机相撞(我已经工作过),敌方子弹与用户子弹相撞。我已经设置并更正了所有类别BitMask和contactTestBitMask。这是我的委托方法。
我在雪碧套装里做一个复古街机游戏。我是这个框架的新手,所以我每分钟都发现新的东西,但很难解决这个问题,我在过去的几个小时里一直试图解决这个问题。 首先是游戏的屏幕转储和用红色勾勒出的物理实体。 http://i.imgur.com/KcbMVn4.png?1 当你按下拳击手套按钮时,大家伙通过这种方法进行拳击 } 我的碰撞代理如下所示 我这里的问题是,让didBeginContact记录命中的唯一
我正在使用Sprite Kit中的碰撞检测。它在起作用,防止我的精灵穿越路径。然而,我在didBeginContact中没有收到通知:而且我似乎无法控制物理引擎在发生碰撞时的响应。 我让各种汽车(SKSpriteNodes)使用SKAction followPath沿着以下路径行驶:as offset:oriento path:duration: 以前,如果两辆车相交,它们都会像往常一样继续行驶,
这就是正在发生的事情,游戏不断停止,因为两个圆圈相互碰撞,我正在尝试通过确保ID是正方形ID来防止这种情况,我试图让圆圈碰撞在一起,而忽略碰撞,但它没有这样做,我不知道如何确切地阻止它相互碰撞,只允许它与正方形碰撞。 基本上我想阻止这个圆与另一个圆碰撞,并允许它与正方形碰撞。 任何帮助都会很好谢谢 游戏引擎引擎类 这是我在扩展game.engine.engine包的game类中检查冲突的地方。 游
刚开始在pygame中的精灵碰撞。运行此代码时,会弹出一个属性错误,指出“组”对象没有属性 “rect”。我不知道为什么会发生此错误。建议?
在get_hit=pyGame.sprite的第82行,我检查sprite碰撞的移动时,它会给出错误提示:“:File”c:\Users\pc\VS_PYTHON_PY\pyGame.PY“。”。spritecollide(Player,敌方,True)文件“C:\python py\lib\site packages\pygame\sprite.py”,第1682行,位于spritecrolli