iOS 7 SpriteKit - 创建游戏菜单/按钮(场景与更多视图控制器)

tdu*_*udz 12 objective-c uibutton ios

所以,我已经开始在SpriteKit上开展一个项目了,我希望能够用几个按钮实现一个"主菜单"场景.一个人将进入一个关卡选择屏幕,一个是选项等.然后从关卡选择屏幕中,会有几个其他按钮,当选择它们时将启动游戏并加载所选关卡.

我的问题是:如何建立项目?每个屏幕(级别选择,主菜单,选项)是否应该是自己的场景并且有一个主视图控制器?或者我应该有多个视图控制器吗?或者也许每个级别的视图控制器(虽然这没有多大意义)由故事板中的NavigationController控制?

在玩了一下并在线阅读之后,我注意到我可以使用视图控制器为我的主菜单添加UIButtons.然而,他们坚持通过精灵套件场景变化,这不是我想要的.这意味着我必须设置按钮隐藏在每个显示的新场景上,这让我担心,因为我不确定按钮究竟发生了什么.我知道可以用SKSpriteNodes创建按钮(类似于Graf发布的类和许多人使用的类).这是更好的选择吗?我没有在VC上使用UIButtons,而是检查touchBegan方法和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];
}
Run Code Online (Sandbox Code Playgroud)

这是处理它的正确方法吗?

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

我也在考虑是否可以为按钮设置动画.我想我会希望它们在选中时浮动或变大(当用户触摸但不放手时),我相信UIButton不会允许它,因为它不是SKSpriteNode.

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

Jul*_*oya 7

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

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

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

使用UIKit可以更轻松地创建详细的In App Purchases菜单.

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

项目应该如何建立?

你只需要一个场景

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

我想我会希望它们在选中时浮动或变大(当用户触摸但不放手时),我相信UIButton不会允许它,因为它不是SKSpriteNode.

你可以使用UIView animateWithDurationCABasicAnimation为UIButton添加动画

这意味着我必须设置按钮以隐藏在显示的每个新场景上

用功能解决它

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

像这样隐藏它

[self setHidden:YES];
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你

祝好运!


Alb*_*ddy 0

几个月前,当我开始使用 spriteKit 构建游戏时,我遇到了这个问题。

我的答案并不是很明确,但这是我的建议:对于游戏内,我会以编程方式设置 UI - 看起来工作量很大,但对于视频游戏来说,它实际上并没有那么糟糕。但某些菜单可能位于故事板设置或 xib 文件中 - 例如主菜单以及游戏外的不同子菜单。

对于触摸,将该功能添加到您的场景中。m

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{

    CGPoint location = [[touches anyObject] locationInNode:self];
}
Run Code Online (Sandbox Code Playgroud)

然后你可以使用 CGRectContainsPoint();

或者您可以将 UITapGestureRecognizer 添加到视图控制器。

UITapGestureRecognizer * recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];

recognizer.delegate = self;

[view addGestureRecognizer:recognizer];
Run Code Online (Sandbox Code Playgroud)

在 SKScene 中设置按钮