【问题标题】:Coding SpriteKit game and I am receiving "Instance member 'minX' cannot be used on type 'CGRect"编码 SpriteKit 游戏,我收到“Instance member 'minX' cannot be used on type 'CGRect”
【发布时间】:2017-10-09 21:11:48
【问题描述】:

我无法通过 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)

}

【问题讨论】:

  • gameArea是什么类型?
  • CGRect。在全球范围内,我有“让 gameArea = CGRect”

标签: swift sprite-kit cgrect cgfloat


【解决方案1】:

minXmaxX 等是实例属性,这意味着它们需要在 CGRect 实例上调用,而不是类型本身。

改变

CGRect.minX(gameArea)

gameArea.minX

旁注:在 Swift(以及其他语言)中理解类型和实例之间的区别很重要。在 Swift 中,约定是命名以大写字母开头的类型和以小写字母开头的实例。

你的代码行

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

应该改为

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

这样更容易区分哪些变量是类型,哪些是实例。

【讨论】:

  • 非常感谢。我什至没有想到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-02
  • 2022-12-02
  • 1970-01-01
  • 2021-06-04
  • 2018-07-28
  • 1970-01-01
  • 2020-09-17
相关资源
最近更新 更多