Ios CCSprite中特定像素的RGBA(需要很多时间)

Ios CCSprite中特定像素的RGBA(需要很多时间),ios,cocos2d-iphone,ccsprite,Ios,Cocos2d Iphone,Ccsprite,我尝试过McDevon()的方法,但是它花费了太多的时间来处理,所以我的应用程序缺乏流畅的运行 我的应用程序有一些片段可以通过用户触摸在屏幕上移动。我想检查每一个移动,如果像素是某种颜色 当我尝试McDevon时,该应用程序开始跳过精灵的一些动作,几乎只打印其最终移动位置 这是麦克德文的: -(BOOL)checkPixel: (CCSprite*)background : (CGFloat)x :(CGFloat)y{ BOOL result = FALSE; CGPoint locatio

我尝试过McDevon()的方法,但是它花费了太多的时间来处理,所以我的应用程序缺乏流畅的运行

我的应用程序有一些片段可以通过用户触摸在屏幕上移动。我想检查每一个移动,如果像素是某种颜色

当我尝试McDevon时,该应用程序开始跳过精灵的一些动作,几乎只打印其最终移动位置

这是麦克德文的:

-(BOOL)checkPixel: (CCSprite*)background : (CGFloat)x :(CGFloat)y{
BOOL result = FALSE;

CGPoint location;
location = ccp(x * CC_CONTENT_SCALE_FACTOR(), y * CC_CONTENT_SCALE_FACTOR());

UInt8 data[4];

CCRenderTexture* renderTexture = [[CCRenderTexture alloc] initWithWidth:background.boundingBox.size.width * CC_CONTENT_SCALE_FACTOR()
                                                                 height:background.boundingBox.size.height * CC_CONTENT_SCALE_FACTOR()
                                                            pixelFormat:kCCTexture2DPixelFormat_RGBA8888];

[renderTexture begin];
[background draw];

glReadPixels((GLint)location.x,(GLint)location.y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, data);

[renderTexture end];
[renderTexture release];

NSLog(@"R: %d, G: %d, B: %d, A: %d", data[0], data[1], data[2], data[3]);

if((data[0]==0)&&(data[1]==0)&&(data[2]==0)){
    result = TRUE;
}

return result;
}

这是我的一段代码:

    futurePos = ccpAdd(sprite.position, translation);

    // Check Area on pixels
    if([self checkPixel:background :futurePos.x :futurePos.y]){
            sprite.position = futurePos;
    }
有什么办法让它更快/更平滑吗? 谢谢

最佳解决方案:

我将原始图像数据提取到8位数组中。但我现在使用的不是24位(RGB)图像,而是单色位图图像


超快。我只需要将图像层转换为单个bmp文件。

从帧缓冲区读取像素的速度很慢。更改算法,使您不需要依赖纹理/帧缓冲区数据。例如,为正在使用的图像创建一个黑白蒙版,并将其加载到内存中的(位)数组中,而不是作为纹理加载,然后您可以使用“位置”来索引数组中的特定蒙版位。好主意!我会尝试一下,把它贴在这里!谢谢LearnCos2D,你有我可以学习的帖子或文章吗?谢谢