2014-10-04 58 views
0

好的。这段代码让我疯狂。它只是不起作用。我收到的唯一消息是“试图添加一个已经有父母的SKNode”。是的,我知道这里已经有过一些讨论,但是他们都没有提供我需要的解决方案。试图添加一个已经有父母的SKNode - Swift

这是代码。我非常感谢任何帮助。

import SpriteKit 

class MyScene: SKScene { 

    let intervalShapeCreation:NSTimeInterval = 2.0 // Interval for creating the next Shape 
    let gravitationalAcceleration:CGFloat = -0.5 // The gravitational Y acceleration 

    let shapeSequenceAction = SKAction.sequence([ 
    SKAction.scaleTo(1.0, duration: 0.5), 
    SKAction.waitForDuration(2.0), 
    SKAction.scaleTo(0, duration: 0.5), 
    SKAction.removeFromParent() 
    ]) 

    override init(size: CGSize) { 
    super.init(size: size) 
    } 

    required init(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    } 

    override func didMoveToView(view: SKView) { 
    super.didMoveToView(view) 
    addBackground() 
    initializeScene() 
    } 

    // MARK: Level Building 
    func initializeScene() { 
    self.physicsWorld.gravity = CGVectorMake(0.0, gravitationalAcceleration) 
    runAction(SKAction.repeatActionForever(
     SKAction.sequence([SKAction.runBlock(self.createShape), 
     SKAction.waitForDuration(intervalShapeCreation)]))) 
    } 

    func addBackground() { 
    let backgroundAtlas = SKTextureAtlas(named: "background") 
    let background = SKSpriteNode(texture: backgroundAtlas.textureNamed("background")) 
    background.position = CGPoint(x: size.width/2, y: size.height/2) 
    background.anchorPoint = CGPointMake(0.5, 0.5) 
    background.zPosition = -1 
    background.name = "background" 
    self.addChild(background) 
    } 

    func createShape() { 
    let newShape = sSharedAllPossibleShapes[0] 
    print("\n shape creada: \(newShape.name)") 
    newShape.position = CGPointMake(size.width/2, CGFloat(Int.random(fromZeroToMax: 500))) 
    self.addChild(newShape) 
    newShape.runAction(shapeSequenceAction) 
    } 

} 
+0

你能解释一下“不行”吗?请尝试阐明预期的行为。 – tjameson 2014-10-04 00:36:11

+0

好的。它必须做的是在屏幕上以相同的x位置和随机的y位置显示一些图形。这种形状必须持续2秒,然后消失并移除。它可以创建第一个没有问题,但其余停止与“试图添加一个已经有父母的SKNode”相同的不方便。 – 2014-10-04 00:49:57

回答

1

createShape实际上并不创建SKShapeNode。它从sSharedAllPossibleShapes数组获得第一个形状,然后将其作为子代添加到自身。第二次调用此方法时,该形状已具有父级,并且不能再次添加。

您必须创建SKShapeNode的新实例。我看到它的方式确实需要包含定义形状的CGPath对象,而不是节点本身,因为您无法按照您的意图重用节点。

+0

好的。 sSharedAllPossibleShapes是一个包含游戏中使用的所有可能形状的数组。每个形状都是SKSpriteNode的一个子类,我想要的是避免每次都创建相同的可能形状,而是从数组中拉取它们。这不可能吗?如果不是,你能向我推荐代码吗?我真的不明白你提到的CGPath是什么。 – 2014-10-04 14:57:56

+0

然后,您需要使用相同的纹理创建多个形状。精灵实例之间共享相同的纹理。 – LearnCocos2D 2014-10-04 16:37:40

相关问题