如何解决我如何处理由于先前触摸而导致的触摸? 斯威夫特,SpriteKit
这是一个使用 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 举报,一经查实,本站将立刻删除。