Ios 如何在一个框架下导入多个swift游戏并为其创建主菜单?
我想实现一个游戏平台,已经实现了三个swift游戏(通过使用单视图项目)分别。现在我想实现一个主菜单,它有三个按钮:游戏a、游戏B和游戏C。当用户按下按钮时,相应的游戏将启动。你能告诉我如何用更少的努力做到这一点吗?和Java一样,我们可以为每个项目创建一个jar,然后在其他Java项目中调用它们。斯威夫特也有类似的方式吗?谢谢。如果您拥有所有代码,请创建一个独特的项目。您应该在每个带按钮的方法中创建一个序列。为此,在故事板中创建一个序列(从一个VC拖动到另一个VC),然后单击它并给它一个标识符。在按钮式方法中,使用performsguewithidentifier(“您的标识符”),就是它 编辑: 好的,我会尽量更具体地帮助你。要创建你想要的应用程序,你需要在同一个项目中的所有代码(全部关于三个游戏)。 因此,在Xcode中,您必须创建四个viewController(三个用于游戏,另一个用于菜单)。要执行此操作,请转到Main.storyboard文件(默认情况下,在创建项目时会有该文件),然后拖动viewController视图(右下)。然后,您必须为它们中的每一个创建一个自定义类(从UIViewController继承)。然后在情节提要中,再次为每个viewController选择自定义类(已创建的类) 谈论这些片段,您可以学习如何创建它们。 它基本上是在ViewController之间移动的一种方式。创建一个时,您必须使用Ios 如何在一个框架下导入多个swift游戏并为其创建主菜单?,ios,swift,xcode,swift3,sprite-kit,Ios,Swift,Xcode,Swift3,Sprite Kit,我想实现一个游戏平台,已经实现了三个swift游戏(通过使用单视图项目)分别。现在我想实现一个主菜单,它有三个按钮:游戏a、游戏B和游戏C。当用户按下按钮时,相应的游戏将启动。你能告诉我如何用更少的努力做到这一点吗?和Java一样,我们可以为每个项目创建一个jar,然后在其他Java项目中调用它们。斯威夫特也有类似的方式吗?谢谢。如果您拥有所有代码,请创建一个独特的项目。您应该在每个带按钮的方法中创建一个序列。为此,在故事板中创建一个序列(从一个VC拖动到另一个VC),然后单击它并给它一个标识符
performsguewithidentifier(“yourSegueIdentifier”,发件人:nil)
将该代码放在按钮的按钮标记方法中(了解所有信息)
好吧,如果你不明白什么,请告诉我。祝你好运 您可以创建一个SpriteKit场景作为游戏的主菜单,使用三个不同的按钮切换到每个游戏场景。可以使用SKLabelNode创建标题,并将精灵或形状节点用作场景的按钮 我曾经在SpriteKit场景中添加过UIButtons和UILabel,但在定位它们时会遇到非常技术性的问题。由于UI对象位于视图上,而不是直接位于SpriteKit场景上。对于菜单场景,可以使用SKSpriteNode作为按钮,使用SKLabelNode作为标题 精灵套件场景放置在UIView上,并根据您定义的缩放模式进行缩放。苹果默认缩放模式。aspectFill不需要调整精灵套件对象在不同手机设备屏幕大小上的定位 这是一个SKSpriteNode的自定义类,具有与按钮相同的功能
import Foundation
import SpriteKit
class ButtonLabelNode : SKSpriteNode {
let buttonPressed: () -> ()
init(texture: SKTexture?, color: UIColor, size: CGSize, text: String, buttonPressed: @escaping () -> ()) {
self.buttonPressed = buttonPressed
super.init(texture: texture, color: color, size: size)
let label = SKLabelNode(fontNamed: "Futura")
label.fontSize = 50
label.fontColor = SKColor.red
label.position = CGPoint.init(x: 0.0, y: 0.0)
label.zPosition = 1
label.verticalAlignmentMode = .center
label.text = text
self.addChild(label)
self.isUserInteractionEnabled = true
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.alpha = 0.8
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
self.alpha = 1.0
buttonPressed()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
import Foundation
import SpriteKit
class SKShapeButton: SKShapeNode {
init(circleOfRadius: CGFloat) {
super.init()
let diameter = circleOfRadius * 2.0
self.path = CGPath(ellipseIn: CGRect(origin: CGPoint.init(x: 0.0 - circleOfRadius, y: 0.0 - circleOfRadius), size: CGSize(width: diameter, height: diameter)), transform: nil)
self.isUserInteractionEnabled = true
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.alpha = 0.8
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
self.alpha = 1.0
}
}
如果希望按钮具有不同的形状或唯一的形状,可以将ShapeNode(而不是SpriteNode)细分为子类,并实现相同的功能,下面是一个如何将圆形ShapeNode创建为按钮的示例
import Foundation
import SpriteKit
class ButtonLabelNode : SKSpriteNode {
let buttonPressed: () -> ()
init(texture: SKTexture?, color: UIColor, size: CGSize, text: String, buttonPressed: @escaping () -> ()) {
self.buttonPressed = buttonPressed
super.init(texture: texture, color: color, size: size)
let label = SKLabelNode(fontNamed: "Futura")
label.fontSize = 50
label.fontColor = SKColor.red
label.position = CGPoint.init(x: 0.0, y: 0.0)
label.zPosition = 1
label.verticalAlignmentMode = .center
label.text = text
self.addChild(label)
self.isUserInteractionEnabled = true
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.alpha = 0.8
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
self.alpha = 1.0
buttonPressed()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
import Foundation
import SpriteKit
class SKShapeButton: SKShapeNode {
init(circleOfRadius: CGFloat) {
super.init()
let diameter = circleOfRadius * 2.0
self.path = CGPath(ellipseIn: CGRect(origin: CGPoint.init(x: 0.0 - circleOfRadius, y: 0.0 - circleOfRadius), size: CGSize(width: diameter, height: diameter)), transform: nil)
self.isUserInteractionEnabled = true
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.alpha = 0.8
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
self.alpha = 1.0
}
}
要转换到每个游戏场景,可以实现游戏视图控制器swift文件中的代码,该文件显示提供的游戏场景
override func didMove(to view: SKView) {
let labelNode = LabelNode(texture: nil, color: .white, size: CGSize.init(width: 200, height: 100), text: "Play", buttonPressed: playButton)
labelNode.position = CGPoint(x: self.frame.midX, y: self.frame.midY)
self.addChild(labelNode)
}
func playButton()
{
print("play")
}
override func didMove(to view: SKView) {
let shapeButton = SKShapeButton(circleOfRadius: 50)
shapeButton.fillColor = .red
shapeButton.position = CGPoint(x: self.frame.midX, y: self.frame.midY)
self.addChild(shapeButton)
}
if let view = self.view as! SKView? {
// Load the SKScene from 'GameScene.sks'
if let scene = SKScene(fileNamed: "GameScene") {
// Set the scale mode to scale to fit the window
scene.scaleMode = .aspectFill
// Present the scene
view.presentScene(scene)
}
view.ignoresSiblingOrder = true
view.showsFPS = true
view.showsNodeCount = true
}
请理解,无论您如何执行此操作,应用商店中仍将有一个应用程序(或捆绑ID)。我们希望它是一个应用程序。你知道这样做的方法吗?如果你想在应用商店中使用,就不知道了。我建议——在进一步深入之前——调查应用商店政策、iOS应用程序沙箱和定价。我能想到的唯一方法仍然是一个应用程序或捆绑ID和一个非常大的项目,其中应用程序中的每个游戏都是一个IAP或应用内购买。但说真的,在浪费大量的辛勤工作和时间之前,请仔细阅读苹果在他们的应用商店中允许的内容。还有一件事——看看外面有什么——如果你找到了一个你想要的好例子,看看它是怎么做到的。我是ios的初学者。你能告诉我更多关于那件事吗?或者有关于如何做到这一点的视频或材料吗?谢谢