- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在我的 SpriteKit 游戏中构建一个 PauseButton
类,我想在 GameScene
激活时绘制一个标签。但是,我需要在 didMoveToView
之外实例化按钮(就在它之前 - 在 GameScene
中),以便我可以从 更“全局”地访问它touchBegan
方法。
let pauseButton = PauseButton(theTexture: pauseButtonTexture,gameScene:GameScene)
override func didMoveToView(view: SKView) {
理想情况下,我可以通过在 didMoveToView
中实例化它来传递 View ,但截至目前,我不知道如何执行此操作以及如何从场景的其余部分访问它。也就是说,有没有办法传入我正在使用的当前 GameScene
实例,以便我可以从方法内部执行类似 gameScene.addchild(label)
的操作我的按钮类?我找不到任何有用的东西,所以任何帮助都会很棒!
最佳答案
你基本上可以通过两种方式做到这一点。
1) 像这样创建属性
var pauseButton: PauseButton!
然后像这样在 didMoveToView 中实例化它。
override func didMoveToView(view: SKView) {
pauseButton = PauseButton(theTexture: pauseButtonTexture,gameScene: self)
addChild(pauseButton)
}
2) 使用惰性实例化,这样您就可以做您最初尝试做的事情。
最简单形式的惰性变量允许您在不执行第 1 步的情况下使用 self。
lazy var pauseButton: PauseButton = PauseButton(theTexture: pauseButtonTexture,gameScene: self)
override func didMoveToView(view: SKView) {
您甚至可以像这样在同一位置添加此按钮的更多属性。
lazy var pauseButton: PauseButton = {
let button = PauseButton(theTexture: pauseButtonTexture,gameScene: self)
button.zPosition = 200
button.position = CGPoint(x: self.frame.midX, y: self.frame.midY)
button.alpha = 0.5
return button
}()
override func didMoveToView(view: SKView) {
addChild(pauseButton)
}
记住每个 SKNode/SKSpriteNode 等都有一个场景属性。如果您的按钮类是 SKNode/SKSpriteNode 的子类,那么您可以获取其场景属性并使用“as”运算符获取对 GameScene 的引用,而无需在初始化方法中传入场景。
例如
class GameScene: SKScene {
lazy var pauseButton: PauseButton = PauseButton(theTexture: pauseButtonTexture,gameScene: self)
var someBool = false
override func didMoveToView(view: SKView) {
addChild(pauseButton)
pauseButton.loadPausedLabel()
}
func someMethod() {
}
}
class PauseButton: SKSpriteNode {
func loadPauseLabel() {
// Way 1, reference to current scene but not to specific class
guard let scene = scene else { return }
// Scene property is optional and is nil until button is added to a Scene so add the guard check.
scene.someBool = true // NOT WORKING
scene.someMethod() // NOT WORKING
let label = SKLabelNode(...
scene.addChild(label) // WORKING
// Way 2, use "as" to cast to specific scene (e.g GameScene) so you can call properties/methods on it. This is the same as passing GameScene in the init method.
guard let gameScene = scene as? GameScene else { return }
// Scene property is optional and is nil until button is added to a Scene so add the guard check.
// The button must be added to the scene you are trying the as? cast with, in this example GameScene.
gameScene.someBool = true // WORKING
gameScene.someMethod() // WORKING
let label = SKLabelNode(...
gameScene.addChild(label) // WORKING
}
}
作为提示,我不会在 pauseButton 子类中添加暂停标签,我会从场景本身或暂停菜单子(monad)类中添加它。此外,我不会对每个按钮进行子类化,我会创建 1 个可用于游戏中所有按钮的类。您可以创建一个带有按钮名称的枚举,并将其传递到 init 方法中,以在按下按钮时区分按钮。
您的按钮子类应该只处理动画、纹理等。您可以查看 apples game DemoBots 作为示例。
希望对你有帮助
关于ios - 将当前 GameScene 实例传递到在 GameScene 中调用的类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38959540/
我正在我的 SpriteKit 游戏中构建一个 PauseButton 类,我想在 GameScene 激活时绘制一个标签。但是,我需要在 didMoveToView 之外实例化按钮(就在它之前 -
GameScene.sks 和 GameScene.swift 有问题。我试图为我的项目添加一个标题屏幕,但它从那里走下坡路。标题屏幕工作正常,但问题是当我编辑 Gameviewcontroller.
我正在学习 SpriteKit 并开始了一个使用关卡编辑器的小项目。 但是,由于某些原因,GameScene.swift 和 GameScene.sks 似乎没有关联。下面是 .sks 文件设置的屏幕
我的 xCode 项目有问题。我有一个完整的 gamescene.swift 代码文件(600 行)。但是代码不会运行。当我在模拟器中运行我的游戏时,模拟器会显示标准的 gamescene.sks 颜
好吧,我在 Swift 中创建了一个 sprite kit 游戏,我需要展示一个新的 SKScene OVER(因为在新场景中会有一个清晰的背景,所以你仍然可以看到 GameScene 下面)我原来的
遵循 YouTube 上的 Swift 教程。尝试制作游戏。本教程显示了一个 GameScene.swift 文件和一个 GameScene.sks 文件,而我的没有显示。我错过了什么地方的设置吗?与
我一直在玩弄 SpriteKit,并且对如何从代码驱动它有了相当不错的感觉,但我对 Xcode 6 中包含的关卡编辑器感到非常困惑。 我看过 wwdc 视频(“platforms state of u
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 6 年前。 Improve t
Stackoverflow 新手,如果我发布错误,非常抱歉!谢谢 我的应用程序是一个有时间限制的迷宫游戏,一旦时间达到 0,游戏就会结束并进入游戏结束屏幕(单独的 swift 文件),这由一个“重播”
我已经搜索了几个小时,但没有结果。也许我只是在寻找一个简单的解决方案,但我想知道如何以及在哪里更改启动应用程序时自动启动的场景。在我的项目中制作主菜单或制作人员名单场景。 最佳答案 您需要转到 Vie
在付费网站上的一些教程中,我了解到您可以通过简单地再次呈现相同的场景来重玩游戏,但我无法再访问该教程,所以我不确定我做错了什么。如果我没记错的话,教程使用了类似的内容(在 GameScene 类中):
我的 GameScene 中有我的游戏说明,完成说明后我按下按钮转到 GamePlay 场景,我希望 GameScene 在我再次打开我的应用程序时不再出现。我希望 GamePlay 场景在我下次打开
我的游戏已经准备就绪,我唯一缺少(并想添加)的是向社交媒体分享标准消息的选项。我环顾四周,发现了不同的方法来做到这一点,但当我实现它们时,它们似乎都不起作用。我有一种感觉,我做错了可能很简单! 这是我
我正在使用 swift 和 SpriteKit,我遇到了一个问题,我认为我的 GameScene 比我设备的屏幕尺寸宽。我需要做的是移动图像,然后不允许它移过屏幕边缘。 我现在所处的位置是我的图像将与
所以我已经阅读了几个关于此的问题,但大多数都是在 Objective-C 中,我还没有找到任何直接解决/回答这个问题的问题。我是这里编程的新手,所以请非常彻底地解释任何建议。 我需要了解如何在游戏结束
您好,我的问题只是如何在 GameScene 中取消隐藏按钮。我有一个在 Storyboard中设置的 segueToMainMenu 按钮。这就是我的 GameViewController 的外观:
您好,我的问题是,当我单击按钮重新启动游戏时,它会重新启动,但如果我单击转换到 MainMenuViewController 的按钮,场景就会卡住。有趣的是,如果我重新启动游戏并首先单击segue按钮
我是一个菜鸟,所以,如果这是一个非常基本的问题,请原谅我。我正在创建我的第一个应用程序,它是一个游戏。对于一个文件来说,代码变得太大了(一直上下移动很烦人)。所以我把我的函数放在其他文件中。问题是 a
我正在尝试制作一个简单的 2D 平台游戏。我决定使用 SpriteKit 引擎提供的 Sprite ,而不是导入 Sprite :在 GameScene.sks 中,我拖放了一个 Sprite (简单
各位程序员大家好。这是场景。用户可以在游戏过程中访问 InGameMenuScene,从而允许他们访问设置等。 InGameMenuScene 上的按钮之一 BackToGame 应该带您回到最初所在
我是一名优秀的程序员,十分优秀!