Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在第一个场景中检测到点击:SpriteKit Swift iOS,有小问题_Ios_Objective C_Swift_Sprite Kit - Fatal编程技术网

在第一个场景中检测到点击:SpriteKit Swift iOS,有小问题

在第一个场景中检测到点击:SpriteKit Swift iOS,有小问题,ios,objective-c,swift,sprite-kit,Ios,Objective C,Swift,Sprite Kit,因此,我的应用程序中有一个菜单屏幕。Swift、SpriteKit、iOS 7-10、11、12、13 我只想让用户点击我屏幕上的按钮,让它将他们移动到另一个屏幕。这适用于我代码中的其他引用。然而,我所做的只是将GameViewController中的第一个加载场景更改为我自己的swift文件,代码如下所示: import Foundation import SpriteKit import GameplayKit import UIKit class FrontMenu : SKScene

因此,我的应用程序中有一个菜单屏幕。Swift、SpriteKit、iOS 7-10、11、12、13

我只想让用户点击我屏幕上的按钮,让它将他们移动到另一个屏幕。这适用于我代码中的其他引用。然而,我所做的只是将GameViewController中的第一个加载场景更改为我自己的swift文件,代码如下所示:

import Foundation
import SpriteKit
import GameplayKit
import UIKit


class FrontMenu : SKScene {
    var play = SKSpriteNode(imageNamed: "pbut")
    
var credit = SKSpriteNode()

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        for touch in touches {
            let location = touch.location(in: self)
            let node : SKNode = self.atPoint(location)
            if node.name == "play" {
                print("play tapped.")
// this is where I would have placed the transition, but this did not work.
                
            }
            else if node.name == "cred" {
                       NSLog("credits tapped")
                      
                       
                   }
             if location.x <= -90 && location.y >= -160 {
                NSLog("Area hit for play")
// This area is still not detected within the app, and there is no button function.
                let gameScene = GameScene(fileNamed: "GameScene")
                gameScene?.scaleMode = .aspectFill
                self.view?.presentScene(gameScene!, transition: SKTransition.fade(withDuration: 0.86))
<代码>导入基础 进口SpriteKit 导入游戏工具包 导入UIKit 类FrontMenu:SKScene{ var play=SKSpriteNode(图像名为:“pbut”) var credit=SKSpriteNode() 覆盖func TouchesBegind(Touchs:Set,带有事件:UIEvent?){ 接触{ 让位置=触摸。位置(in:self) let节点:SKNode=self.atPoint(位置) 如果node.name==“播放”{ 打印(“播放点击”) //这是我将要进行转换的地方,但这不起作用。 } 如果node.name==“cred”,则为else{ NSLog(“信用分录”) } 如果location.x=-160{ NSLog(“游戏区域命中”) //此区域在应用程序中仍然未检测到,并且没有按钮功能。 让GameSecene=GameSecene(文件名为:“GameSecene”) 游戏场景?.scaleMode=.aspectFill self.view?.presentScene(游戏场景!过渡:SKTransition.fade(持续时间:0.86)) 基本上就是这样。你可以看到我在哪里实现了转换。我是否缺少导入?我是否缺少要更改为整个Plist文件的内容?或者GameViewController.swift中的其他内容。我更改了第一个加载swift文件,以便它确实在应用程序中首先加载此代码。但是它没有检测到触摸。
感谢您的帮助!

看起来您缺少设置节点名称的代码。请确保在
didMove
函数中设置节点名称并将其添加到场景中

//inside scene
override func didMove(to view: SKView) {
    play.name = "play"
    self.addChild(play)
}
您必须确保的另一件事是在项目中创建了一个SpriteKit场景文件,并将自定义类设置为
FrontMenu

至于在GameViewController中切换文件,您应该只使用文件名,而不是
filename:

//inside GameViewController
override func viewDidLoad() {
        super.viewDidLoad()
        
        if let view = self.view as! SKView? {
            // Load the SKScene from 'MneuScene.sks'
            if let scene = SKScene(fileNamed: "MenuScene") {
                // Set the scale mode to scale to fit the window
                scene.scaleMode = .resizeFill
                // Present the scene
                view.presentScene(scene)
            }
        }
}

嘿@Nicholas我试过了,在日志窗口内:我仍然没有得到任何关于点击的确认。这很奇怪,但这是另外一件事?你有其他建议吗?SpriteKit场景也被命名为FrontMenu.sks,所以这不是一个问题。我想知道FrontMenu是否可以加载到GameViewController中?@Tomato_代码我添加了一个section到我的答案,演示如何从游戏视图控制器切换场景。您应该使用文件名,不带扩展名。仍然无法检测触摸。