嗨,我已经看到了很多关于这个话题的问题,但似乎没有一个能解决我的问题。当用户获胜/死亡时,我想通过SKScene呈现一个UIView控制器。我创建了一个PresentWinLoseViewController : UIViewController子类,并将其连接到故事板中。我在storyboard中创建了一个从GameViewController到PresentWinLoseViewController的段,外加两个从PresentWinLoseViewController返回到GameViewController的退出序列。
这就是我对它们的称呼。当我赢/输的时候在我的SKScene里
fu
我正在GameViewController中设置一个间隙广告,我想调用在GameOverScene中加载广告的函数。然而,GameViewController是连接到GameScene,而不是GameOverScene。如何在loadAd()中调用GameOverScene函数
GameViewController代码:
import iAd
extension SKNode {
class func unarchiveFromFile(file : String) -> SKNode? {
if let path = NSBundle.mainBundle().pathFor
我有一个GameScene.sks,GameScene类和GameViewController。我可以在不使用sks的情况下创建一个协议,但是我想使用SKScene(fileNamed: "GameScene")来完成这个任务。
当我在GameViewController中使用GameViewController时,viewDidload()会得到Value of type 'SKScene' has no member gameDelegate错误。
我怎样才能克服这个问题?
protocol GameDelegate {
func createAd
我和SKView有我的GameViewController.swift。
在GameScene.swift中,我创建了覆盖我的场景的UIView。
var overlayView = UIView(frame: UIScreen.main.bounds) When I tap on screen (touchesBegan) overlayView.isHidden = true and when touchesEnded overlayView.isHidden = false (当我在屏幕上轻触(按下)overlayView.isHidden = true和whentouchesEn
我想做一个游戏使用UIViewController作为菜单和SKScene的GameScene。
当播放器按下菜单上的Play按钮时,我希望在菜单和GameScene之间进行转换,如下所示:
let nextScene = GameViewController()
self.presentViewController(nextScene, animated: true, completion: nil)
但我发现了一个错误:
Could not cast value of type 'UIView' (0x19ff623e0) to 'SKView' (0x19
我的问题有点具体。我有一个UIViewController,里面有一个指向另一个GameViewController的按钮。在GameViewController中,我加载了一个显示GameScene的TransitionScene,我们就可以玩了。一旦玩家输了,GameViewController就会被解雇 我不能解决的问题是,在第一个游戏之后,如果我再次点击play,TransitionScene会加载并显示,但GameScene永远不会出现,因此我需要重新启动应用程序才能使其再次工作。 下面是我在TransitionScene中显示GameScene的方式 let transition
我想知道如何在SpriteKit中添加更多的场景。如果我在GameViewController中使用从SpriteKit生成的代码行
if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene
但是,如果我创建了一个也是SKScene类型的类,并将其添加到SKView中,则可以很好地工作。
let newscene = GameMenu()
skView.presentScene(newscene)
这是行不通的。它只显示一种褪色的灰色,只有一小部分节点,但实际上什么也没有出现。SpriteKit
在这个问题上似乎有很多自相矛盾的观点。我只想把菜单放在UIViewController里,我的游戏放在SKScene里。
在我的SKScene中,我使用:
self.removeFromParent()
self.view?.presentScene(nil)
节点被移除,但场景仍然存在,因为我仍然有灰色背景和fps计数器。我可以返回到UIViewController的视图方面并隐藏场景吗?
我的方法之一实现:
RootViewController:
class RootViewController: UIViewController {
var menu =
我在类GameViewController中创建了一个UIScrollView,其中的子视图是场景。当用户进入特定场景并按下特定按钮时,ScrollView必须停止滚动。
我该怎么做呢?
代码示例:
import SpriteKit
class GameViewController: UIViewController {
@IBOutlet weak var scrollView: UIScrollView!
...
}
class GameScene: SKScene {
//Here we have button and if we will push it
//then
下面复制了相关代码,我还在Github上放置了一个简单的测试项目来演示这种情况:
我有一个GameViewController和一个GameScene类。我尝试用SKScene(fileNamed: "GameScene")设置场景,但是这个调用不起作用,因为场景没有出现,该行后面的打印语句也没有被调用。
我知道我可以用另一种方式来设置场景,就像这样:
let scene = GameScene()
但是我正在努力理解SpriteKit,下面的代码不起作用,这让我感到困扰。在另一个项目中,我能够使用SKScene(fileNamed: "GameScene")
我需要把我的UIViewController作为我GameScene的一个属性。因此,在调用presentScene之前,我使用UIViewController设置属性。
我的UIViewController课程:
class GameViewController: UIViewController {
var scene:GameScene!
override func viewDidLoad() {
super.viewDidLoad()
if let scene = GKScene(fileNamed: "GameScene&
我想让一些节点显示在屏幕上。
在我的GameViewController中,我有:
class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if let view = self.view as! SKView? {
// Load the SKScene from 'GameScene.sks'
// Alternative -> let scene
虚拟控制器将出现,但随后会被添加到视图中的对象遮挡。我还尝试在UIViewController中添加虚拟控制器,但也不起作用。 可以在SKScene中直接使用GCVirtualController吗? class GameScene: SKScene {
private var _virtualController: Any?
public var virtualController: GCVirtualController? {
get { return self._virtualController as? GCVirtualController }
所以我正在尝试完成我几年前开始的这个iPhone应用程序。无论如何,我有一个选项菜单,你可以在其中创建一个自定义关卡(转到另一个视图)。然后,当我返回到主菜单,然后是选项菜单时,它只显示一个黑屏。
// shows options menu, works the first time
-(void) options : (id) sender{
[self.menuViewController.view removeFromSuperview];
[self.bg.view removeFromSuperview];
[self transition:self.view