基本上,我有一个名为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。
答案 0 :(得分:0)
您可以使用此代码获取屏幕尺寸
let screenSize = UIScreen.mainScreen().bounds.size
我认为你的代码过于复杂。
如果PacuPiranha
是SKSpriteNode
的{{1}}的子类,会不会更容易?
最后,你真的需要所有代码来预加载资源吗? SpriteKit非常擅长管理资源,除非你的游戏特别需要自定义方法,否则你应该让它工作。
IF GameScene
是添加到SKScene的PacuPiranha
子类(应该是),您可以使用此代码来获取当前的大小图。
SKSpriteNode
答案 1 :(得分:0)
UIScreen.mainScreen().bounds.size.width * UIScreen.mainScreen().scale
将为您提供屏幕宽度(以像素为单位)。