即使父节点在移动,如何在屏幕上给每个节点相同的起始位置?

Posted

技术标签:

【中文标题】即使父节点在移动,如何在屏幕上给每个节点相同的起始位置?【英文标题】:How to give every node the same start position on the screen even if the parent is moving? 【发布时间】:2018-08-03 10:10:24 【问题描述】:

我正在使用 SpriteKit 开发游戏。我有一个立方体,它是所有其他节点的父节点。如果用户点击屏幕,Node1 开始从屏幕中间落下。在Node1 落在立方体上之后,立方体向下移动了一点。当用户再次点击时,Node2 开始下降,但 Node2 的位置比 Node1 低,因为父节点向下移动。

有没有办法将每个节点的位置设置到屏幕上的某个点而不管父节点在哪里?

父节点:

Cube.setScale(0.85)
Cube.zPosition = 3
Cube.position.x = self.size.width / 2
Cube.physicsBody = SKPhysicsBody(texture: CubeTexture,size: CGSize(width: CubeTexture.size().width * 0.9, height: CubeTexture.size().height * 0.82)) 
    Cube.physicsBody?.isDynamic = false
    Cube.physicsBody?.affectedByGravity = false
    self.addChild(Cube)

子节点:

    node1.setScale(0.95)
    node1.position = CGPoint(x: -350, y: 310)  //<-- I want this position to be a constant value on the screen
    node1.zPosition = 1

    node1.physicsBody = SKPhysicsBody(texture: node1Texture,size: CGSize(width: node1Texture.size().width * 1.1, height: node1Texture.size().height * 0.85)) 
    node1.physicsBody?.isDynamic = true
    node1.physicsBody?.affectedByGravity = false
    node1.physicsBody?.usesPreciseCollisionDetection = true
    node1.physicsBody?.restitution = 0
    Cube.addChild(node1):


    lazy var node2 = node1.copy() as! SKSpriteNode
    lazy var node3 = node1.copy() as! SKSpriteNode
    lazy var node4 = node1.copy() as! SKSpriteNode
    lazy var node5 = node1.copy() as! SKSpriteNode
    lazy var node6 = node1.copy() as! SKSpriteNode
    lazy var node7 = node1.copy() as! SKSpriteNode
    lazy var node8 = node1.copy() as! SKSpriteNode
    lazy var node9 = node1.copy() as! SKSpriteNode
    lazy var node10 = node1.copy() as! SKSpriteNode

每次节点倒下时立方体移动:

  func addMovement3(Cube:SKSpriteNode) 
    var actionArray = [SKAction]()

    actionArray.append(SKAction.moveTo(y: Cube.position.y - 61.8, duration: 0.1))

    Cube.run(SKAction.sequence(actionArray))

【问题讨论】:

【参考方案1】:

您将希望创建或引用多维数据集节点的父节点。不要将节点添加到多维数据集,而是将节点添加为多维数据集的父节点的子节点,当多维数据集向下移动时,节点将能够保持其原点。

【讨论】:

但对于游戏来说,节点必须是立方体的子节点。因为如果立方体移动,孩子会随着立方体移动。如果节点不是立方体的子节点,它就会溜走。 @ekscrypto 但是你刚才说你希望节点有一个静态位置而不是随着立方体移动......你总是可以有一个“空白”节点托管立方体和下降节点并移动那个空白node 当你需要移动立方体和节点时,当你希望下降的节点保持在同一位置时,只移动立方体

以上是关于即使父节点在移动,如何在屏幕上给每个节点相同的起始位置?的主要内容,如果未能解决你的问题,请参考以下文章

XSLT 将具有父节点的节点移动到具有给定属性的每个父节点的兄弟节点中

如何在循环链表中查找循环起始节点?

使用 SpriteKit 如何以随机但一致的速度将精灵节点移动到一个点

Python 神经网络:运行 10 次迭代,但我得到相同的输出

堆排序

js DOM知识总结