我必须遵循以下代码:
func didBeginContact(contact: SKPhysicsContact) { // Only run if its a "contact"
// ENDING
var contactBody1: SKPhysicsBody
var contactBody2: SKPhysicsBody
if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
contactBody1 = contact.bodyA
contactBody2 = contact.bodyB
} else {
contactBody2 = contact.bodyB
contactBody1 = contact.bodyA
}
if ((contactBody1.categoryBitMask == 2) && (contactBody2.categoryBitMask == 1)) {
contactBody2.node!.removeFromParent()
//p1.fillColor = SKColor.greenColor()
//p1.strokeColor = SKColor.greenColor()
}}
此代码正在运行碰撞测试。当对象A和B发生碰撞时,我想改变“p1”的颜色。
接下来我有这段代码。
var moveBlockLine1 = SKAction.moveByX(-self.frame.size.width * 2, y: 0, duration: NSTimeInterval(self.frame.size.width / 60))
var p1 = SKShapeNode(rectOfSize: CGSize(width: 50, height: 50))
p1.fillColor = SKColor.whiteColor()
p1.strokeColor = SKColor.whiteColor()
p1.physicsBody = SKPhysicsBody(rectangleOfSize: CGSize(width: 50, height: 50))
p1.position = CGPoint(x: CGRectGetMidX(self.frame) + self.frame.size.width / 2 + 50, y: CGRectGetMidY(self.frame)) //
p1.physicsBody?.affectedByGravity = false // Will not be affected by gravity
p1.physicsBody?.dynamic = false // Stops the image moving if its hit by a ball.
p1.physicsBody?.friction = 0
p1.alpha = 1
此代码在屏幕上从右到左产生块。我的问题是,为了使第一个代码工作,我需要将“var p1 = SKShapeNode(rectOfSize:CGSize(width:50,height:50))”移到另一个地方,因为此刻,swift无法识别碰撞代码中的“p1”。
当我移动“var p1”部分时,碰撞代码起作用,因为现在可以识别p1,但是,代码的第二部分,即产生,使应用程序崩溃,因为现在swift无法生成具有的对象已经产生过。产卵代码正在运行NSTimer。
无论如何?谢谢:))