5

我正在使用 Box2D 制作一个应用程序,在该应用程序中我从资源库中获取图像并将它们显示为精灵。

这是我所做的代码:

从资产库中获取图像:

CGImageRef imgRef = [[mutArrAssetPhotos objectAtIndex:i] thumbnail];

创建 Texture2D :

CCTexture2D *spriteTexture = [[CCTexture2D alloc]initWithCGImage:imgRef resolutionType:kCCResolutionUnknown];

从纹理创建精灵:

CCSprite *paddle = [CCSprite spriteWithTexture:spriteTexture];

这 在控制台中给了我警告,例如:

"cocos2d: CCTexture2D: Using RGB565 texture since image has no alpha"

仍然在模拟器中,虽然有警告但它工作正常,但在设备图像中没有显示。

但相反,如果我使用:

CCSprite *paddle = [CCSprite spriteWithFile:@"img.png"];

它工作正常,也没有发出任何警告。

任何人都可以帮忙吗?提前致谢。

4

2 回答 2

3

我已经解决了。不知何故,我设法重新创建了我正在创建精灵的图像。

CGImageRef imgRef = [[mutArrAssetPhotos objectAtIndex:i] thumbnail];
        UIImage *image = [self updateImage:[UIImage imageWithCGImage:imgRef]];
        imgRef = image.CGImage;

        CCSprite *paddle = [CCSprite spriteWithCGImage:image.CGImage key:[NSString stringWithFormat:@"%d",i]];

为了更新图像,我重新绘制它,这样我就不会收到任何 alpha 警告。更新方法是这样的:

-(UIImage *) updateImage:(UIImage *)image
{
    UIImageView *imgView = [[UIImageView alloc] initWithImage:image];
    imgView.frame = CGRectMake(0,50, image.size.width,image.size.height);

    image = [self captureImageFrom:imgView];

    [imgView release];
    return image;
}

-(UIImage *) captureImageFrom:(UIImageView *)view{

    UIGraphicsBeginImageContext(view.frame.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    [view.layer renderInContext:context];
    UIImage *screenShot = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return screenShot;
}
于 2012-09-04T05:01:40.597 回答
0

我认为(找不到文档来确认很难)缩略图改变了图像格式,所以你得到一个普通的无 alpha 图像参考。

尝试使用以下方法创建正确的图像参考:

CGImageRef imgRef = [[[mutArrAssetPhotos objectAtIndex:i] defaultRepresentation] fullResolutionImage];
于 2012-08-28T11:51:45.837 回答