상자를 만들고 싶습니다. 상자에 맞으면 상자가 나오고 사라집니다.Spritekit - NSException 유형의 캐치되지 않는 예외로 종료합니다.
함수에서 하나의 상자를 만들어서 만들 수 있습니다. 하지만 for 루프로 여러 상자를 만드는 함수를 만들면 앱이 다운됩니다. 함수 내에서 SpriteKitNode 변수를 만들면 상자가 올바르게 표시되지만 글 머리 기호를 사용하여 상자를 숨길 때 사라지지 않습니다. 자, 함수 밖에서 변수를 만들고, 내가 프로젝트를 실행할 때 응용 프로그램이 중단됩니다.
import SpriteKit
struct PhysicsCategory {
static let Enemy : UInt32 = 1
static let Bullet : UInt32 = 2
}
class GameScene: SKScene, SKPhysicsContactDelegate {
var mainAnimation = SKSpriteNode(imageNamed: "Spaceship")
var squareAnimation = SKSpriteNode(imageNamed: "Squares")
override func didMove(to view: SKView) {
physicsWorld.contactDelegate = self
makeBanners()
spaceshipPosition()
makeSquares(numberOfSquaresInRow: 5, numberOfRows: 4, squareRadius: 5, rowSpacing: 40, yStart: 120)
}
내가 오류를 가정하는 기능은 물론
func makeSquares (numberOfSquaresInRow: Int, numberOfRows: Int, squareRadius: CGFloat, rowSpacing: CGFloat, yStart: CGFloat) {
for rowNumber in 0...(numberOfRows - 1) {
let squareSpacing = (self.frame.size.width - (CGFloat(numberOfSquaresInRow) * squareRadius * 2))/CGFloat(numberOfSquaresInRow + 1)
var extraSpacing = CGFloat(0)
if rowNumber % 2 == 1 {
extraSpacing = squareSpacing/2
}
for squareNumber in 0...(numberOfSquaresInRow - 1) {
squareAnimation.size = CGSize(width: 30, height: 30)
let xPosition : CGFloat = extraSpacing + squareSpacing + squareRadius + (squareRadius * 2 * CGFloat(squareNumber)) + (squareSpacing * CGFloat(squareNumber))
let yPosition : CGFloat = yStart + (CGFloat(rowNumber) * squareSpacing)
squareAnimation.position = CGPoint(x: xPosition, y: yPosition)
squareAnimation.physicsBody = SKPhysicsBody(circleOfRadius: squareRadius)
squareAnimation.physicsBody?.categoryBitMask = PhysicsCategory.Enemy
squareAnimation.physicsBody?.contactTestBitMask = PhysicsCategory.Bullet
squareAnimation.physicsBody?.affectedByGravity = false
squareAnimation.physicsBody?.isDynamic = false
self.addChild(squareAnimation)
}
}
}
이며, 이것은 모든 코드가 아닙니다. 더 필요한 게 있으면 알려줘. 당신과 같은 오류 만날 때
for 루프 바로 뒤에 self.addChild (squareAnimation)를 넣으면 4 개의 박스가 생깁니다. 더 나은 -하지만 있어야합니다 12 – jonask
더 많은 상자를 얻으려면 코드를 리팩토링해야합니다 –
@jonask for 루프 외부에서 addChild를 이동한다고 가정하지 않았 으면 새 정사각형 스프라이트를 첫 행으로 사용한다고 가정했습니다. 고리. 바로 지금 squareAnimation이 글로벌 인 것처럼 보입니다. 이것은 오류로 볼 수있는 것처럼 매우 위험합니다. – Knight0fDragon