ios - 如何在 iphone 上使用 sprite kit 创建弹出窗口?

标签 ios objective-c uiviewcontroller popup sprite-kit

我是一名使用 sprite 工具包开发 iOS 游戏的初学者。我想要显示对象(skspritenodes)的“弹出式”菜单,例如每日奖励或设置/暂停菜单。例如,应该能够在主屏幕或游戏期间访问设置弹出窗口。目前我有一个 View Controller ,家庭场景和游戏场景是两个不同的 SKScenes。为了可重用性(和一个干净的项目,以及学习),我想让这些弹出窗口成为它们自己的类,包括处理触摸。目前,我有一个返回 SKNode 的设置弹出窗口的类,并且这个 sknode 包含几个 skspritenodes(对应于弹出设置的按钮/图像,包括启用/禁用声音等)。但是,我必须在我的家庭场景和游戏场景中复制触摸代码才能与之交互。 (我目前在每个 skscene 的 touchesbegan 方法中,“if nodeSettings !=nil”,检查与触摸位置对应的 skspritenode 的名称,然后在设置弹出类中调用一个方法传递名称skspritenode 单击以处理与弹出窗口的交互)。

就我自己的知识以及为了解决这个问题,我想使用一个可以自行处理触摸逻辑的类(所以在我的游戏或家庭 skscene 中,我唯一要做的就是创建弹出窗口.任何交互,包括解雇,我想在类里面处理。不使用 skscene 的 touches 方法)。我找到了一个“解决方案”:

LTPopUpReward *test = [[LTPopUpReward alloc] init];
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:test];
CGFloat fltHeight = [UIScreen mainScreen].bounds.size.height;
CGFloat fltWidth = [UIScreen mainScreen].bounds.size.width;
popover.popoverContentSize = CGSizeMake(fltWidth/2, fltHeight/2); //your custom size.
CGRect rectPopUpReward = CGRectMake(500, 500, fltWidth/2, fltHeight/2);
[popover presentPopoverFromRect:rectPopUpReward inView:self.view permittedArrowDirections: UIPopoverArrowDirectionAny animated:YES];

我喜欢您可以通过单击外部来关闭 UIPopoverController,但此 UIPopoverController 仅适用于 iPad,不适用于 iPhone。我看过这个UIPopoverController for iphone not working?但想知道是否有另一种方法可以解决我的问题,Apple 可能不会反对?例如,我可以创建一个 UIViewController,调整它的大小并定位它(我不知道该怎么做)以模拟弹出窗口吗?

总结:我的目标是出现一个弹出窗口,但它的所有代码(包括触摸)都包含在一个类中,并且弹出窗口上的对象是 skspritenodes。

最佳答案

回答我自己的问题:我用来解决这个问题的方法是使用不同的 SKViews。一个 SKView 呈现主场景,另一个 SKView 呈现弹出场景。您可以调整第二个 SKView 的大小,甚至使其背景透明。与此 View 中的对象交互将正确调用呈现场景类中的 touches 方法 - 即此弹出窗口在创建时处理,并且在 View Controller 或主视图上没有其他代码处理它 -场景的逻辑(所有代码,包括创建对象和处理触摸)都在第二个 skscene 的代码中。当我做“某事”来调用“弹出窗口”时,将调用下面的方法。

-(void)test4
{
    skViewPopUp=nil;
    scenePopUpReward=nil;
    NSLog(@"test4 successfully fired");
    CGFloat fltHeight = [UIScreen mainScreen].bounds.size.height;
    CGFloat fltWidth = [UIScreen mainScreen].bounds.size.width;
    CGRect rectPopUpReward = CGRectMake(0, 0, fltWidth/2, fltHeight/2);
    skViewPopUp = [[SKView alloc] initWithFrame:rectPopUpReward];
    [self.view addSubview:skViewPopUp];
    skViewPopUp.allowsTransparency = YES;
    scenePopUpReward = [[LTSceneStoreMain alloc] initWithSize:CGSizeMake(fltWidth/2, fltHeight/2)];
    scenePopUpReward.backgroundColor = [UIColor clearColor];
    [skViewPopUp presentScene:scenePopUpReward];
}

关于ios - 如何在 iphone 上使用 sprite kit 创建弹出窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31178840/

相关文章:

iphone - 如何查询外部 SQL 数据库 - iPhone 应用程序

c++ - 我可以在 IOS 上使用 tempnam 吗?

ios - 是否可以同时在屏幕上激活来自 2 个不同 Storyboard的 2 个 View Controller ?

objective-c - 如何将 NSMutableArray 传递给另一个 ViewController 类

ios - UIPickerView - 无法在 ios7 中点击项目进行选择

ios - Flurry 崩溃报告不起作用

ios - UICollectionView 流布局问题

ios - 如何从 super View Controller 写入 subview Controller 的导出

ios - Objective-C 向未分配的对象发送消息

ios - 如何为同一 View Controller 的不同设备方向加载不同的 XIB?