我正在开发一个实现健康条的游戏。健康条是一个1px x 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 x 1px的图像)。问题是精灵只有一半是黄色的,另一半是黑色的,如下所示。

如果你看一下"Abraxol“的健康条,你会看到我所说的奇怪的半黄半黑的效果。
发布于 2012-08-06 07:24:34
不确定,但黄色褪色为黑色的奇怪之处可能与纹理的大小为1px x 1px以及图像文件的生成方式有关。你有没有试过使用更大的图像文件,比如10px x 10px的图像文件,看看效果是否仍然存在。
你有什么理由不使用和健康条一样大的精灵吗?
在游戏全明星拉力赛中,在下面的图片中,我使用了多个精灵作为精灵健康条,其中红色,绿色和黄色条在健康条轮廓后面的精灵。我只是将锚点设置在精灵的左侧,并操纵精灵的scaleX将健康条的长度从1.0向下更改为0.01作为最小比例,然后我使精灵不可见,并且不尝试缩放到更小的值。
如果你想在健康条缩小时改变精灵的颜色或纹理,你可以分层不同颜色的精灵,并交换它们的可见性。
如果你在游戏中使用的条是实际条的大小,那么你可以在精灵中添加有趣的渐变或其他效果。
更改精灵颜色的另一个选项是使用sprite.color来操控精灵的颜色。使用颜色属性,您可以减去精灵的红色、绿色和蓝色值以对其进行着色。如果从白色精灵开始,则可以将其着色为红色,例如,通过减去sprite.color中的所有绿色和蓝色分量。

发布于 2012-08-06 07:18:27
这看起来像一个过滤问题,纹理被过滤为黑色,因为纹理中实际上只有1个像素,但GPU可能需要超过1个像素才能正确过滤纹理。
我会尝试使用2x2或4x4的纹理。这是完全可能的,这是一个最小纹理大小的问题,在任何情况下,1x1纹理是非常不寻常的。因为在这种情况下,你根本不会使用纹理,而只是用OpenGL ES (cocos2d中的ccDrawLine和其他)绘制一条线或填充多边形。
https://stackoverflow.com/questions/11819488
复制相似问题