iphone - 如何使用 UIKit/Quartz 在 iPhone 上的纹理上绘制灯光效果

标签 iphone objective-c ipad uikit quartz-graphics

我有一个带有背景图像(明亮的房间)和黑色图像(阴影)的场景。我需要能够在背景上移动手指并显示场景的某些部分,模拟暗室中的昏暗光源。

我当前的方法是根据触摸的位置生成一个蒙版,然后将该蒙版应用于阴影图像。问题是我正在生成一个新的蒙版并在每次收到触摸事件时应用它。这是一个大图像(800x600),这会导致性能下降,并增加大量内存使用量,最终导致游戏崩溃(我认为我没有任何内存泄漏,但这并不能保证......无论如何性能本身是 Not Acceptable )。

谁能想到更好的方法(不涉及使用 OpenGL ES——这不是这个项目中的一个选项)来做到这一点?

最佳答案

与我上面的评论一致。

也许为了解决不同的阴影级别,您还可以在图像和阴影 View 之间有一个 View 网格(正方形)。每个网格方 block 都有不同的 Alpha 不透明度,当光点位于网格方 block 上方时,网格方 block 的 Alpha 不透明度将更改为 0。当光点移出网格方 block 时,其 Alpha 不透明度将变回默认值。

room image with grid views and shadow view

关于iphone - 如何使用 UIKit/Quartz 在 iPhone 上的纹理上绘制灯光效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5916884/

相关文章:

iphone - Twitter 和 FB 集成到 iPhone 应用程序

iphone - @property 中的内存损坏

ios - MFSideMenuContainerViewController 在 iphone sdk 中不起作用

iphone - dispatch_async 是否等到上一行完成后再继续?

objective-c - iOS (iPad) CoreGraphics & Foundation 内存问题

iphone - 初始化后更改 NSMutableURLRequest 的 url

ios - 将框架添加到 Xcode 项目

ios - 将iOS应用程序从32位升级到64位

iphone - 在单点触控应用程序中支持 ios 5

cocoa-touch - MPMoviePlayerController 不可逆地切换到playbackState "paused"