CCSprite宽度问题

时间:2012-08-05 19:39:48

标签: cocos2d-iphone width ccsprite

我正在开发一款实现健康栏的游戏。健康栏是一个1xx乘1px的CCSprite,然后调整到我需要的大小,使用我找到的方法here。酒吧使用这种方法调整大小,但我想改变酒吧的颜色取决于剩下多少健康。这是我用来调整大小的方法。

-(void) takeDamage:(double)damage {

  currentHP -= damage;
  if( currentHP > 0) {
    double percentage = (double)currentHP/ (double)maxHP;
    double width = (self.contentSize.width * (3.0f/4.0f)) * percentage;
    if (percentage <= 0.2f) {
      CCTexture2D * tex = [[CCTextureCache sharedTextureCache] addImage:@"hp_red.png"];
      [bar setTexture:tex];
    } else if( percentage <= 0.45f) {
      CCTexture2D * tex = [[CCTextureCache sharedTextureCache] addImage:@"hp_yellow.png"];
      [bar setTexture:tex];
    }

    [self resizeSprite:bar toWidth:width toHeight:self.contentSize.height/15];

  }

  [nums setString:[NSString stringWithFormat:@"%i/%i", currentHP, maxHP]];

}

我正在做的纹理变化是我从SO获得的其他东西,它改变了精灵的图像(到另一个1px乘1px图像,除了它是黄色或红色而不是绿色)。问题是精灵只有一半是黄色而另一半是黑色的,如下所示。

Sceenshot

如果你看一下“Abraxol”的健康栏,你会看到我正在谈论的奇怪的半黄半黑效果。

2 个答案:

答案 0 :(得分:1)

这看起来像过滤问题,其中纹理被过滤为黑色,因为纹理中实际上只有1个像素,但GPU可能需要多于1个像素才能正确过滤纹理。

我会尝试使用2x2或4x4纹理。完全有可能这是一个最小的纹理尺寸问题,无论如何1x1纹理是非常不寻常的。因为在这种情况下你根本就不会使用纹理,而只是用OpenGL ES(ccDrawLine和cocos2d中的其他人)绘制一条线或填充多边形。

答案 1 :(得分:1)

不确定,但黄色褪色为黑色的怪异可能与纹理的大小为1px x 1px以及图像文件的生成方式有关。您是否尝试使用较大的10px x 10px图像文件来查看效果是否仍然存在。

您是否因为健康栏的大小而没有使用精灵?是什么原因?

在游戏All Star Rally中,在下面的图片中,我为精灵健康栏使用了多个精灵,其中红色,绿色和黄色条位于健康栏轮廓精灵的后面。我只是将锚点设置在精灵的左侧并操纵精灵的scaleX以将健康栏的长度从1.0更改为0.01作为最小刻度,然后我使精灵不可见不要试图缩小任何小于那个。

如果要在健康栏缩小时更改精灵的颜色或纹理,可以对不同颜色的精灵进行分层并交换其可见性。

如果您使用的游戏尺寸与游戏中实际横条的大小相同,那么您可以为精灵添加有趣的渐变效果或其他效果。

更改精灵颜色的另一个选择是使用sprite.color来操纵精灵的颜色。使用color属性,您可以减去精灵的红色,绿色和蓝色值以对其进行着色。如果你从一个白色精灵开始,那么你可以将它染成红色,例如通过减去sprite.color中的所有绿色和蓝色组件。

All Star Rally health, speed, and power bars