我试图检测玩家对象何时与我游戏中的其他物体发生碰撞。这是我当前的代码:两个精灵之间的碰撞检测不起作用
import SpriteKit
class GameScene: SKScene {
let player = SKSpriteNode(imageNamed: “Box”)
override func didMoveToView(view: SKView) {
backgroundColor = SKColor.whiteColor()
player.position = CGPoint(x: size.width/2, y: size.height/2)
addChild(player)
runAction(SKAction.repeatActionForever(
SKAction.sequence([
SKAction.runBlock(addObject),
SKAction.waitForDuration(1)
])
))
runAction(SKAction.repeatActionForever(
SKAction.sequence([
SKAction.runBlock(addSecondObject),
SKAction.waitForDuration(1)
])
))
}
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
player.position = location
}
}
func EndGame() {
println("GAME OVER")
}
func Collision() {
if (CGRectIntersectsRect(player.frame, object.frame)) {
[EndGame];
}
if (CGRectIntersectsRect(player.frame, object1.frame)) {
[EndGame];
}
}
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
}
func addObject() {
let object = SKSpriteNode(imageNamed: "object1”)
object.name = "object1”
object.position = CGPoint(x: size.width/4, y: size.height/4)
self.addChild(object)
}
func addSecondObject() {
let object = SKSpriteNode(imageNamed: "object2”)
object.name = "object2”
object.position = CGPoint(x: size.width/2, y: size.height/2)
self.addChild(object)
}
}
所以你可以看到我的碰撞代码是这样的:
func Collision() {
if (CGRectIntersectsRect(player.frame, object.frame)) {
[EndGame];
}
if (CGRectIntersectsRect(player.frame, object1.frame)) {
[EndGame];
}
}
的问题是,由于对象和对象1个变量是私有的FUNC( addObject)和func(addSecondObject),我不能在上面的代码中调用它们。当他们碰撞时,目前我只想让EndGame()运行,在控制台中输出“Game Over”。
我不知道我采取的碰撞检测方法是否正确,但任何帮助都会很棒!谢谢:)
谢谢你,在那里我会写,如果节点碰撞,运行[残局]? – bandoy123 2015-02-05 21:25:52
此外,对象是否必须全局声明? – bandoy123 2015-02-05 21:27:26
我已经添加了一个指向教程的链接:http://www.raywenderlich.com/84434/sprite-kit-swift-tutorial-beginners。尝试一下。这就是我开始用精灵套件编写游戏的过程,它非常棒。 – Christian 2015-02-05 21:32:23