Cocos2d iphone 屏幕宽度问题

Cocos2d iphone 屏幕宽度问题,cocos2d-iphone,width,ccsprite,Cocos2d Iphone,Width,Ccsprite,我正在开发一个实现健康栏的游戏。健康栏是一个CCSprite,它是1px x x 1px,然后使用我找到的方法将其大小调整到我需要的大小。使用此方法,该条的大小调整得非常好,但我希望根据剩余的生命值更改该条的颜色。这是我用来调整大小的方法 -(void) takeDamage:(double)damage { currentHP -= damage; if( currentHP > 0) { double percentage = (double)currentHP/ (

我正在开发一个实现健康栏的游戏。健康栏是一个CCSprite,它是1px x x 1px,然后使用我找到的方法将其大小调整到我需要的大小。使用此方法,该条的大小调整得非常好,但我希望根据剩余的生命值更改该条的颜色。这是我用来调整大小的方法

-(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]];

}
-(无效)承受伤害:(双重)伤害{
电流hp-=损坏;
如果(当前HP>0){
双百分比=(双)当前HP/(双)最大HP;
双宽度=(self.contentSize.width*(3.0f/4.0f))*百分比;

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


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

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

有没有理由不在健康栏中使用与健康栏大小相同的精灵

在游戏《全明星拉力赛》中,在下图中,我使用了多个精灵作为精灵健康栏,其中红色、绿色和黄色栏位于健康栏轮廓精灵的后面。我只是将主播点设置在精灵的左侧,然后操纵精灵的scaleX,将健康栏的长度从1.0改为1.00.01作为最小比例,然后我使精灵不可见,并且不尝试缩放任何小于该比例的值

如果希望在健康栏收缩时更改精灵的颜色或纹理,可以将不同颜色的精灵分层并交换其可见性

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

更改精灵颜色的另一个选项是使用sprite.color来操纵精灵的颜色。使用color属性,您可以减去精灵的红色、绿色和蓝色值来着色。如果您从白色精灵开始,则可以将其着色为红色,例如,通过减去所有绿色和蓝色组件这是雪碧的颜色


我不知道雪碧。颜色是白色雪碧的颜色。非常感谢!