홈>
아래 코드에 문제가 있습니다. 필자가 누르는 노드 이름의 마지막 문자가 절실히 필요합니다.
이 작업을 수행하려면 터치 포인트와 위치를 공유하는 노드를 찾을 때까지 장면의 모든 하위 노드를 반복합니다.
내가 그것을 발견하면, 나는 보호 진술을 사용한다 :
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
관련 질문
- ios : Swift의 MainMenuScene에서 전환한 후 GameScene이 올바르게 표시되지 않습니다.
- ios : Swift를 사용하여 Gameboy 게임 만들기
- ios : SpriteKit 자식 노드(이름: 문자열 포함)는 nil을 반환합니다.
- ios : spriteKit을 사용하여 신속하게 원을 그리는 방법은 무엇입니까?
- ios : ARKit의 ChromaKey 비디오
- swift : SKShapeNode에서 그라디언트를 그리는 방법은 무엇입니까?
- ios : SpriteKit 프레임 주기에서 터치 이벤트는 언제 호출됩니까?
- swift : SKPhysicsContact가 접촉 후 적을 제거하지 않습니다.
- 원의 피라미드 만들기 -SwiftUI
- swift : 스레드 1: 스프라이트킷에서 신호 SIGABRT/sigterm
아래 줄이 문제라고 생각합니다
여기서 for 루프를 중단하고 메소드에서 리턴합니다. 대신 아래로 바꾸십시오.
현재 노드에서 문자가 nil이면 위의 루프를 계속합니다.