gpt4 book ai didi

ios - 从 Storyboard图像连接到 SpriteKit 场景

转载 作者:行者123 更新时间:2023-11-30 13:25:21 25 4
gpt4 key购买 nike

我正在为高中编程类(class)创建一个 Swift 项目。我似乎无法解决这个问题,类的其他人似乎也没有任何想法。

首先,我创建了一个新的 Swift 项目,并选择了一种游戏格式。

new project template

然后,我使用一些基本代码为我的游戏制作第一个关卡,这是一个迷宫游戏,其中迷宫根据用户如何倾斜设备而不是球移动。这是我的 GameScene.swift:

import SpriteKit
import CoreMotion

var accelupdateinterval = 0.1
var accelmultiplier = 15.0

class GameScene: SKScene {

let manager = CMMotionManager()

override func didMoveToView(view: SKView) {


manager.startAccelerometerUpdates()
manager.accelerometerUpdateInterval = accelupdateinterval
manager.startAccelerometerUpdatesToQueue(NSOperationQueue.mainQueue()){
(data, error) in

self.physicsWorld.gravity = CGVectorMake(CGFloat((data?.acceleration.x)!) * CGFloat(accelmultiplier), CGFloat((data?.acceleration.y)!) * CGFloat(accelmultiplier))

}

}

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

我想要一个应用程序打开的主菜单,即 mainMenu.storyboard:

menu storyboard

我成功地将应用程序启动到 mainMenu.storyboard (当我测试 level1.sks 时,关卡物理效果很好),但我无法弄清楚如何继续。

目标:当人们点击 mainMenu.storyboard 中的相应图像时,我希望他们能够进入 level1.sks(以及我稍后添加的级别) .

我无法使用添加 Storyboard Reference 的方法来对其进行连接,因为 Storyboard Reference 不允许我选择 level1.sks

我还很想知道当玩家图标触及球门时如何将用户带回主菜单(此屏幕截图中顶部附近的蓝色物体):

game maze screenshot

最佳答案

因此,要做到这一点,我认为最好的方法是创建另一个 ViewController 子类,可能命名为 LauncherViewController,它将呈现您的 SKScene。然后在你的 Storyboard中添加这个 viewController 并让你的菜单在图像按下时转到它。

这是 LauncherViewController 的开始

class LauncherViewController: UIViewController {

var gameScene: GameScene!

override func viewDidLoad() {

}

override func viewWillAppear() {
presentGameScene()
}

func presentGameScene(){

let skView = self.view as! SKView
skView.showsFPS = false
skView.showsNodeCount = false
skView.ignoresSiblingOrder = true
gameScene.size = skView.bounds.size
gameScene.scaleMode = .AspectFill
skView.presentScene(gameScene)

}
}

在你的菜单 Controller 中,你有一个像这样的prepareForSegue:

override func prepareForSegue(segue: UIStoryBoardSegue, sender: AnyObject?) {
if segue.identifier == "yourSegue" {
let destinationViewController = segue.destinationViewController as! LauncherViewController
destinationViewController.gameScene = GameScene()
}

要让 LauncherViewController 在用户完成迷宫时关闭 gameScene,请使用委托(delegate)模式。所以在 GameScene 中添加一个协议(protocol)在你的类之上

protocol GameDelegate {
func gameFinished()
}

让您的 LauncherViewController 符合此委托(delegate)并将 gameScene 的委托(delegate)变量设置为 self(见下文)

class LauncherViewController: UIViewController, GameDelegate {

var gameScene: GameScene!

override func viewDidLoad() {
gameScene.delegate = self
}

override func viewWillAppear() {
presentGameScene()
}

func presentGameScene(){

let skView = self.view as! SKView
skView.showsFPS = false
skView.showsNodeCount = false
skView.ignoresSiblingOrder = true
gameScene.size = skView.bounds.size
gameScene.scaleMode = .AspectFill
skView.presentScene(gameScene)

}

func gameFinished(){
// this forces LauncherViewController to dismiss itself
dismissViewControllerAnimated(true, completion: nil)
}
}

在GameScene中添加一个变量来保存委托(delegate)(LauncherViewController)并添加一个调用委托(delegate)函数的函数。您还需要添加逻辑来知道游戏何时结束,因为我还没有这样做。

class GameScene: SKScene {

let manager = CMMotionManager()
var delegate: GameDelegate!

override func didMoveToView(view: SKView) {


manager.startAccelerometerUpdates()
manager.accelerometerUpdateInterval = accelupdateinterval
manager.startAccelerometerUpdatesToQueue(NSOperationQueue.mainQueue()){
(data, error) in

self.physicsWorld.gravity = CGVectorMake(CGFloat((data?.acceleration.x)!) * CGFloat(accelmultiplier), CGFloat((data?.acceleration.y)!) * CGFloat(accelmultiplier))

}

}

func gameOver(){
delegate.gameFinished()
}

override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
// it's probably easiest to add the logic for a gameOver here
if gameIsOver {
gameOver()
}
}

}

这里可能会有一些错误,因为我是在手机上写的,所以如果您不确定或不起作用,请在下面评论。

关于ios - 从 Storyboard图像连接到 SpriteKit 场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37282070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com