Ios CCSprite中特定像素的RGBA(需要很多时间)
我尝试过McDevon()的方法,但是它花费了太多的时间来处理,所以我的应用程序缺乏流畅的运行 我的应用程序有一些片段可以通过用户触摸在屏幕上移动。我想检查每一个移动,如果像素是某种颜色 当我尝试McDevon时,该应用程序开始跳过精灵的一些动作,几乎只打印其最终移动位置 这是麦克德文的: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
-(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,你有我可以学习的帖子或文章吗?谢谢