>

아래 코드에 문제가 있습니다. 필자가 누르는 노드 이름의 마지막 문자가 절실히 필요합니다.

이 작업을 수행하려면 터치 포인트와 위치를 공유하는 노드를 찾을 때까지 장면의 모든 하위 노드를 반복합니다.

내가 그것을 발견하면, 나는 보호 진술을 사용한다 :

let nodeName = node.name
            guard let letter = nodeName?.last else { return }

문자를 찾으려면, 노드 이름에서 마지막 문자를 가져 오려고 할 때 nil을 발견하므로 컴파일러는 함수를 계속 실행하지 않습니다.

초보자 인 나와 나와 코드를 작성해 주셔서 감사합니다

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    guard let touch = touches.first else { return }
    let touchPosition = touch.location(in: self)
    guard let scene = scene else { return }
    for node in scene.children {
        if node.frame.contains(touchPosition) && node.name != "background" {
            let nodeName = node.name
            guard let letter = nodeName?.last else { return }
            handleGuess(letter: letter)
            node.removeFromParent()
            if !(lettersToGuess?.contains(letter))! && letter != "1" && letter != "0" {
                currentStep += 1
            } else if letter == "1" {
            } else if letter == "2" {
            } else if letter == "3" {
            } else if letter == "4" {
            }
        }
    }
}
func setupMenu() {      
    // Load Background and place background image
    let backgroundTexture = SKTexture(imageNamed: "menuBG")
    background.texture = backgroundTexture
    background.zPosition = -1
    background.position = CGPoint(x: frame.midX * 0.25, y: frame.midY)
    let bgSizeFactor = backgroundTexture.size().height / frame.size.height
    background.size = CGSize(width: backgroundTexture.size().width / bgSizeFactor , height: frame.size.height)
    addChild(background)
    animateBackground()
    setupRain()
    // TODO: Add Button center screen displaying current level, clicking this will start a new game.
    let playTexture = SKTexture(imageNamed: "playButton")
    let playButton = SKSpriteNode(texture: playTexture)
    playButton.name = "playbutton2"
    let playButtonFactor = playTexture.size().width / frame.size.width
    playButton.size = CGSize(width: frame.size.width * 0.65, height: (playTexture.size().height / playButtonFactor) * 0.65)
    playButton.position = CGPoint(x: frame.midX, y: frame.midY)
    playButton.zPosition = 1
    addChild(playButton)
    let rateTexture = SKTexture(imageNamed: "rateButton")
    let rateButton = SKSpriteNode(texture: rateTexture)
    rateButton.name = "rateButton3"
    rateButton.size = CGSize(width: playButton.size.height * 0.85, height: playButton.size.height * 0.85)
    rateButton.position = CGPoint(x: frame.midX, y: frame.midY - playButton.size.height)
    rateButton.zPosition = 1
    addChild(rateButton)
    let noAdsTexture = SKTexture(imageNamed: "noAdsButton")
    let noAdsButton = SKSpriteNode(texture: noAdsTexture)
    noAdsButton.name = "noAdsButton4"
    noAdsButton.size = CGSize(width: playButton.size.height * 0.85, height: playButton.size.height * 0.85)
    noAdsButton.position = CGPoint(x: frame.midX - playButton.size.height, y: frame.midY - playButton.size.height)
    noAdsButton.zPosition = 1
    addChild(noAdsButton)
    let zapTexture = SKTexture(imageNamed: "zapButton")
    let zapButton = SKSpriteNode(texture: zapTexture)
    zapButton.name = "zapButton5"
    zapButton.size = CGSize(width: playButton.size.height * 0.85, height: playButton.size.height * 0.85)
    zapButton.position = CGPoint(x: frame.midX + playButton.size.height, y: frame.midY - playButton.size.height)
    zapButton.zPosition = 1
    addChild(zapButton)
}

  • 답변 # 1

    아래 줄이 문제라고 생각합니다

    guard let letter = nodeName?.last else { return }
    
    

    여기서 for 루프를 중단하고 메소드에서 리턴합니다. 대신 아래로 바꾸십시오.

    guard let letter = nodeName?.last else { continue }
    
    

    현재 노드에서 문자가 nil이면 위의 루프를 계속합니다.

  • 이전 Angular 2+에 대한 검도 스파크 라인의 막대 색상을 변경하는 방법
  • 다음 javascript - 반응 네이티브 파이어베이스는 async/await를 사용하여 키 배열을 얻습니다