微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我如何处理由于先前触摸而导致的触摸? 斯威夫特,SpriteKit

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