在第一个场景中检测到点击:SpriteKit Swift iOS,有小问题
因此,我的应用程序中有一个菜单屏幕。Swift、SpriteKit、iOS 7-10、11、12、13 我只想让用户点击我屏幕上的按钮,让它将他们移动到另一个屏幕。这适用于我代码中的其他引用。然而,我所做的只是将GameViewController中的第一个加载场景更改为我自己的swift文件,代码如下所示:在第一个场景中检测到点击: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
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到我的答案,演示如何从游戏视图控制器切换场景。您应该使用文件名,不带扩展名。仍然无法检测触摸。