我是使用 sprite kit 开发 iOS 游戏的初学者。我想要显示对象(skspritenodes)的“弹出”菜单,例如每日奖励或设置/暂停菜单。例如,设置弹出窗口应该能够在主屏幕上或在游戏期间访问。目前我有一个 View Controller ,家庭场景和游戏场景是两个不同的 SKScene。对于可重用性(和一个干净的项目,以及学习),我希望这些弹出窗口成为他们自己的类,包括处理触摸。目前,我有一个用于返回 SKNode 的设置弹出窗口的类,并且此 sknode 包含几个 skspritenodes(与弹出设置相对应的按钮/图像,包括启用/禁用声音等)。但是,我必须在我的家庭场景和我的游戏场景中复制触摸代码才能与之交互。 (我目前在每个skscene的touchesbegan方法中,“if nodeSettings !=nil”,检查触摸位置对应的skspritenode的名称,然后调用setting-pop-up类中的方法传递名称skspritenode 单击以处理与弹出窗口的交互)。
就我自己的知识以及为了解决这个问题,我想使用一个可以自己处理触摸逻辑的类(所以在我的游戏或家庭场景中,我唯一要做的就是创建弹出窗口.任何交互,包括解雇,我想在类里面处理。不使用skscene的触摸方法)。我找到了一个“解决方案”:
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。
Best Answer-推荐答案 strong>
回答我自己的问题:我用来解决这个问题的解决方案是使用不同的 SKView。一个 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 套件创建弹出窗口?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/31178840/
|