swift – 使用SpriteKit / Views和ViewController显示级别
我正在使用
Swift进行游戏,并希望允许用户选择一个级别(点击它)来播放该特定级别.每个级别都是屏幕上的一个框,其中包含级别编号.因此,如果该区域有20个级别,您将在屏幕上看到20个框,其中包含级别#和名称以及您获得的星号数.我对这方面的最佳方法感到困惑.我看到两种方式:
>您创建一个拥有UICollectionView的viewcontroller,并将其作为数据源提供给它,并在那里处理点击事件.当你点击它时,我可以对相应的游戏场景(SKScene)做一个presentScene来处理正常的游戏绘图. 现在我正在做上面的方法#2,因为看起来大多数Swift游戏教程都不使用故事板或视图控制器,而只是专注于使用SKScenes构建所有内容并拥有一个视图控制器,其作用是仅呈现一个场景.据我所知,我走向了这个方向. 这里的正确方法是什么? 谢谢! 解决方法
您的任何一种方法都可以使用,但您必须确定一种最适合特定方案的方法,因此“正确的方法”取决于您.六个月前我有同样的问题,到目前为止,以下解决方案对我来说完美无缺:
在SKScene中使用SKSpriteNodes的好处 我发现你可以编写一个自定义的SKNode子类,我命名为SpriteKitButton,它包含自定义代码和动画,使SKSpriteNode像UIButton一样用于SpriteKit,它允许你在按下它时添加更好看的动画等等. 我主要更喜欢这种方法,因为自定义精灵按钮很容易初始化为UIButton,并且会加载你添加它们的相应SKScene并随之消失. 这使我只能使用SKScenes,而不必处理加载UIViewControllers或UIViews以及加载SKScenes. 因此,你所要做的只是简单地调用self.view?.presentScene …来改变你的场景,你将拥有行动和感觉就像按钮的精灵. 这是一个让你入门的提示: 1)创建一个新的swift文件并添加以下内容: import SpriteKit class 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中的按钮. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |