Cocos2d iphone 更改纹理:意外的缩放结果

Cocos2d iphone 更改纹理:意外的缩放结果,cocos2d-iphone,Cocos2d Iphone,我不知道这里发生了什么,我知道我很愚蠢,但事情是这样的: 我有两张照片,一张是1024x768,一张是2048x1536。它们是“背景”纹理。我正在尝试从一种纹理切换到另一种纹理: CCSprite *bg = [CCSprite spriteWithFile:@"one.jpg"]; bg.scale = 0.5; [self addChild:bg]; ... CCTexture2D* tex = [[CCTextureCache sharedTextureCache] addImage:t

我不知道这里发生了什么,我知道我很愚蠢,但事情是这样的:

我有两张照片,一张是1024x768,一张是2048x1536。它们是“背景”纹理。我正在尝试从一种纹理切换到另一种纹理:

CCSprite *bg = [CCSprite spriteWithFile:@"one.jpg"];
bg.scale = 0.5;
[self addChild:bg];
...
CCTexture2D* tex = [[CCTextureCache sharedTextureCache] addImage:two.jpg];
[bg setTexture: tex];
好的,这是完全正常的,第二张图像完全符合第一张图像的精确空间和尺寸,尽管分辨率不同。现在我添加了第二张图片,这样我可以让第一张淡入第二张

CCSprite *newBG = [CCSprite spriteWithFile:@"two.jpg"];
newBG.scale = bg.scale;
[self addChild: newBG];
但是这不起作用,图像是它应该的两倍大


那么这里到底发生了什么?正如我所能猜到的,当从图像创建精灵时,精灵的大小被设置,然后应用的任何纹理都会自动缩放以适应空间,而第二个不起作用,因为新创建的精灵使用的是不同大小的图像?

当设置纹理时,还应该调用

-(void) setTextureRect:(CGRect) rect;
设置其大小。这将在
initWithTexture
中自动调用,但在仅调用
setTexture
时不会调用。因此,您的假设是正确的:纹理大小是在初始化精灵时设置的,之后不会更改;但是,当您想要使用新纹理时,可以对其进行更改