【发布时间】:2015-02-08 16:38:11
【问题描述】:
我目前正在开发一个使用 SpriteKit 游戏技术以 Swift 编写的 iOS 应用程序。在这个游戏中,雨滴从屏幕顶部落到底部。当它们到达底部时(由physicsBody 表示),它们应该返回到屏幕顶部的原始位置,从而使动画在游戏的整个生命周期中继续播放。
因为我只需要几滴,所以我这样制作它们:
let drop = SKSpriteNode(imageNamed: "drop")
drop.position = CGPointMake(x,y)
drop.physicsBody = SKPhysicsBody(rectangleOfSize: drop.size)
addChild(drop)
然后我创建位掩码:
drop.physicsBody!.categoryBitmask = DropCategory
bottom.physicsBody!.categoryBitmask = BottomCategory
drop.physicsBody!.contactTestBitmask = BottomCategory
我添加了 didBeginContact 函数,当下降到达底部时我会收到通知。然后我的控制台显示“命中”。
func didBeginContact(contact: SKPhysicsContact) {
var firstBody: SKPhysicsBody
var secondBody: SKPhysicsBody
if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
firstBody = contact.bodyA
secondBody = contact.bodyB
} else {
firstBody = contact.bodyB
secondBody = contact.bodyA
}
if firstBody.categoryBitMask == BlockCategory && secondBody.categoryBitMask == GroundCategory {
println("hit ground")
firstBody.node?.removeFromParent()
let drop = SKSpriteNode(imageNamed: "drop")
drop.name = "testNode"
drop.position = CGPointMake(self.frame.width - self.frame.width/3*2, self.frame.height) // At start Position
drop.physicsBody = SKPhysicsBody(rectangleOfSize: drop.size)
drop.physicsBody?.categoryBitMask = BlockCategory
drop.physicsBody?.contactTestBitMask = GroundCategory
addChild(drop)
}
}
但是,drop 的位置不会改变。没有语法错误,那我的问题是什么?
如果我替换这个:
firstBody.node!.position = CGPointMake(x, y)
用这个:
firstBody.applyImpulse(CGVector)
它给了下降的冲动。我怎样才能使第一个选项也起作用?
【问题讨论】:
-
您是否尝试过设置水滴物理体的质量?
-
为什么不使用粒子发射器?在 XCode 中创建新粒子文件时,甚至可以选择下雨模板。
-
此外,即使我认为使用物理系统对于您正在尝试做的事情来说太过分了,但下落不应该需要冲动。水滴只会受到重力的影响。
-
我想在水滴击中我的角色时得到通知,所以我需要物理系统。
-
是的,为什么不直接使用粒子发射器?
标签: ios swift sprite-kit