在游戏结束场景中使用视图控制器

2024-03-04

我需要在碰撞检测后为我的应用程序制作一个结束屏幕。使用按钮使结束屏幕返回主菜单/游戏的最简单方法是什么?我可以使用ViewController?我读过很多教程、视频以及这里的所有帖子:

这是我当前的代码(并非全部,只是一些重要的事情):

@implementation MyScene

static const int squirrelHitCategory = 1;
static const int nutHitCategory = 2;

- (instancetype)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
    self.physicsWorld.contactDelegate = self;

    _squirrelSprite = [SKSpriteNode spriteNodeWithImageNamed:@"squirrel"];
    _squirrelSprite.position = _firstPosition;
    _atFirstPosition = YES;

    _squirrelSprite.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:10];
    _squirrelSprite.physicsBody.categoryBitMask = squirrelHitCategory;
    _squirrelSprite.physicsBody.contactTestBitMask = nutHitCategory;
    _squirrelSprite.physicsBody.collisionBitMask =  nutHitCategory;

    _squirrelSprite.physicsBody.affectedByGravity = NO;

    self.physicsWorld.contactDelegate = self;

    [self addChild:_squirrelSprite];

    SKAction *wait = [SKAction waitForDuration:3.0];

        SKSpriteNode *lightnut = [SKSpriteNode spriteNodeWithImageNamed:@"lightnut.png"];

        lightnut.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(200,160)];

        lightnut.physicsBody.categoryBitMask = nutHitCategory;
        lightnut.physicsBody.contactTestBitMask = squirrelHitCategory;
        lightnut.physicsBody.collisionBitMask =  squirrelHitCategory;

        lightnut.physicsBody.affectedByGravity = NO;

        self.physicsWorld.contactDelegate = self;

        [self addChild: lightnut];

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
// Check time since the last touch event
if (touch.timestamp-_lastTouch >= .9) {
    // Allow touch
    NSLog(@"greater than or equal to 3 seconds");

    if (_atFirstPosition)
    {
        SKAction *moveNodeLeft = [SKAction moveByX:-207.8 y:0.0 duration:0.85];
        [_squirrelSprite runAction: moveNodeLeft withKey:@"moveleft"];
    } else {
        SKAction *moveNodeRight = [SKAction moveByX:207.8 y:0.0 duration:0.85];
        [_squirrelSprite runAction: moveNodeRight withKey:@"moveright"];
    }
    _atFirstPosition = !_atFirstPosition;
    _squirrelSprite.xScale *= -1.0;
}
else {
    // Ignore touch
    NSLog(@"Seconds since last touch %g",touch.timestamp-_lastTouch);
}
// Store timestamp
_lastTouch = touch.timestamp;

}

-(void)didBeginContact:(SKPhysicsContact *)contact

{
NSLog(@"contact detected");
SKPhysicsBody *firstBody, *secondBody;

firstBody = contact.bodyA;
secondBody = contact.bodyB;

if(firstBody.categoryBitMask == squirrelHitCategory || secondBody.categoryBitMask == nutHitCategory)
{

}
}

我希望我的片尾画面简单,所以最简单的方法就是最好的。谢谢你!


对于我的游戏,我添加了 UIViewController 属性并将其分配给 SKScene。

然后您可以将视图添加为子视图。例子...

SKScene *scene = [SKScene sceneWithSize:self.view.frame.size];
scene.viewController = self;

然后在你的场景中...

[self.viewController addSubview:yourView];

以下是我自己的一些游戏实现,可以帮助您入门。

在您的故事板或 XIB 中,无论您喜欢什么,您都可以添加一个带有按钮作为视图属性的视图。就我而言,我有一个 ScoreLabel、一个 menuButton 和一个 restartButton 作为属性,并且可以将它们全部设置为 x.hidden = YES;如我所愿,通过在场景中触发它们,例如......

self.vc.menuButton.hidden = YES;
self.vc.restartButton.hidden = YES;

在你的 GameViewController (它是 UIViewController 的子类)中......

//header
@interface GameViewController : UIViewController

@property (weak, nonatomic) IBOutlet UILabel *scoreLabel;
@property (weak, nonatomic) IBOutlet UIView *hudView;
@property (weak, nonatomic) IBOutlet UIButton *menuButton;
@property (weak, nonatomic) IBOutlet UIButton *restartButton;

