它可能看起来很长但是大部分都是相同的代码: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的移动),我每次都在更新方法中移除他,以便路径可以自行更新:
override func update(currentTime: NSTimeInterval) {
Y.removeFromParent()
}
我想要实现的目标:每次物体X越过Y println(“它们刚刚相互传递”),我不希望它们对接触做出反应,或者彼此反弹,它们应该对每个看不见另外,但我需要检测它们何时相互通过。
问题是什么:当我将物理学添加到Y时,节点必须删除他自己,他不断生成更多节点并自己填充屏幕。如果它保持在上面的方式,它完美地工作,它删除他自己并更新大小并始终保持它只有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会生成很多节点并且会删除它们。知道我能做些什么才能做到这一点?谢谢你们!
答案 0 :(得分:0)
由于可以在不从场景中删除节点的情况下更新形状节点的路径,然后将其添加回来,我建议您将Y
添加到didMoveToView
中的场景并删除addToChild
以及removeFromParent
和didSimulatePhysics
方法中的update
。此外,将物理主体添加到Y
,而不是创建新的形状节点。最后,您正在创建X
,然后将coin
添加到场景中。