0

iPod の音楽を再生するときに CCSprite をアルバム アートワーク スプライトにしようとしていますが、問題は、画像を 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];
    }

なぜこれが起こっているのか誰かが知っていますか?もしそうなら、どうすれば修正できますか?

Edit2:これは私が要約したものです:

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];
4

1 に答える 1

2
 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];

これは、スプライトが画像サイズに関係なく、常に 159x139 ピクセルのサイズでレンダリングされることを意味します。

于 2012-01-17T07:04:01.517 に答える