访问在特定方法中声明的 SKSpriteNode
accessing an SKSpriteNode declared inside a specific method
在我的 GameScene class 中,我有一个名为 shootLaser 的方法,它创建一个名为 Laser 的 SKSpriteNode,并将其添加为 self 的子节点。每隔几秒在计时器上调用此方法
func shootLaser(){
var Laser = SKSpriteNode(imageNamed: "LaserDot.png")
Laser.position = CGPointMake(100, 100)
Laser.physicsBody = SKPhysicsBody(circleOfRadius: 20)
Laser.physicsBody?.categoryBitMask = PhysicsCatagory.Laser
Laser.physicsBody?.contactTestBitMask = PhysicsCatagory.Blade
Laser.physicsBody?.affectedByGravity = false
Laser.physicsBody?.dynamic = false
Laser.physicsBody?.density = 0.5
self.addChild(Laser)
}
在每次渲染一帧时自动调用的 update() 方法中,我尝试访问 Laser 对象的位置,但是当我尝试设置 laserLoc 时出现错误 "Use of unresolved identifier 'Laser'"至 Laser.position
override func update(currentTime: CFTimeInterval)
{
/* Called before each frame is rendered */
// moves every value up an index each frame
let laserLoc = Laser.position
if (laserPoints[0] != nil){
for var index = 9; index >= 1; index--
{
laserPoints[index] = laserPoints[index - 1]
}
laserPoints[0] = CGPointZero
}
访问在任何方法外部声明的 SKSpriteNodes 的属性时,我似乎没有任何问题。有没有解决的办法?提前致谢!
编辑:
我知道 "Laser" 在 shootLaser() 方法中纯粹是本地的,但同样,有没有办法可以在更新方法中访问它的属性?
尝试将 Laser
放在 class 声明之后,而不是放在函数中。像这样:
class YourClassName: SKScene {
var Laser = SKSpriteNode(imageNamed: "LaserDot.png")
此外,请确保删除函数内 Laser
的声明并将函数编辑为如下所示。
func shootLaser(){
var Laser = SKSpriteNode(imageNamed: "LaserDot.png")
Laser.position = CGPointMake(100, 100)
Laser.physicsBody = SKPhysicsBody(circleOfRadius: 20)
Laser.physicsBody?.categoryBitMask = PhysicsCatagory.Laser
Laser.physicsBody?.contactTestBitMask = PhysicsCatagory.Blade
Laser.physicsBody?.affectedByGravity = false
Laser.physicsBody?.dynamic = false
Laser.physicsBody?.density = 0.5
self.Laser.removeFromParent()
self.addChild(Laser)
}
在我的 GameScene class 中,我有一个名为 shootLaser 的方法,它创建一个名为 Laser 的 SKSpriteNode,并将其添加为 self 的子节点。每隔几秒在计时器上调用此方法
func shootLaser(){
var Laser = SKSpriteNode(imageNamed: "LaserDot.png")
Laser.position = CGPointMake(100, 100)
Laser.physicsBody = SKPhysicsBody(circleOfRadius: 20)
Laser.physicsBody?.categoryBitMask = PhysicsCatagory.Laser
Laser.physicsBody?.contactTestBitMask = PhysicsCatagory.Blade
Laser.physicsBody?.affectedByGravity = false
Laser.physicsBody?.dynamic = false
Laser.physicsBody?.density = 0.5
self.addChild(Laser)
}
在每次渲染一帧时自动调用的 update() 方法中,我尝试访问 Laser 对象的位置,但是当我尝试设置 laserLoc 时出现错误 "Use of unresolved identifier 'Laser'"至 Laser.position
override func update(currentTime: CFTimeInterval)
{
/* Called before each frame is rendered */
// moves every value up an index each frame
let laserLoc = Laser.position
if (laserPoints[0] != nil){
for var index = 9; index >= 1; index--
{
laserPoints[index] = laserPoints[index - 1]
}
laserPoints[0] = CGPointZero
}
访问在任何方法外部声明的 SKSpriteNodes 的属性时,我似乎没有任何问题。有没有解决的办法?提前致谢!
编辑:
我知道 "Laser" 在 shootLaser() 方法中纯粹是本地的,但同样,有没有办法可以在更新方法中访问它的属性?
尝试将 Laser
放在 class 声明之后,而不是放在函数中。像这样:
class YourClassName: SKScene {
var Laser = SKSpriteNode(imageNamed: "LaserDot.png")
此外,请确保删除函数内 Laser
的声明并将函数编辑为如下所示。
func shootLaser(){
var Laser = SKSpriteNode(imageNamed: "LaserDot.png")
Laser.position = CGPointMake(100, 100)
Laser.physicsBody = SKPhysicsBody(circleOfRadius: 20)
Laser.physicsBody?.categoryBitMask = PhysicsCatagory.Laser
Laser.physicsBody?.contactTestBitMask = PhysicsCatagory.Blade
Laser.physicsBody?.affectedByGravity = false
Laser.physicsBody?.dynamic = false
Laser.physicsBody?.density = 0.5
self.Laser.removeFromParent()
self.addChild(Laser)
}