ios - 改变 CCSprite 的图像会改变它的大小吗?

标签 ios image switch-statement ccsprite

我试图让 CCSprite 成为我的 iPod 音乐播放时的专辑插图 Sprite ,但问题是,当我将图像从 NoImage.png 更改为实际专辑插图时,CCSprite 似乎改变了大小和图像比原来的 CCSprite 小。老实说,我不明白为什么会这样,但也许其他人会这样!

无论如何,这是我如何在 init 方法中创建 CCSprite,

albumArtwork = [[[CCSprite alloc] initWithFile:@"NoImage.png"] autorelease];
        [albumArtwork setScaleX:159 / albumArtwork.contentSize.width];
        [albumArtwork setScaleY:139 / albumArtwork.contentSize.height];
        albumArtwork.position = ccp(320/2, 190);
        [self addChild:albumArtwork z:26];

然后当 iPod 音乐开始时,我这样做是为了将 CCSprite 图像从 NoImage.png 更改为 iPod 歌曲插图:

UIImage *albumArtworkImage = NULL;
    MPMediaItemArtwork *itemArtwork = [currentItem valueForProperty:MPMediaItemPropertyArtwork];
    if (itemArtwork != nil) {
        albumArtworkImage = [itemArtwork imageWithSize:CGSizeMake(albumArtwork.contentSize.width, albumArtwork.contentSize.width)];
    }

    if (albumArtworkImage) {
        CCTexture2D *tex = [[CCTextureCache sharedTextureCache] addCGImage:albumArtworkImage.CGImage forKey:@"albumArtwork"];
        [albumArtwork setTexture: tex];
    } else { // no album artwork
        CCTexture2D *tex = [[CCTextureCache sharedTextureCache] addImage:@"NoImage.png"];
        [albumArtwork setTexture:tex];
    }

有谁知道为什么会这样,如果是这样,我该如何解决?

编辑2: 这就是我将其浓缩为:

CCTexture2D *tex;
    MPMediaItemArtwork *itemArtwork = [currentItem valueForProperty:MPMediaItemPropertyArtwork];
    if (itemArtwork) {
        UIImage *albumArtworkImage = NULL;
        UIImage *firstImage = [itemArtwork imageWithSize:CGSizeMake(159.0f, 139.0f)];
        albumArtworkImage = [firstImage resizedImage:CGSizeMake(albumArtwork.contentSize.width, albumArtwork.contentSize.height) interpolationQuality: kCGInterpolationHigh];
        albumArtworkImage = [albumArtworkImage roundedCornerImage:8 borderSize:4]; 
        tex = [[CCTextureCache sharedTextureCache] addCGImage:albumArtworkImage.CGImage forKey:@"albumArtwork"];
    } else { // no album artwork
        tex = [[CCTextureCache sharedTextureCache] addImage:@"NoImage.png"];
    }
    [albumArtwork setTexture:tex];

最佳答案

 if (albumArtworkImage) {
    CCTexture2D *tex = [[CCTextureCache sharedTextureCache] addCGImage:albumArtworkImage.CGImage forKey:@"albumArtwork"];
    [albumArtwork setTexture: tex];
} else { // no album artwork
    CCTexture2D *tex = [[CCTextureCache sharedTextureCache] addImage:@"NoImage.png"];
    [albumArtwork setTexture:tex];
}
// reset visual size after you set new texture:
[albumArtwork setScaleX:159 / albumArtwork.contentSize.width];
[albumArtwork setScaleY:139 / albumArtwork.contentSize.height];

这意味着无论图像大小如何,您的 Sprite 始终会以 159x139 像素的大小呈现。

关于ios - 改变 CCSprite 的图像会改变它的大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8890734/

相关文章:

c - 如何修复这个开关功能的 "segmentation fault 11"?

c++ - C++ 中的 switch 语句

ruby-on-rails - 不同文件类型的载波文件上传

image - docker-有关命名图像的限制

php - 服务器端的 CSS 亮度/对比度

Java switch 语句无法正常工作

ios - CBPeripheral 与 Windows 的交互

ios - 运行react-native运行ios时,如何配置运行哪个xcodebuild工具版本?

ios - 收藏 View 图像未显示,但 Url 工作正常

ios - 核心数据——多个核心数据模型之间的关系