【问题标题】:CCSprite width issuesCCSprite 宽度问题
【发布时间】:2012-08-05 19:39:48
【问题描述】:

我正在开发一个实现健康栏的游戏。健康栏是一个 CCSprite,大小为 1px x 1px,然后使用我找到的 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 x 1px 图像,除了它是黄色或红色而不是绿色)。问题是精灵只有一半是黄色的,另一半是黑色的,如下所示。

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

【问题讨论】:

    标签: cocos2d-iphone width ccsprite


    【解决方案1】:

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

    你有什么理由不使用与健康栏大小相同的健康栏的精灵?

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

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

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

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

    【讨论】:

    • 我不知道 sprite.color 可以像这样处理一个白色精灵。非常感谢!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2011-07-19
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      相关资源
      最近更新 更多