2014-08-28 69 views
0

文件GameScene上課GameScene,類GameScene有CirclePhysicsDefault:我如何在場景中放置對象? SpriteKit

func circlePhysicsDefault() { 
var Circle = SKShapeNode(circleOfRadius: 40) 
Circle.position = CGPointMake(500, 500) 
Circle.name = "defaultCircle" 
Circle.strokeColor = SKColor.blackColor() 
Circle.glowWidth = 10.0 
Circle.fillColor = SKColor.yellowColor() 
Circle.physicsBody = SKPhysicsBody(circleOfRadius: 40) 
Circle.physicsBody.dynamic = true 
self.addChild(Circle) 
} 

在文件GameViewController I型:

@IBAction func addOneCircle(sender: AnyObject) { 
GameScene().circlePhysicsDefault() 
} 

我聯繫這按鈕。

運行應用程序,按下按鈕 - 沒有任何反應。

如果在GameScene函數didMoveToView中我調用函數circlePhysicsDefault,那麼將放置應用程序啓動圓。

文件GameViewController:

import UIKit 
import SpriteKit 

class GameViewController: UIViewController { 

override func viewDidLoad() { 
super.viewDidLoad() 

/* Pick a size for the scene */ 
let scene = GameScene(fileNamed:"GameScene") 
// Configure the view. 
let skView = self.view as SKView 
skView.showsFPS = true 
skView.showsNodeCount = true 

/* Sprite Kit applies additional optimizations to improve rendering performance */ 
skView.ignoresSiblingOrder = true 

/* Set the scale mode to scale to fit the window */ 
scene.scaleMode = .AspectFill 

skView.presentScene(scene) 
} 

@IBAction func addOneCircle(sender: AnyObject) { 
GameScene(fileNamed:"GameScene").circlePhysicsDefault() 
} 

override func shouldAutorotate() -> Bool { 
return true 
} 

override func supportedInterfaceOrientations() -> Int { 
if UIDevice.currentDevice().userInterfaceIdiom == .Phone { 
return Int(UIInterfaceOrientationMask.AllButUpsideDown.toRaw()) 
} else { 
return Int(UIInterfaceOrientationMask.All.toRaw()) 
} 
} 

override func didReceiveMemoryWarning() { 
super.didReceiveMemoryWarning() 
// Release any cached data, images, etc that aren't in use. 
} 
override func prefersStatusBarHidden() -> Bool { 
return false } 
} 

文件GameScene:

import SpriteKit 

class GameScene: SKScene { 
    override func didMoveToView(view: SKView) { 
     /* Setup your scene here */ 

     circlePhysicsDefault() 
    } 

    override func update(currentTime: CFTimeInterval) { 
     /* Called before each frame is rendered */ 
    } 

    func sceneSetting() { 
     self.backgroundColor = SKColor.grayColor() 
     self.physicsWorld.gravity = CGVectorMake(0.01, -2) 
     } 
    func circlePhysicsDefault() { 
     var Circle = SKShapeNode(circleOfRadius: 40) 
     Circle.position = CGPointMake(500, 500) 
     Circle.name = "defaultCircle" 
     Circle.strokeColor = SKColor.blackColor() 
     Circle.glowWidth = 10.0 
     Circle.fillColor = SKColor.yellowColor() 
     Circle.physicsBody = SKPhysicsBody(circleOfRadius: 40) 
     Circle.physicsBody.dynamic = true 
     self.addChild(Circle) 
    } 
} 

回答

0

你正在創建按鍵的新實例,存儲弱引用到現場,並調用從希望實例的方法。

@IBAction func addOneCircle(sender: AnyObject) { 
myGameSceneRef.circlePhysicsDefault() 
} 

所以,現在,請嘗試以下方法:

@IBAction func addOneCircle(sender: AnyObject) { 
    let scene = ((self.view as SKScene).scene as GameScene) 
    scene.circlePhysicsDefault() 
} 

或者,也許改變 「讓」 到 「VAR」

+0

不幸的是,什麼也沒發生:(你能給出一個更詳細的回答,請 – 2014-08-28 12:14:55

+0

?我將在swift中重新創建它並在幾分鐘內向您發送示例代碼 – Zeto 2014-08-28 14:32:58

+0

Btw。您爲什麼使用let作爲場景?是否讓不可變對象變爲可變 – Zeto 2014-08-28 14:35:46