如何使用 Sprite Kit 在 iOS 中创建 alpha 遮罩

2023-11-27

我想要达到的效果是在黑暗区域中有一个光圈。其效果类似于口袋妖怪游戏中的效果,当你处于黑暗的洞穴中并且周围的视野有限时。根据我的尝试和阅读,我无法在具有 alpha 级别的精灵套件中的节点上创建遮罩。我设法创建的蒙版都有硬边,而且基本上只是裁剪。在苹果开发者页面上阅读有关 SKCropNode 的信息,该节点具有 maskNode 属性,它表示“如果蒙版中的像素的 alpha 值小于 0.05,则图像像素将被屏蔽。”不幸的是,在我看来,像素要么被完全屏蔽,要么完全包含在内,中间没有 alpha 值。如果我想说的话很难理解,下面是我所取得的成就的图片:https://www.dropbox.com/s/y5gbk8qvuq4ynh0/iOS%20Simulator%20 Screen%20shot%20 Jan%2020%2C%202014%201.06.23%20 PM.png

这是我想要实现的目标的图像:https://www.dropbox.com/s/wtwfdi1mjs2n8e6/iOS%20Simulator%20 Screen%20shot%20 Jan%2020%2C%202014%201.05.54%20 PM.png

我设法获得上述结果的方法是,我屏蔽了硬边圆,然后添加一个具有从外部黑色到内部透明渐变的图像。这种方法行不通的原因是因为我需要有多个圆圈,而使用我刚才提到的方法,当圆圈相交时,可以看到透明圆圈外面的黑暗。

总之,我需要一种方法,让圆圈从中心开始变暗,然后逐渐淡出。然后,让它在圆圈较暗的地方,可以看到其后面的图像,在圆圈透明的地方,看不到其后面的图像。再次抱歉,如果我所说的很难理解。这是我正在使用的代码。其中一些是从其他帖子中找到的。

SKSpriteNode *background = [SKSpriteNode spriteNodeWithColor:[SKColor redColor] size:CGSizeMake(500, 500)];
    background.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));

    SKCropNode *cropNode = [[SKCropNode alloc] init];
    SKNode *area = [[SKNode alloc] init];

    int x = 65; //radius of the circle

    _circleMask = [[SKShapeNode alloc ]init];
    CGMutablePathRef circle = CGPathCreateMutable();
    CGPathAddArc(circle, NULL, 0, 0, x/2, 0, M_PI*2, YES);
    _circleMask.path = circle;
    _circleMask.lineWidth = x*2;
    _circleMask.strokeColor = [SKColor whiteColor];
    _circleMask.name=@"circleMask";
    _circleMask.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));

//Here is where I just added in the gradient circle To give the desired appearance, but this isn't necessary to the code
    //_circleDark = [SKSpriteNode spriteNodeWithImageNamed:@"GradientCircle"];
    //_circleDark.position = [cropNode convertPoint:_circleMask.position fromNode:area];

    [area addChild:_circleMask];

    [cropNode setMaskNode:area];
    [cropNode addChild:background];
    //[cropNode addChild:_circleDark];

    [self addChild:cropNode];

这种方法还允许我移动圆圈,显示其后面图像的不同部分,这就是我想要的。为此,我只需将其设置为在用户点击屏幕时更改 _circleMask.position 。

另外,为了澄清这一点,以防有人感到困惑,黑色只是场景的背景颜色,图片位于其之上,然后圆圈是蒙版节点的一部分。


