草庐IT

iOS 7 SpriteKit - 创建游戏菜单/按钮(场景与更多 View Controller )

coder 2023-07-28 原文

所以,我已经开始在 SpriteKit 中进行一个项目,我希望能够用几个按钮实现一个“主菜单”场景。 One would go to a level select screen, one would be options, etc. Then from the level select screen, there would be several other buttons that when selected would start the game and load the selected level.

我的问题是:项目应该如何设置?每个屏幕(级别选择、主菜单、选项)都应该是自己的场景并有一个主视图 Controller 吗?或者我应该为所有内容设置多个 View Controller 吗?或者每个级别的 View Controller (尽管这没有太大意义)由 Storyboard 中的 NavigationController 控制?

在尝试了一下并在线阅读之后,我注意到我可以使用 View Controller 为我的主菜单设置 UIButtons。但是,它们会通过 sprite kit 场景变化而持续存在,这不是我想要的。这意味着我必须将按钮设置为隐藏在每个显示的新场景中,这让我很担心,因为我不确定按钮到底发生了什么。我知道可以用 SKSpriteNodes 创建按钮(类似于 Graf 发布的类,很多人都用过)。那是更好的选择吗?我没有在 VC 上使用 UIButtons,而是检查是否在 touchedBegan 方法和 touchesEnded 方法中对该按钮节点进行了触摸,如下所示:

UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInNode:self];
SKNode *node = [self nodeAtPoint:location];

if ([node.name isEqualToString:@"scene button"])
{
    LevelScene *scene = [LevelScene sceneWithSize:self.view.bounds.size];
    scene.scaleMode = SKSceneScaleModeAspectFill;
    [self.view presentScene:scene];
}

这是正确的处理方式吗?

最终我希望能够添加暂停屏幕、游戏结束屏幕等,但不确定仅交换场景是否就足够了。此外,我可以从 .plist 文件加载它们,而不是为每个级别单独实现

我也在考虑是否能够为按钮设置动画。我想我希望它们在被选中时 float 或变大(当用户触摸它但没有放开时),我相信 UIButton 不会允许它,因为它不是 SKSpriteNode。

抱歉发了这么长的帖子,但希望这能提供足够的信息来帮助我走出正轨!谢谢!

最佳答案

如果您想要一个简单的菜单,您可以使用 SpriteKit 创建它,但如果您想要一个复杂的菜单,您应该使用 UIKit

假设您想创建一个具有 CoverFlow 效果的关卡选择菜单,这将很难在 SpriteKit 上从头开始实现,但对于 UIKit 您可以找到像这样的库iCarousel,可轻松实现令人惊叹的 CoverFlow 和滚动效果。

SKLabelNode 目前只支持一个文本行,所以如果你想在你的游戏中添加一条很长的消息,那会很困难,但如果你使用 UIKit,你可以使用 UITextView 来显示你的长消息。

使用 UIKit 可以更轻松地创建详细的应用内购买菜单。

UIKit 会避免你很多头痛,我真的鼓励你使用它。

how should the project be set up?

你只需要1个场景

MenuviewController->(推送Segue)->LevelSelectionController->(推送Segue)->GameScene

I suppose I'd want them to float around or get bigger when selected (when the user has touched it but not let go), and I believe that a UIButton would not allow it since it isn't an SKSpriteNode.

您可以使用 UIView animateWithDurationCABasicAnimation 向 UIButton 添加动画

That would mean that I would have to set buttons to be hidden on every new scene displayed

用函数解决

- (void)setHidden:(BOOL)hide {
    UIButton *tmpButton = (UIButton *)[self.view viewWithTag:100];
    tmpButton.hidden = hide ? YES : NO;
}

这样隐藏起来

[self setHidden:YES];

希望对你有帮助

祝你好运!

关于iOS 7 SpriteKit - 创建游戏菜单/按钮(场景与更多 View Controller ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24320096/

有关iOS 7 SpriteKit - 创建游戏菜单/按钮(场景与更多 View Controller )的更多相关文章

  1. ruby - 如何在 Ruby 中顺序创建 PI - 2

    出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits

  2. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  3. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  4. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  5. ruby - 如何使用 RSpec::Core::RakeTask 创建 RSpec Rake 任务? - 2

    如何使用RSpec::Core::RakeTask初始化RSpecRake任务?require'rspec/core/rake_task'RSpec::Core::RakeTask.newdo|t|#whatdoIputinhere?endInitialize函数记录在http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/RakeTask#initialize-instance_method没有很好的记录;它只是说:-(RakeTask)initialize(*args,&task_block)AnewinstanceofRake

  6. ruby - 为什么 SecureRandom.uuid 创建一个唯一的字符串? - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?

  7. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  8. ruby - 有人可以帮助解释类创建的 post_initialize 回调吗 (Sandi Metz) - 2

    我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法

  9. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  10. ruby - 使用多个数组创建计数 - 2

    我正在尝试按0-9和a-z的顺序创建数字和字母列表。我有一组值value_array=['0','1','2','3','4','5','6','7','8','9','a','b','光盘','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','','u','v','w','x','y','z']和一个组合列表的数组,按顺序,这些数字可以产生x个字符,比方说三个list_array=[]和一个当前字母和数字组合的数组(在将它插入列表数组之前我会把它变成一个字符串,]current_combo['0','0','0']

随机推荐