我使用多维数组创建了对象。
当我尝试移动生成的物体时,最后一块是移动的。我怎么能完全移动形成的形状?
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)
}
}
}
答案 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 。