好的,所以我对精灵工具包相当陌生,我在Swift中工作。我有2个精灵节点,savior
和chicken1
。savior
有一个物理体,这就是我设置它的方式:
var saviorTexture = SKTexture(imageNamed: "1.png")
saviorTexture.filteringMode = SKTextureFilteringMode.Nearest
savior = SKSpriteNode(texture: saviorTexture)
savior.setScale(0.2)
savior.position = CGPoint(x: self.frame.size.width * 0.5, y: self.frame.size.height * 0.2)
savior.physicsBody?.dynamic = true
savior.physicsBody?.allowsRotation = false
savior.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(savior.size.width, savior.size.height))
self.addChild(savior)
chicken1
目前没有物理实体:
var chickenTexture = SKTexture(imageNamed: "block1")
chicken1 = SKSpriteNode(texture: chickenTexture)
chicken1.setScale(0.75)
chicken1.position = CGPoint(x: self.size.width * 0.38, y: self.size.height * 1.2)
self.addChild(chicken1)
我需要知道如何在这些对象之间进行碰撞检测(即,如果救世主和小鸡接触,则执行此操作),最好不要使chicken1
成为物理体。
当我把鸡做成一个物理物体时,它突然变得不稳定,并移动其他物体。
如果没有物理学就无法进行碰撞检测,我怎样才能使鸡肉1
成为不受任何影响的物理体,并且直接穿过其他物理体?
编辑**************
所以我跟随初学者swift sprite kit -节点碰撞检测帮助(SKPhysicsContact)并拥有:
>
将我的类更改为SK物理联系人代表
:
类GameScene: SKScene, SK物理联系代表{
写了以下内容:
self.physicsWorld.contactDelegate = self
savior.physicsBody?.categoryBitMask = saviorCategory
savior.physicsBody?.contactTestBitMask = animalCategory
savior.physicsBody?.collisionBitMask = 0
chicken1.physicsBody?.categoryBitMask = animalCategory
chicken1.physicsBody?.contactTestBitMask = saviorCategory
chicken1.physicsBody?.collisionBitMask = 0
func didBeginContact(contact: SKPhysicsContact) {
var saviorPhysics: SKPhysicsBody
var chicken1Physics: SKPhysicsBody
if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask
{
saviorPhysics = contact.bodyA
chicken1Physics = contact.bodyB
}
else {
saviorPhysics = contact.bodyB
chicken1Physics = contact.bodyA
}
if saviorPhysics.categoryBitMask == 0 && chicken1Physics.categoryBitMask == 1 {
self.chicken1.removeFromParent()
}
}
我运行了它,没有出现错误,但它不起作用。
您可以使用categoryBitMask
完成此操作,并通过响应SKSceneContactDelegate
来自行处理冲突。
这样你可以为不同的节点设置不同的类别,并随意处理不同类别之间的冲突。
教程:
http://SEO DOA . com/2014/04/01/skphysicsbody-react-to-contact-but-to-collide/