2012-08-05 144 views
0

我正在製作一個實現健康欄的遊戲。健康欄是一個1px×1px的CCSprite,然後調整到我需要的尺寸,使用我發現的方法here。酒吧使用這種方法調整大小,但我希望改變酒吧的顏色取決於剩下多少健康。以下是我用來調整大小的方法。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的映像,除非它是黃色或紅色,而不是綠色的另一個1px的)改變精靈的形象。問題是精靈只有一半是黃色的,另一半是黑色的,如下所示。

Sceenshot

如果你看一下健康吧「Abraxol」你會看到我在談論怪異半黃半黑的效果。

回答

1

不確定,但黃色漸變爲黑色的怪異可能與紋理的大小爲1px x 1px以及圖像文件的生成方式有關。您是否嘗試過使用較大的(例如10px x 10px圖像文件)來查看效果是否仍然存在。

任何你不使用一個精靈的健康欄大小的健康欄的原因是什麼?

在遊戲全明星拉力賽中,在下圖中,我使用了多個精靈來製作精靈健康欄,其中紅色,綠色和黃色欄位於健康欄輪廓精靈之後。我只是將錨點設置在sprite的左側,並操縱sprite的scaleX以將健康欄的長度從1.0的值改變爲0.01作爲最小比例,然後讓sprite不可見並且不要試圖縮小比這更小的尺寸。

如果您想要在健康欄縮小時更改精靈的顏色或紋理,可以對不同顏色的精靈進行圖層疊置並更換其可見性。

如果您在遊戲中使用實際酒吧大小的酒吧,那麼您可以向精靈添加有趣的漸變或其他效果。

改變精靈顏色的另一種選擇是使用sprite.color來操縱精靈的顏色。使用顏色屬性,您可以減去精靈的紅色,綠色和藍色值以給它着色。如果您以白色精靈開頭,則可以通過減去sprite.color中的所有綠色和藍色色彩組件來將其着色爲紅色。

All Star Rally health, speed, and power bars

+0

我不知道sprite.color工作一個白色精靈這樣的。非常感謝! – CaldwellYSR 2012-08-06 00:52:09

1

這看起來像一個過濾問題,其中紋理被過濾爲黑色,因爲紋理中確實只有1個像素,但GPU可能需要超過1個像素才能正確過濾紋理。

我會嘗試使用2x2或4x4紋理。這是完全可能的,這是最小的紋理尺寸問題,在任何情況下,1x1紋理都是非常不尋常的。因爲在這種情況下,你根本不會使用紋理,而只是用OpenGL ES(ccDrawLine和其他的cocos2d)繪製一條線或填充多邊形。