Я пишу игру SpriteKit и получаю сообщение "Элемент экземпляра minX не может использоваться для типа" CGRect"

У меня проблемы с исправлением этого сообщения об ошибках CGRect.minX/Y и CGRect.MaxX/Y. "Элемент экземпляра minX не может использоваться для типа" CGRect"- ошибка. Что я мог сделать, чтобы это исправить?

func spawnNewDisc(){

    var randomImageNumber = arc4random()%4
    randomImageNumber += 1

    let CheeseBlock = SKSpriteNode(imageNamed: "CheeseBlock\(randomImageNumber)")
    CheeseBlock.zPosition = 2
    CheeseBlock.name = "CheeseObject"

    let randomX = random(min: CGRect.minX(gameArea) + CheeseBlock.size.width/2,
                         max: CGRect.maxX(gameArea) - CheeseBlock.size.width/2)

    let randomY = random(min: CGRect.minY(gameArea) + CheeseBlock.size.height/2,
                         max: CGRect.maxY(gameArea) - CheeseBlock.size.height/2)

    CheeseBlock.position = CGPoint(x: randomX, y: randomY)
    self.addChild(CheeseBlock)

}

1 ответ

Решение

minX, maxX, и т. д. являются свойствами экземпляра, что означает, что они должны быть вызваны на CGRect экземпляр, а не сам тип.

+ Изменить

CGRect.minX(gameArea)

в

gameArea.minX

Дополнительное примечание: в Swift (и других языках также важно) понимать разницу между типами и экземплярами. В Swift принято называть типы, начинающиеся с заглавных букв, и экземпляры, начинающиеся со строчных букв.

Ваша строка кода

let CheeseBlock = SKSpriteNode(imageNamed: "CheeseBlock\(randomImageNumber)")

следует изменить на

let cheeseBlock = SKSpriteNode(imageNamed: "CheeseBlock\(randomImageNumber)")

Это упрощает определение того, какие переменные являются типами, а какие - экземплярами.

Другие вопросы по тегам