0

我正在使用 cocos2dx 将 iOS 游戏移植到 Android。游戏的想法是使图像变形并将其实时转换为物理形状。游戏的逻辑是首先使用 CGContextDrawImage 从纹理中创建一个 CGContext,然后使用不同的混合模式操作触摸上下文,如下所示:

  CGContextSetBlendMode(context, kCGBlendModeMultiply);
  CGContextDrawImage(context, rect, texture);

之后,脏像素在纹理中更新:

  glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, w, h, GL_ALPHA, GL_UNSIGNED_BYTE, dirtyPixels);

这在 iOS 上运行良好,但在 Android 上却不行,因为它没有核心图形 (doh)。我正在寻找一种使此代码平台独立的方法,并且由于两个图像的混合非常简单,我的想法是用我自己的代码交换 CGContextDrawImage 以混合内存中的像素。

如果我实现自己的混合像素代码,它会比使用核心图形慢得多(即使我会以各种可能的方式优化混合)还是我应该找到一种方法并分别为每个平台实现混合(使用核心图形在 iOS 上和 Android 上可用的任何东西)?还是有更好的方法(我曾尝试在 GPU 上卸载混合,但恢复像素的同步速度太慢)?

4

1 回答 1

1

好吧,如果你“以各种可能的方式优化混合”,你至少会和 Core Graphics 一样快。这不是魔术。这只是您没有编写的代码。不过,它可能是经过优化的代码,因此您可以为自己完成工作。

还是我应该找到一种方法并分别为每个平台实现混合(使用 iOS 上的核心图形和 Android 上可用的任何东西)?

这就是我要做的。让 Apple 和 Google 为您完成艰苦的工作。

我不是 Android 开发人员,所以我真的不能提出任何具体的建议或认可,但你可以试试这个问题中的代码,作为你需要在 Android 上做什么的粗略概述——甚至是你需要做什么做,如果你不需要调整第二张图片的不透明度。

于 2013-09-17T17:07:03.730 回答