swift – 使用SpriteKitViews和ViewController显示级别

swift – 使用SpriteKitViews和ViewController显示级别,第1张

概述我正在使用 Swift进行游戏,并希望允许用户选择一个级别(点击它)来播放该特定级别.每个级别都是屏幕上的一个框,其中包含级别编号.因此,如果该区域有20个级别,您将在屏幕上看到20个框,其中包含级别#和名称以及您获得的星号数.我对这方面的最佳方法感到困惑.我看到两种方式: >您创建一个拥有UICollectionView的viewcontroller,并将其作为数据源提供给它,并在那里处理点击事 我正在使用 Swift进行游戏,并希望允许用户选择一个级别(点击它)来播放该特定级别.每个级别都是屏幕上的一个框,其中包含级别编号.因此,如果该区域有20个级别,您将在屏幕上看到20个框,其中包含级别#和名称以及您获得的星号数.我对这方面的最佳方法感到困惑.我看到两种方式:

>您创建一个拥有UICollectionVIEw的vIEwcontroller,并将其作为数据源提供给它,并在那里处理点击事件.当你点击它时,我可以对相应的游戏场景(SKScene)做一个presentScene来处理正常的游戏绘图.
>我使用for ..循环直接将级别渲染为屏幕上的SKSpriteNodes(级别框)并执行addChild并设置每个精灵的位置.因为我可以有20个级别,所以我每行绘制约5个,因为我的猜测是适合我试过的仿真器的大多数设备.似乎我正在重新创建UICollectionVIEw自动执行的 *** 作,而且最重要的是我需要做一些技巧,如定位和偏移等.

现在我正在做上面的方法#2,因为看起来大多数Swift游戏教程都不使用故事板或视图控制器,而只是专注于使用SKScenes构建所有内容并拥有一个视图控制器,其作用是仅呈现一个场景.据我所知,我走向了这个方向.

这里的正确方法是什么?

谢谢!

解决方法 您的任何一种方法都可以使用,但您必须确定一种最适合特定方案的方法,因此“正确的方法”取决于您.六个月前我有同样的问题,到目前为止,以下解决方案对我来说完美无缺:

在SKScene中使用SKSpriteNodes的好处

我发现你可以编写一个自定义的SKNode子类,我命名为SpriteKitbutton,它包含自定义代码和动画,使SKSpriteNode像UIbutton一样用于SpriteKit,它允许你在按下它时添加更好看的动画等等.

我主要更喜欢这种方法,因为自定义精灵按钮很容易初始化为UIbutton,并且会加载你添加它们的相应SKScene并随之消失.

这使我只能使用SKScenes,而不必处理加载UIVIEwControllers或UIVIEws以及加载SKScenes.

因此,你所要做的只是简单地调用self.vIEw?.presentScene …来改变你的场景,你将拥有行动和感觉就像按钮的精灵.

这是一个让你入门的提示:

1)创建一个新的swift文件并添加以下内容:

import SpriteKitclass SpriteKitbutton: SKNode {    var button: SKSpriteNode!    var buttonUnpressedTexture: SKTexture!    var buttonpressedTexture: SKTexture!    var action: (String) -> VoID    init(buttonUnpressedImage: String,buttonpressedImage: String,buttonAction: (String) -> VoID) {        //Initialize your button here    }    overrIDe func touchesBegan(touches: Set<UItouch>,withEvent event: UIEvent?) {    }    overrIDe func touchesMoved(touches: Set<UItouch>,withEvent event: UIEvent?) {    }    overrIDe func touchesEnded(touches: Set<UItouch>,withEvent event: UIEvent?) {    }}

2)在SKScene中创建一个新按钮,如下所示:

let artboardbutton = SpriteKitbutton(buttonUnpressedImage: "artboardbuttonUnpressed.png",buttonAction: openArtboard)    artboardbutton.position = CGPoint(x: ...,y: ...)    artboardbutton.zposition = 0.0    artboardbutton.userInteractionEnabled = true    self.addChild(artboardbutton)    //Add a function to handle what to do when the button is pressed    func openArtboard() {    }

使用SKNode子类内部的各种touches方法来处理触摸时按钮要执行的 *** 作.如何处理按钮处理时的 *** 作完全取决于您.

您也可以使用for循环一次加载20个左右的按钮.

务必通过将其设置为nil来卸载willMoveFromVIEw中的按钮.

总结

以上是内存溢出为你收集整理的swift – 使用SpriteKit / Views和ViewController显示级别全部内容,希望文章能够帮你解决swift – 使用SpriteKit / Views和ViewController显示级别所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1002468.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存