0

我正在开发一个实现健康栏的游戏。健康栏是一个 1px x 1px 的 CCSprite,然后使用我在这里找到的方法调整到我需要它的大小。使用这种方法可以很好地调整条的大小,但我希望根据剩余的生命值来改变条的颜色。这是我用来调整大小的方法。

-(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 x 1px 的图像,除了它是黄色或红色而不是绿色)。问题是精灵只有一半是黄色的,另一半是黑色的,如下所示。

截图

如果您查看“Abraxol”的健康栏,您会看到我所说的奇怪的半黄半黑效果。

4

2 回答 2

1

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

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

于 2012-08-05T23:18:26.963 回答
1

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

有什么理由不使用健康栏大小的精灵吗?

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

如果您想在健康条缩小时更改精灵的颜色或纹理,您可以将不同颜色的精灵分层并交换它们的可见性。

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

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

全明星拉力赛的健康、速度和力量条

于 2012-08-05T23:24:34.060 回答