繁体   English   中英

如何在 iphone 上使用精灵套件创建弹出窗口?

[英]How to create popup using sprite kit on iphone?

我是使用精灵套件开发 iOS 游戏的初学者。 我想要显示对象(skspritenodes)的“弹出”菜单,例如每日奖励或设置/暂停菜单。 例如,设置弹出窗口应该能够在主主屏幕上或在游戏过程中访问。 目前我有一个视图控制器,家庭场景和游戏场景是两个不同的 SKScene。 为了可重用性(和一个干净的项目,以及学习),我想让这些弹出窗口成为他们自己的类,包括处理触摸。 目前,我有一个用于设置弹出窗口的类,它返回一个 SKNode,这个 sknode 包含几个 skspritenode(与弹出设置对应的按钮/图像,包括启用/禁用声音等)。 但是,我必须在我的家庭场景和我的游戏场景中复制触摸代码才能与之交互。 (我目前在每个 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。 我见过这个用于 iphone 的 UIPopoverController 不起作用吗? 但想知道是否有另一种方法可以解决我的问题,Apple 可能不会反对? 例如,我可以创建一个 UIViewController,调整它的大小并定位它(我不知道如何做到这一点)来模拟弹出窗口?

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

回答我自己的问题:我用来解决这个问题的解决方案是使用不同的 SKViews。 一个 SKView 呈现主场景,另一个 SKView 呈现弹出场景。 您可以调整第二个 SKView 的大小,甚至可以使其背景透明。 与此视图中的对象交互将正确调用所呈现场景的类中的 touches 方法 - 即此弹出窗口在创建时进行处理,并且在视图控制器或主程序上没有其他代码处理它 -场景的逻辑(所有代码,包括创建对象和处理触摸)都在第二个 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];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM