【发布时间】:2015-02-28 21:19:19
【问题描述】:
它可能看起来很长,但大部分是相同的代码:P 希望我能很好地解释我自己:) 我希望我能解释一下我自己。 情况是这样: 我有一个 SKShapeNode 让我们称他为 X。 这就是我声明 X(ONLY ONCE IN didMoveToView ) 的方式:
var X = SKShapeNode(circleOfRadius: 15)
X.position = CGPointMake(100 , 100)
X.fillColor = SKColor.yellowColor()
X.physicsBody = SKPhysicsBody(circleOfRadius: coin.frame.width/2)
X.physicsBody?.dynamic = true
X.physicsBody?.linearDamping = 1
X.physicsBody?.affectedByGravity = false
X.physicsBody?.categoryBitMask = coincategory
X.physicsBody?.contactTestBitMask = coincategory
self.addChild(coin)
现在我的第二个 SKShapeNode,让我们称他为 Y 有点棘手,出于我的游戏原因,我需要他的尺寸是动态的,所以这就是我所做的并且它正在工作,首先,在 didSimulatePhysics() 中声明了他 像这样:
override func didSimulatePhysics() {
let pixel = self.childNodeWithName(X.name!)
var pathtodraw : CGMutablePathRef!
pathtodraw = CGPathCreateMutable()
CGPathMoveToPoint(pathtodraw, nil , pixel!.position.x, pixel!.position.y)
CGPathAddLineToPoint(pathtodraw, nil, 0, 0)
CGPathCloseSubpath(pathtodraw)
Y.path = pathtodraw
self.addChild(Y)
{
而且为了让他的大小是动态的(游戏包括 X 的移动),我每次都在 update 方法中删除他,以便路径可以保持更新:
override func update(currentTime: NSTimeInterval) {
Y.removeFromParent()
}
我想要实现的目标:每次对象 X 越过 Y println(“他们只是互相通过”),我不希望他们对接触做出反应,或者相互反弹,他们应该对每个人都不可见其他,但我需要检测它们何时相互通过。
问题是什么:当我将 Physics 添加到 Y 时,节点会删除他 self ,他会不断生成更多节点并用他自己填充屏幕。如果按照上面的方式保留它,它可以完美地工作,它会删除他自己并更新大小并始终只保留 1 个节点。 这是尝试添加到 Y 的内容:
override func didSimulatePhysics() {
let pixel = self.childNodeWithName(X.name!)
var pathtodraw : CGMutablePathRef!
pathtodraw = CGPathCreateMutable()
CGPathMoveToPoint(pathtodraw, nil , pixel!.position.x, pixel!.position.y)
CGPathAddLineToPoint(pathtodraw, nil, 0, 0)
CGPathCloseSubpath(pathtodraw)
Y.path = pathtodraw
self.addChild(Y)
**linenode = SKShapeNode(path: pathtodraw)
linenode.physicsBody = SKPhysicsBody(edgeChainFromPath: pathtodraw)**
{
It Keep 会生成很多节点并删除它们。知道我能做些什么来做到这一点吗?谢谢大家!
【问题讨论】:
标签: ios sprite-kit collision skphysicsbody