1

可能重复:
如何将 CCSpriteFrame 转换为 CCTexture2D (Cocos2d)

是否可以获取从 CCSpriteFrameCache 获取的 CCSpriteFrame,并将其转换为 CCTexture2D?

我试过这个:

-(id)initWithFile:(NSString*)filename body:(b2Body*)body  original:(BOOL)original
{
    NSAssert(filename != nil, @"Invalid filename for sprite");

    CCTexture2D *texture =  [[[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:filename ]texture];

    return [self initWithTexture:texture body:body original:original];
}     

但在屏幕上显示整个 spritesheet 纹理不仅仅是一帧。

这个链接有一个类似的问题:How to convert a CCSpriteFrame to a CCTexture2D (Cocos2d) 但我没有发现这个链接的答案有帮助。

我也试过这个,但我得到了相同的结果:

-(id)initWithFile:(CCSpriteFrame*)filename body:(b2Body*)body  original:(BOOL)original
{
   NSAssert(filename != nil, @"Invalid filename for sprite");

   CCSprite * sprite_ = [CCSprite spriteWithSpriteFrame:filename];
   CCTexture2D *texture =  [sprite_ texture];
   return [self initWithTexture:texture body:body original:original];

}
4

2 回答 2

0

此代码适用于我(cocos2d 2.0)

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"walk_cpu_fighter_asleep.plist"];
CCSpriteFrame *fr = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"walk_cpu_fighter_asleep0001.png"];
CCSprite *spr = [CCSprite spriteWithSpriteFrame:fr];

CGPoint p = [[GEPlayGrid sharedPlayGrid] positionForTileAtX:1 andY:1];

spr.position = p;
[[GameEngine sharedGameEngine].mapProvider.mapUnitsLayer addChild:spr];

spriteWithSpriteFrame 构造函数根据精灵帧中包含的裁剪规范正确裁剪。绝对需要纹理,你可以使用 CCSprites 吗?很难猜测代码中的self是什么以及它扩展了什么 :) ...但也许您可能想要 initWithSpriteFrame:body:original。

于 2012-10-18T13:40:22.000 回答
0

你试过了吗:

-(void) addSpriteFramesWithFile:(NSString*)plist textureFile:(NSString*)textureFileName

在那之后:

CCTexture2D *cachedTexture = [[CCTextureCache sharedTextureCache] textureForKey:textureFileName];

?

于 2012-11-19T15:21:06.620 回答