다섯 가지 다른 장애물이있는 게임을 만들려고합니다. 그 중 하나는 매 초마다 무작위로 선택되고 화면 상단에서 화면 하단으로 이동합니다. 이렇게하면 플레이어가 탐색 할 수있는 장애물이 생깁니다. 나는 화면 아래로 첫 번째 장애물 이동을 할 수 있었지만, 화면을 두 번째로 내려 오는 대신, 스레드 1을 계속 유지합니다. 문제를 해결하려고 시도 함에도 불구하고 신호 SIGABRT 오류가 계속 발생합니다. 여기 SWIFT : 5 개의 장애물 중 하나를 무작위로 선택하고 그에 대한 조치를 실행하고 매초이 프로세스를 반복하는 방법은 무엇입니까?
내 코드입니다 :func randomize() {
smallMiddleObstacle.size = CGSizeMake(self.frame.width - 180, obstacleHeight)
smallMiddleObstacle.position = CGPointMake(self.frame.width/2, self.frame.height + smallMiddleObstacle.frame.height/4)
smallMiddleObstacle.color = UIColor.blueColor()
bigMiddleObstacle.size = CGSizeMake(self.frame.width - 100, obstacleHeight)
bigMiddleObstacle.position = CGPointMake(self.frame.width/2, self.frame.height + bigMiddleObstacle.frame.height/4)
bigMiddleObstacle.color = UIColor.blueColor()
rightObstacle.size = CGSizeMake(self.frame.width * 1.4, obstacleHeight)
rightObstacle.position = CGPointMake(self.frame.width, self.frame.height + rightObstacle.frame.height/4)
rightObstacle.color = UIColor.blueColor()
leftObstacle.size = CGSizeMake(self.frame.width * 1.4, obstacleHeight)
leftObstacle.position = CGPointMake(0, self.frame.height + leftObstacle.frame.height/4)
leftObstacle.color = UIColor.blueColor()
rightObstacleInPair.size = CGSizeMake(self.frame.width * 0.7, obstacleHeight)
rightObstacleInPair.position.x = self.frame.width
rightObstacleInPair.color = UIColor.blueColor()
obstaclePair.addChild(rightObstacleInPair)
leftObstacleInPair.size = CGSizeMake(self.frame.width * 0.7, obstacleHeight)
leftObstacleInPair.position.x = 0
leftObstacleInPair.color = UIColor.blueColor()
obstaclePair.addChild(leftObstacleInPair)
obstaclePair.position.y = self.frame.height + obstaclePair.frame.height/4
let distance = CGFloat(self.frame.height + obstacleHeight)
let move = SKAction.moveByX(0, y: -distance, duration: NSTimeInterval(0.005 * distance))
let remove = SKAction.removeFromParent()
moveAndRemove = SKAction.sequence([move, remove])
let random = Int(arc4random_uniform(4))
if random == 0 {
addChild(smallMiddleObstacle)
smallMiddleObstacle.runAction(moveAndRemove)
} else if random == 1 {
addChild(bigMiddleObstacle)
bigMiddleObstacle.runAction(moveAndRemove)
} else if random == 2 {
addChild(rightObstacle)
rightObstacle.runAction(moveAndRemove)
} else if random == 3 {
addChild(leftObstacle)
leftObstacle.runAction(moveAndRemove)
} else {
addChild(obstaclePair)
obstaclePair.runAction(moveAndRemove)
}
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
if !isGameStarted {
isGameStarted = true
let spawn = SKAction.runBlock({
() in
self.randomize()
})
let delay = SKAction.waitForDuration(1.5)
let spawnDelay = SKAction.sequence([spawn, delay])
let spawnDelayForever = SKAction.repeatActionForever(spawnDelay)
self.runAction(spawnDelayForever)
}
}
감사
코드, 어떤 라인 오류입니까? – Feldur
나는 시뮬레이터를 잘 시작할 수 있지만 대략 1.5 초 후에 시뮬레이터가 충돌하고 디버거에서 나에게 다음 메시지를 준다 : 캐치되지 않은 예외 'NSInvalidArgumentException'으로 인해 앱 종료 중, 이유 : '이미 부모가있는 SKNode를 추가하려고 시도 함 : < SKSpriteNode> 이름 : '(null)'텍스처 : [ 'nil'] 위치 : {414, 0} 눈금 : {1.00, 1.00} 크기 : {289.79998779296875, 50} 앵커 : {0.5, 0.5} 회전 각도 : 0.00 ' – Aidan
Can 오류를 만드는 코드 행을 식별합니까? – Feldur