我可以移动整个物体吗?

时间:2018-01-15 08:42:54

标签: swift xcode sprite-kit swift4

我使用多维数组创建了对象。

当我尝试移动生成的物体时,最后一块是移动的。我怎么能完全移动形成的形状?

enter image description here

enter image description here

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    for touch: AnyObject in touches{

            let location = touch.location(in: self)
            square.position.x = location.x
            square.position.y = location.y
    }
}

移动代码:

我用下面的代码在屏幕上打印它们:

for row in 0..<t.bitmap.count {
        for col in 0..<t.bitmap[row].count {
            if t.bitmap[row][col] > 0 {
                let block = t.bitmap[row][col]

                square = SKSpriteNode(color: colors[block], size: CGSize(width: blockSize, height: blockSize))
                square.anchorPoint = CGPoint(x: 1.0, y: 0)
                square.position = CGPoint(x: col * Int(blockSize) + col, y: -row * Int(blockSize) + -row)
                square.position.x += location.x
                square.position.y += location.y
                self.addChild(square)

            }
        }
    }

1 个答案:

答案 0 :(得分:0)

目前还不清楚你究竟在问什么,大图像和遗漏代码没有帮助。但是,您似乎使用以下内容移动单个块

square.position.x = location.x
square.position.y = location.y

并且您希望以相同的相对数量移动所有块。您可以通过以下两行来实现这一点,首先计算每个方向的相对数量:

let deltaX = location.x - square.position.x
let deltaY = location.y - square.position.y

然后调用一个函数移动所有块:

 moveAllBlocks(deltaX, deltaY)

此例程需要通过添加增量来迭代更新其position的所有块。

HTH

<强>附录

回应评论

  

我说英语不好,抱歉。例子没有解决问题。是的,我想移动所有街区。

让我们尝试一些示例值,看看是否有帮助,这将是伪代码 - 你需要理解算法,然后在你的代码中实现。

假设您有一个8x8网格和多个图块,每个图块都作为一个位置(row,col)。我们将考虑当前位于(2,3)的一个图块。

触摸事件会告诉您将此图块移动到(5,1)。您目前正在通过分配到磁贴位置来实现移动:

tile.location = (5, 1)

然后面临移动其他图块的问题,以便它们与您移动的图块保持相同的相对位置。

解决方案是首先找出移动第一个图块的相对距离,而不是仅仅分配其新的绝对位置,我们通过获取新旧位置之间的差异来做到这一点: / p>

delta = newLocation - tile.location
      = (2, 3) - (5, 1)
      = (3, -2)

现在你有相对数量,(3,-2)来移动磁贴你可以移动所有磁贴相同的相对数量,它们将会保持彼此相同的关系。要做到这一点,你迭代(循环)所有的瓷砖,用 delta 金额改变每个瓷砖的位置,(3,-2),即你添加 3 < / em>到行并从列中减去 2