【问题标题】:Place object in scene, SpriteKit在场景中放置对象,SpriteKit
【发布时间】:2014-08-27 20:56:36
【问题描述】:

文件GameScene有类GameScene,类GameScene有CirclePhysicsDefault:

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 我输入:

@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 }
}

文件游戏场景:

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)
    }
}

【问题讨论】:

    标签: xcode swift


    【解决方案1】:

    您按下按钮的方法:

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

    不会对您之前创建的场景做任何事情。从另一个 GameScene 类对象调用的方法 circlePhysicsDefault()。这就是为什么你的场景中没有物体。要解决此问题,您可以存储指向您的场景对象的指针并使用它调用方法。

    在这种情况下,您的 GameViewController 将如下所示:

    class GameViewController: UIViewController {
    
        var myScene: GameScene?
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            let scene = GameScene(fileNamed:"GameScene")
    
            self.myScene = scene
    
            let skView = self.view as SKView
            skView.showsFPS = true
            skView.showsNodeCount = true
            skView.ignoresSiblingOrder = true
            scene.scaleMode = .AspectFill
    
            skView.presentScene(scene)
        }
    
        @IBAction func addOneCircle(sender: AnyObject) {
            if self.myScene != nil {
                self.myScene!.circlePhysicsDefault()
            }
        }
    .......
    .......
    .......
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多