一个非常简单(可能性能较差或性能更高)的版本是简单地在顶部添加一个 SKSpriteNode,它在透明背景上显示你的小插图。换句话说,如果在 Photoshop 中查看,随着从中心向外,您会看到圆圈中可见的棋盘数量逐渐减少,最终显示纯黑色。当您的应用程序中使用 PNG 图像时,在合成两个精灵时将保留这种透明度。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Sprite Kit 在 iOS 中创建 alpha 遮罩 的相关文章

  • iOS 上 Safari 中的 shift 键

    有没有办法在javascript中判断手机键盘上是否按下了shift键 并将其与大写锁定 按两次shift键 区分开来 一些事实 首先 让我们看一下有关 iOS 键盘的一些事实 我假设您已经知道了 当您进入键盘模式时 shift键始终处于激
  • 在 Pages 文稿中打开文本—Swift

    在我的 Swift 2 应用程序中 用户通过文本字段创建一串文本 然后将其共享给另一个应用程序 现在 我只能将文本共享为 txt 文件 这不提供选项Open In Pages当我打开系统共享对话框时 如何才能让用户可以选择将输入的文本作为
  • Swift try inside Objective-C 块

    我需要创建一个函数foo它接受一个抛出闭包作为参数 我可以使用 Swift 或 ObjC 来实现它 但我需要能够从两者中调用它 像这样 Swift func bar throws func foo block throws gt void
  • iOS FacebookSDK + 解析 SDK + GoogleMaps SDK

    我搜索了很多 然后我意识到 ObjC标记那个GoogleMapSDK需要 但不能很好地配合ParseSDK and FacebookSDK 所以我阅读了所有的 stackoverflow 答案并尝试解决我的问题 问题还没有解决 我执行的步骤
  • iOS 确定视频中的帧数

    如果我有一个 Swift 中的 MPMoviePlayerController MPMoviePlayerController mp MPMoviePlayerController contentURL url 有没有办法获取视频中的帧数u
  • Swift:Tableview 在导航栏下方滚动但在状态栏上方滚动?

    我使用以下技巧隐藏了导航栏的阴影 self navigationController navigationBar setBackgroundImage UIImage for default self navigationControlle
  • 如何在导航栏上添加 UIView?

    我需要覆盖UINavigationBar with UIView像这儿 除了使用带有按钮返回的自定义 UIView 作为导航栏之外 还有其他方法可以做到这一点吗 您可以将子视图添加到应用程序的基本视图 UIApplication share
  • 使用 JSONKit 解析 JSON 文件

    我正在构建一个音叉应用程序 货叉应允许最多 12 个预设节距 此外 我希望允许用户选择一个主题 每个主题都会加载一组预设 不必使用所有预设 我的配置文件看起来像这样 theme A3 comment An octave below conc
  • 单击按钮时退出应用程序 - iOS [重复]

    这个问题在这里已经有答案了 可能的重复 iOS 4 0 中退出应用程序 https stackoverflow com questions 3097244 exit application in ios 4 0 我有一个 AlertView
  • 在 Xcode 中查找未使用的文件

    我最近开始开发一个新应用程序 它基本上是我以前制作的应用程序的副本 但做了一些更改 为了制作这个新应用程序 我复制了旧应用程序并删除了一些不需要的内容 我想知道 有没有办法知道 Xcode 中正在使用哪些类文件 或者有什么关于如何查找未使用
  • Apple 由于崩溃而拒绝了我的应用程序,无法重现它

    我刚刚上传了一个应用程序到应用程序商店 它是为ios 7开发的 他们拒绝了该应用程序 因为我无法重现崩溃 他们向我发送了这份崩溃报告 Exception Type EXC BAD ACCESS SIGSEGV Exception Subty
  • Grand Central Dispatch (GCD) 调度源标志

    我最近不再使用 to GCD 调度来源 https developer apple com documentation dispatch 1385630 dispatch source create监视文件更改 效果很好 API 也变得更加
  • iOS - 在相机上放置自定义叠加层(垂直对齐)。顶部黑条的大小

    我正在寻找以下问题的编程解决方案 我想在相机 iOS 上绘制自定义叠加层 我希望它位于相机输出视图的垂直中央 我已经完成了相对于屏幕而不是相机图片居中绘制自定义视图 为此 我需要获得顶部黑条的大小 我怎么才能得到它 顶部和底部栏的大小不相等
  • UIScrollView 与 UITabBarController 切断

    我有一个 UIScrollView 我将其放置在视图中 界面生成器文档 xib m h 但是 UIScrollView 的下半部分被剪切 并且由于我有一个 UITabBarController 而没有显示其下半部分 我在 appdelega
  • iOS绘图3D图形库[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在搜索一个可以帮助我绘制 3D 图表的库 我想要类似的东西这一页 http www math uri edu bkaskosz fla
  • 使用标识符启动 iPhone 应用程序

    我正在尝试在我的应用程序中启动应用程序 例如 如果我按下 testApp1 中的按钮 它应该打开 testApp2 有没有办法用应用程序标识符来做到这一点 我听说过一种名为的未记录方法launchApplicationWithIdentif
  • 自动生成的 Swift 桥接标头中“找不到接口声明”

    我当前的项目包含 Swift 和 Objective C 代码 两种类型的源文件都使用另一种语言的代码 当我进行完全清理并重新编译时 几乎每个 Swift 类声明都出现错误Module Swift h 形式为 Cannot find int
  • Swift - 保存在 TableView 中选择的复选标记

    我对 Swift 相当陌生 并且在 TableView 多重选择方面遇到问题 我有多个选择 可以用复选标记进行检查 类似于待办事项列表 当我检查项目时 我希望能够返回 ListView 并保存我的选择 我假设将其保持在已保存状态的代码将位于
  • Facebook 登录打开错误的应用程序

    我正在尝试使用 facebook 实现应用程序的登录 但每次我尝试登录时 它都建议打开错误的应用程序 我尝试了一些在这里找到的东西 但没有成功 在 Facebook 的开发者页面上我添加了一个后缀 我的 plist 如下 有谁知道发生了什么
  • 如何制作像 Facebook 应用程序一样的登录屏幕?

    如何制作像 Facebook 应用程序一样带有 电子邮件 和 密码 文本字段的登录屏幕 Facebook登入 http extdesenv com wp content uploads 2012 05 facebook login ios

随机推荐

  • 在管道中并行限制詹金斯

    我通过下面的代码看到了这条消息 在JENKINS 44085 如果我已经有一个包含 50 个项目的分支图 但我想一次并行 5 个项目 我需要如何修改此代码 我的代码已经在名为branches 的 var 中包含了 50 个项目的映射 put
  • 从 HTML 链接时,javascript 文件不工作

    所以我觉得 并希望 这很简单 我是 javascript 新手 正在尝试让它工作 当我从 html 链接到外部 js 文件时 它不起作用 但是 当将脚本代码直接输入到我的 HTML 中时 它确实可以工作 这是js文件 document re
  • 如何在 ASP.NET MVC Web API 中修剪模型的空间

    修剪传递给 MVC Web api 的模型的所有属性的最佳方法是什么 带有复杂对象的 post 方法 可以做的一件事就是在所有属性的 getter 中调用 Trim 函数 但是 我真的不喜欢这样 我想要一种简单的方法 就像这里提到的 MVC
  • 浮点运算:为什么加法顺序很重要?

    我知道不可能用有限的位数将所有数字表示为任意精度 并且浮点数的简单比较是不可取的 但我希望如果我将许多数字加在一起 order 我在其中添加它们并不重要 为了测试这个预测 我创建了一个随机数向量并计算它们的总和 然后对向量进行排序并再次计算
  • 如何将 与远程文件一起使用?

    我有一个专门用于静态内容的服务器 所以我不想使用资源目录来存储 javascript 文件 但我不想停止使用
  • 使用作用域时,$dialog 中的 ngModel 字段不会更新 ngDialog $scope 变量:$scope

    我有一个使用 ngDialog open 创建对话框的控制器 我在弹出的 dialog 中分配范围 scope 并使用 ng model 设置范围变量 但是 这些值并未在控制器 scope 中设置 ng click 函数能够调用 scope
  • SSL:为什么 Chrome 会报告混合内容? (德鲁帕尔 6)

    我刚刚有一个网站运行良好 整个网站都通过 SSL 运行 但 Google Chrome 抛出一条 此页面包含一些不安全元素 消息 这对于最终用户的可信度来说并不好 所有其他浏览器都工作正常 并给出金色挂锁 该网站是一个 Drupal 6 电
  • 在 Windows 上为 Mac OS X 开发?

    嗯 简单的情况 我碰巧是一名软件工程师 主要使用 Delphi 和 C 进行软件开发 Delphi 非常适合桌面应用程序 而 C 则非常适合与 ASP NET 结合用于 Web 应用程序 不过 我正在考虑自学更多有关 Mac 软件开发的知识
  • 在 Internet Explorer 中查看 HttpOnly 会话 cookie

    使用 Internet 选项 我可以看到所有持久 cookie 使用开发人员工具 我可以看到所有 JS 可访问的会话 cookie 似乎没有办法查看 HTTPOnly 会话 cookie 在 Firefox 中 有许多选项 内置选项和 Fi
  • 如何从android代码中知道路由器的IP地址?

    如何从代码中找到路由器的IP地址 网关地址 WifiInfo getIpAddress 返回设备的 IP 地址 在 shell 命令中 ipconfig 不返回任何值 这是我的解决方案 但如果有更好的方法 请告诉我 WifiManager
  • Matplotlib 按分类因素散布颜色

    我有一个基本的散点图 其中 x 和 y 是浮动的 但我想根据第三个分类变量更改标记的颜色 分类变量是字符串形式 这似乎引起了一个问题 要使用 iris 数据集 这是我想我会使用的代码 Scatter of Petal x df Petal
  • 去模板名称

    In the html template and text template 包 template New有以下签名 func New name string Template 到底是什么name用于 我已经扫描了文档 以及一些源代码 但无
  • 是否可以在主机上运行部分作业,在从机上运行另一部分?

    我是詹金斯的新手 我有一个要求 我需要在主节点上运行部分作业 而在从属节点上运行其余部分 我尝试在论坛上搜索 但找不到与此相关的任何内容 是否有可能做到这一点 如果没有 我将不得不将其分成两个单独的工作 EDIT 基本上我的工作是从 svn
  • MAC地址在C代码中的表示

    我经常在 C 代码中看到这样的 MAC 地址表示 struct mac addr unsigned char bytes 6 为什么需要将数组放入结构体中 为什么不直接使用数组呢 这有什么好处 Thanks 您不能在 C 中分配数组 但可以
  • 警告:缺少参数 1

    我的 php 代码遇到一些问题 所有信息都返回 但我无法弄清楚为什么会收到错误 对于我的索引页 我只包含了实际使用该类的代码行 除了一些包含之外 实际上没有其他代码 我确信这就是我构建 contstruct 的方式 但我不确定这样做的适当方
  • 向左而不是向右溢出

    我有一个 divoverflow hidden 其中我在用户键入时显示电话号码 div 内的文本向右对齐 并且当文本向左增长时 传入字符将添加到右侧 但是 一旦文本太大而无法放入 div 中 数字的最后一个字符将被自动裁剪 用户将无法看到她
  • Paypal 嵌入式流程不使用 returnUrl 或 cancelUrl

    我正在使用 Paypals 自适应支付和嵌入式流程功能通过迷你浏览器提供结账服务 在沙箱环境中 一切似乎都工作正常 除了付款成功完成后 用户永远不会重定向到我在 PAY API 请求中设置的 returnUrl 我的cancelUrl 也是
  • React Apollo 客户端不发送 cookie

    我尝试按照 Apollo 客户端上的说明与 graphql 请求一起发送 cookie 但是 Express 服务器没有收到任何 cookie 并且当我检查请求时 它显示没有随响应一起发送 cookie 关注此页面 https www ap
  • 使用 util 模式自动装配列表会出现 NoSuchBeanDefinitionException

    我有一个 bean 我想使用 Spring util 命名空间注入一个命名列表
  • 如何使用 Sprite Kit 在 iOS 中创建 alpha 遮罩

    我想要达到的效果是在黑暗区域中有一个光圈 其效果类似于口袋妖怪游戏中的效果 当你处于黑暗的洞穴中并且周围的视野有限时 根据我的尝试和阅读 我无法在具有 alpha 级别的精灵套件中的节点上创建遮罩 我设法创建的蒙版都有硬边 而且基本上只是裁