问题描述
这是一个使用 SpriteKit 的 Swift 国际象棋游戏。
我希望发生的是触摸的棋子移动到下一次触摸时触摸的方块。当我跑步时,当我尝试这个时,它不会移动。我确信我的代码适用于并包括 'case: "p"',并且精灵正在检测第一次触摸。
在图片中,我尝试使用“touch2”实现第二次触摸,这是正确的做法吗?谢谢。
这就是我检测第一次触摸并识别被触摸的部分的方式。 touchedPiece
是识别的片段。 moveset
是决定可能移动的属性。
for touch in touches
{
let location = touch.location(in:self)
let firstTouchednode = atPoint(location)
let touchedPiece:SKSpriteNode = (firstTouchednode as? SKSpriteNode)!
switch touchedPiece.moveset {
case "p":
let locationToMove = touch.location(in:self)
let moveto = findpawnmoves(piece: touchedPiece)
spawnMoves(arr: moveto)
这是在 locationToMove
决定后移动棋子的尝试。
if moveto[0].contains(locationToMove){
move(piece: touchedPiece,location: moveto[0].position)
whiteMoved = true
deleteMoves(arr: moveto)
这是我如何创建要移动到的可能方块数组的示例。我会用骑士招式,因为它最简洁。
func createMoveNode(piece: SKSpriteNode,up:Int,across:Int) -> SKSpriteNode{
let moveNode = SKSpriteNode(color: .clear,size: CGSize(width: CGFloat(cellsize),height: CGFloat(cellsize)))
moveNode.anchorPoint = CGPoint(x:0.5,y:0.5)
moveNode.position = CGPoint(x: piece.position.x + CGFloat(Double(across)*d),y: piece.position.y + CGFloat(Double(up)*d))
return moveNode
}
func findknightmoves(piece: SKSpriteNode) -> Array<SKSpriteNode>{
let move1 = createMoveNode(piece: piece,up:2,across:-1)
let move2 = createMoveNode(piece: piece,across:1)
let move3 = createMoveNode(piece: piece,up:-2,across:-1)
let move4 = createMoveNode(piece: piece,across:1)
return [move1,move2,move3,move4]
}
func move(piece: SKSpriteNode,location: CGPoint){
piece.position = location
}
func spawnMoves(arr: Array<SKSpriteNode>){
for i in 0...arr.count-1{
arr[i].zPosition = 1
self.addChild(arr[i])
}
}
func deleteMoves(arr: Array<SKSpriteNode>){
for i in 0...arr.count-1{
arr[i].removeFromParent()
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)