如果它在另一个类中,如何访问变量的属性?

时间:2016-02-14 01:38:58

标签: swift sprite-kit

基本上,我有一个名为GameScene的SKScene类。在GameScene中,我有一个名为playableArea的变量,它根据用户手机的大小计算。

我有一个需要知道playableArea宽度的敌人类,然后根据playableArea的宽度使用该值通过SKAction移动到x位置。

这是我的班级(简化版):

(?<!\/)

敌人的鱼需要移动到屏幕的另一个大小,但屏幕的大小取决于用户使用的设备的大小,所以我需要将屏幕的宽度传递给moveToX动作这发生在init调用中。但我得到错误“实例成员'宽度'不能用于'PacuPiranha'类型。”

如何获取来自GameScene类的变量的宽度,这是创建敌人的新对象的位置?

class PacuPiranha: Fish {

    static var s = SKSpriteNode(imageNamed: "PacuPiranha1")
    var width: CGFloat = 0

    struct SharedAssets {
        static var move: SKAction!
        static var token: dispatch_once_t = 0
     }


    init(position: CGPoint, width: CGFloat) {
        self.width = width
    }

    override class func preloadAssets() -> SKTexture? {

        dispatch_once(&SharedAssets.token, {

            SharedAssets.move = SKAction.sequence([SKAction.moveToX(width + s.size.width, duration: 2.5), SKAction.removeFromParent()])
            return SharedAssets.texture
        }
    }
}

我也尝试在这样的敌人类中创建一个新函数:

let fish = PacuPiranha(position: CGPoint(...), width: playableArea.size.width)

然后在moveToX中使用getWidth(),但这不起作用,因为它要求类型为self的参数:PacuPiranha。

2 个答案:

答案 0 :(得分:0)

检索屏幕尺寸

您可以使用此代码获取屏幕尺寸

let screenSize = UIScreen.mainScreen().bounds.size

我的观点

我认为你的代码过于复杂。 如果PacuPiranhaSKSpriteNode的{​​{1}}的子类,会不会更容易?

最后,你真的需要所有代码来预加载资源吗? SpriteKit非常擅长管理资源,除非你的游戏特别需要自定义方法,否则你应该让它工作。

更新

IF GameScene是添加到SKScene的PacuPiranha子类(应该是),您可以使用此代码来获取当前的大小图。

SKSpriteNode

答案 1 :(得分:0)

UIScreen.mainScreen().bounds.size.width * UIScreen.mainScreen().scale将为您提供屏幕宽度(以像素为单位)。