@property (nonatomic) MazeScene *maze;

@end

//class
- (void)viewDidLoad
{
    [super viewDidLoad];

    // Configure the view.
    SKView * skView = (SKView *)self.view;

    // Debug Options
//    skView.showsFPS = YES;
//    skView.showsNodeCount = YES;
//    skView.showsPhysics = YES;

    // Create and configure the maze scene.
    CGSize sceneSize = skView.bounds.size;
    skView.ignoresSiblingOrder = YES;

    MazeScene *maze = [[MazeScene alloc] initWithSize:sceneSize];
    maze.scaleMode = SKSceneScaleModeAspectFill;
    maze.vc = self;
    [skView presentScene:maze];
    _maze = maze;
}

在你的 SKScene 中...

//header
@interface MazeScene : SKScene <SKPhysicsContactDelegate>

@property (nonatomic, weak) GameViewController *vc;

@end

//class
-(id) initWithSize:(CGSize)size {
    if (self = [super initWithSize:size]) {
        //(GameViewController*) is a static cast of a subclass of UIViewController.
        [self.view addSubview:((GameViewController*)self.vc).hudView];
        // [self restartGame] is a specific method for my game, don't worry about it
        [self restartGame];
    }
    return self;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在游戏结束场景中使用视图控制器 的相关文章

  • 在 iOS safari 中禁用选择上下文菜单

    我想禁用在 iOS Safari 网络浏览器 中选择特定文本后出现的默认上下文菜单 那可能吗 这是可能的 请参阅这个例子 http jsfiddle net z9ZNU 基本上 重要的部分是设置正确的 css 属性 body webkit
  • 当我打开特定的 XIB 文件时,Xcode 崩溃

    I had a XIB文件一直运行良好 直到今天 当我尝试在 Xcode 中打开它时 沙滩球出现 1 分钟后 Xcode 崩溃 其他的XIBs工作得很好 另外 如果我只是在我的设备上构建并运行项目 它也可以工作 并且 XIB 在应用程序中工
  • 如何在 iOS 上的视图之间进行展开/收缩转换?

    我正在尝试在 iOS 中制作过渡动画 其中视图或视图控制器似乎扩展以填充整个屏幕 然后在完成后收缩回原来的位置 我不确定这种类型的转换的正式名称是什么 但您可以在 iPad 版 YouTube 应用中查看示例 当您点击网格上的搜索结果缩略图
  • 从 Google/Facebook 帐户重新验证用户身份

    因此 我需要创建一个 REST API 来为 IOS 应用程序提供功能 我们允许用户仅使用普通帐户或使用脸书 谷歌登录 我最近一直在阅读 OAuth 我想我了解在我的情况下如何使用 OAuth 的过程 当用户使用脸书 谷歌登录 在我的应用程
  • 创建宏来执行默认初始化

    我有很多重复这个简单样板的方法 id myObject if myObject self myObject myObject class new return myObject 所以我想用一个简单的宏来替换它 define default
  • 更新到 Xcode 7.0.1,项目现在有问题

    因此 我将 Xcode 6 1 版本上传到 iTunes Connect 并且该应用程序获得了批准 现在我正在尝试更新应用程序 我更新到 Xcode 7 0 1 Xcode 给我带来了问题 指出 对于应用程序 我使用了故事板和 Object
  • 使用 UINavigationController 从右向左推送 ViewController

    大家都知道UINavigationController从左到右推送ViewController 有没有办法从右到左推送View 就像后退按钮的动画一样 现在我有这个 self navigationController pushViewCon
  • NSMutableData 删除字节?

    我可以使用以下命令轻松地将字节添加到 NSMutableData 实例appendData方法 但是我没有看到任何类似的删除数据的方法 我是否忽略了某些内容 或者我是否需要创建一个新对象并仅复制我需要的字节 请参阅以下方法的文档 void
  • 当 iPhone 设备方向朝上/朝下时,我可以判断它是横向还是纵向吗?

    我得到这个代码 如果设备处于左 右横向或上下颠倒状态 它会旋转并显示另一个视图控制器 但如果它的方向朝上或朝下 那么我如何判断它是横向模式还是纵向模式 因为我只想在它面朝上或朝下以及横向模式下旋转 void viewDidAppear BO
  • 如何使用 HTTP 标头发送非英语 unicode 字符串?

    我是 HTTP 相关问题的新手 我的问题是在 iOS 开发中 我想使用 HTTP 标头发送一个字符串 所以我使用 httpRequest setValue nonEnglishString forHTTPHeaderField custom
  • 连接到 Apple Music

    所以我尝试使用 React Native 应用程序从 iOS 设备连接到 Apple Music 有一个 API 可以执行相同的操作 但我需要从 storekit 框架调用一个函数 提出个性化请求 苹果音乐API https develop
  • Xcode 本地化设置中没有加号或减号按钮

    我需要在两天内翻译 iOS 应用程序 但我的 XCode 版本 4 4 和 4 5 Developer Preview 都没有给我添加其他语言的选项 我只能选择单击 Make localized 但我只能选择英语 选择它后 Xcode 中的
  • 获取 Swift 子目录中资源的所有 URL

    我正在尝试为 iOS 应用程序的子目录中的所有资源创建 URL 数组 我似乎无法到达正确的路径 即使我不知道名称 我也希望能够检索 URL 即我不想将文件名硬编码到代码中 Below is a screen shot of the hier
  • SDWebImage 显示缓存中图像的占位符

    在 iOS 5 1 项目 iPad 中使用 SDWebImage 3 我们展示相当大的图像 700x500 并且我们有很多图像 1000 我们预取图像并缓存到磁盘 然后允许用户浏览它们 效果很好 除了当您浏览图像时 您总是会看到占位符显示一
  • iOS:addConstraints:应用程序崩溃

    Problem 我似乎无法在现有项目中采用自动布局 Details 我之前也遇到过与此问题相同的问题presentViewController 在 iOS 但所提供的答案都不是我的解决方案 我正在使用所有没有 xib 的故事板视图 我的 使
  • UINavigationController 在后退按钮单击时向下滚动

    我正在开发一个带有多个导航控制器的 iPhone iPad 应用程序 当我在设备处于横向模式时单击视图的后退按钮时 前一个视图会垂直滚动到屏幕中 而不是像往常一样水平滚动 推送动画始终水平工作 正如它应该的那样 是什么导致了这个奇怪的问题
  • 在应用程序内启用或禁用 Iphone 推送通知

    我有一个 iPhone 应用程序 可以接收推送通知 目前 我可以通过转到 iPhone 设置 通知来禁用我的应用程序的推送通知 但我想在我的应用程序中添加一个开关或按钮来启用或禁用推送通知 这是可以做到的 因为我在 foursquare i
  • NSURLConnection 是否自动保留从服务器发送的 cookie?

    我从 ios 登录到我的龙卷风后端并发回 secure cookie 我注意到只要验证我设置的 secure cookie 我还可以请求其他信息 NSURLConnection 会保留 cookie 多久 或者关闭应用程序后 cookie
  • Swift 3 和 Xcode8 - init 的使用不明确

    在我安装 Xcode 8 并将项目转换为 Swift 3 之前 以下行没问题 现在转换后看起来像这样 let valueData Data Data bytes UnsafePointer
  • 如何将 NSAppTransportSecurity 添加到 Cordova 项目

    我正在从事一个 ionic cordova 项目 该应用程序需要配置 iOS 9 版本的应用程序传输安全例外 有谁知道如何将以下配置添加到 cordova 项目配置文件中 配置 xml

随机推荐

  • R data.table 使用 lapply 创建自定义函数来创建和重新分配多个变量

    我有以下几行代码 DT flag T temp haz 1 5 DT temp na locf temp na rm FALSE pid DT agedays 61 haz 1 5 1 temp 我需要将其转换为一个函数 以便它可以处理一系
  • 哪种报告技术? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 哪种报告技术最适合最佳情况 产品类型 我现在在想3技术 嵌入式报告 Crystal Reports M
  • codeigniter + 密码需要字母和数字

    我想使用表单验证来要求同时包含字母和数字字符的密码 到目前为止 这是我想到的 this gt form validation gt set rules password Password required matches passconf
  • Rust musl Docker 镜像找不到 Cargo

    我正在尝试让 Rust 在 Docker 中运行 以将其用于 32 位 musl 构建 自从我更新它以使用新的 URL 来拉 rustup 后 我在使用 bash 交互运行容器时遇到了这个问题 root 2c3549fe3169 sampl
  • Sqlite:自己行中的小计又名“汇总”

    我正在寻找一种方法来模拟其他基于 sql 的 dbms 中可用的 汇总 需要明确的是 我知道如何获得运行小计 这是not我在追求什么 我也知道我可以通过编程来做到这一点 但是 如果可以使用一个 或几个 sql 语句来完成 我宁愿这样做 例如
  • Eclipse - 期间发生内部错误:“计算启动按钮工具提示”

    我早些时候启动了 Eclipse 来记下一个片段 当我尝试运行一个新项目时 遇到了以下错误 期间发生内部错误 计算启动按钮工具提示 当我将鼠标悬停在顶部栏中的运行图标上时 或者右键单击资源管理器窗口中的类并选择任何运行 调试选项时 就会显示
  • scipy 中 line_search 的示例

    我正在寻找使用的例子scipy optimize line search 我不太明白这个函数如何与多变量函数一起使用 我写了一个简单的例子 import scipy as sp import scipy optimize def test
  • 如何在 Seaside 回调中访问 jQuery 事件对象

    基本上 我想将以下内容翻译成 Seaside Smalltalk myDiv bind click function e console log e 除此之外我不想console log事件 但在我的 ajax 回调中访问它 最有希望的方法
  • 返回上一页适用于模拟器,不适用于 iOS 设备 jquerymobile

    我正在用这种方法更改页面 mobile changePage Preview html transition slide role page changeHash true 这就是我的预览页面的样子 div class prew div c
  • 如何将字典写入文件?

    我有一个 FileHelper 类 其中实现了 3 个方法 其工作是将字典内容写入文件 这些方法是 func storeDictionary dictionary Dictionary
  • JavaConfig:替换 aop:advisor 和 tx:advice

    我想知道是否可以将这段 xml 配置映射到 Spring JavaConfig
  • AES256EncryptWithKey 方法的 openssl 等效项

    如何使用命令行 openssl 获得与以下 Objective C 加密方法相同的结果 NSData AES256EncryptWithKey NSString key NSData returnData nil char keyPtr k
  • 根据日期显示/隐藏 div

    我正在尝试根据日期显示隐藏 div 并尝试使用以下代码
  • 工作流程单元测试

    如何对 Windows 工作流程进行单元测试 K 斯科特 艾伦 已发布this http odetocode com Blogs scott archive 2006 08 02 5492 aspx 它提供了一种对自定义活动进行单元测试的方
  • Objective-C 到 Swift 的完成处理程序

    我目前正在将一个项目从 Objective C 重写为 Swift 项目的大部分已完成 但我在翻译具有完成处理程序的方法时遇到问题 我已经查看了文档 但仍然遇到问题 方法是 void start void WTStartupConfigur
  • ADO.NET CommandBuilder、InsertCommand 和默认约束

    我正在将数据从表 A 复制到表 B 表 B 有一个nullable列有一个默认约束值为 0 一般来说 我使用以下访问器设置列的值 public object this string columnName get return DataTab
  • 了解 Linux 内核调度程序

    我正在研究 Linux 内核 并试图弄清楚循环调度算法是如何工作的 在里面kernel sched rt c文件中 有一个方法叫做task tick rt定义如下 static void task tick rt struct rq rq
  • 如何使用 Chocolatey 非交互方式安装 VS Build Tools 2022 以及一些自定义安装选项?

    我想安装带有以下组件的 VS Build Tool 2022 NET Desktop Build Tools 排除 Net Framework 4 8 目 标包 Web 开发构建工具 Node js Build Tools 包括可选的 我目
  • 无法在 eclipse 中配置 Facebook SDK

    我根据facebook教程完成了关于如何配置facebook SDK的所有步骤 并且没有任何运气 还尝试了github配置 如图所示Eclipse 上的 Android Facebook SDK 配置 https stackoverflow
  • 在游戏结束场景中使用视图控制器

    我需要在碰撞检测后为我的应用程序制作一个结束屏幕 使用按钮使结束屏幕返回主菜单 游戏的最简单方法是什么 我可以使用ViewController 我读过很多教程 视频以及这里的所有帖子 这是我当前的代码 并非全部 只是一些重要的事情 impl