0

我一直在尝试找出 UIImage 一段时间。我一直在尝试找出一种方法来查看“主游戏视图”并根据“级别”变量显示 2/3/4 个不同的图像。我只是想确定逻辑。例如,级别 1 会显示 4 张图片,级别 2 可能会显示 3 张不同的图片。我不想妨碍应用程序的性能,但因为游戏是离线玩的,存档不会有太大的不同,所有图像(数百个优化图像)都本地存储在主应用程序包中。

我只是想知道我到目前为止尝试实现这一点的逻辑是否合理。对于级别 1,我将实现所需的 4 个 UIImageViews 并使用图像对其进行初始化,然后将它们显示在屏幕上的设定位置。然后我会使用 GCD 预加载下一个级别的图像。当按下继续按钮时,我会将 UIImages 和 UIImageViews 设置为 nil 并在屏幕上显示级别 2(或下一个级别)。

我对我的方法没有信心,并且想知道是否有一些东西可以使它更简单或者我错过了什么,或者即使在实践中它会根据理论起作用。

提前感谢您的时间和任何帮助。
对不起,如果这不清楚。

4

1 回答 1

0

我假设您为所有关卡使用单个视图控制器类,并从某个 .plist 文件或其他格式加载关卡。

不要打扰使用GCD。在加载过程中每个级别加载 4 张图像几乎没有任何成本。

如果您需要做的只是在每个级别的屏幕上显示 2-4 个图像(除了任何其他级别元素),只需创建 4 个UIImageView实例并将它们添加到您的视图中。然后,当您加载关卡时,UIImage从所需的图像文件创建新对象并将您UIImageViews的图像属性设置为它们。在那一刻,旧级别的UIImage对象将被释放和释放,因为您(和UIImageViews)不再对它们有强引用。

伪实现:

- (void)loadLevel:(int)levelNumber {
    // Assuming you have your image views in an array imageViews.
    // Determine the image files required for this level.
    // Put them into an array imageNames.

    for (int i = 0; i < 4; i++) {
        if (imageNames.count < i) {
            UIImage *image = [UIImage imageNamed:imageNames[i]];
            [self.imageViews[i] setImage:image];
        } else {
            [self.imageViews[i] setImage:nil];
    }
}
于 2013-03-16T13:02:31.733 回答