我正在使用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上卸载混合但是同步以获得像素的速度太慢)?
答案 0 :(得分:1)
好吧,如果你“以各种可能的方式优化混合”,你至少会和Core Graphics一样快。这不是魔术;这只是你没写的代码。不过,它可能是非常优化的代码,所以你可以为你完成工作。
或者我应该找到一种方法并分别为每个平台实现混合(使用iOS上的核心图形和Android上的可用内容)?
这就是我要做的。让Apple和Google为您努力工作。
我不是Android开发人员,因此我无法提出任何具体的建议或认可,但您可以尝试the code from this question作为您在Android上需要做的事情的大致概述,或者甚至是什么你需要做的,如果你不需要调整第二个图像的不透明度。