簡體   English   中英

SFML / C ++在sf :: Sprite上閃爍閃爍效果

[英]SFML/C++ Flashing hit effect on sf::Sprite

在尋找解決方案時,我僅意識到sfml處理sf :: Sprite對象上的setColor的方式。 它只是精靈中每個像素當前RGB值的乘積。

這樣就不可能在子畫面上產生“白色”閃爍擊打效果。 通過閃爍的擊中效果,我的意思是:當您擊中敵人時,它將變成純白色一秒鍾,然后該效果迅速消失,直到精靈變成它的原始形式。

如何在SFML上產生白色閃爍的效果? (也許使用着色器?)

謝謝

似乎最好的解決方案是為此編寫自己的着色器。 我已經通過這種方式解決了這個問題。 這是代碼:

色彩片段

uniform sampler2D texture;

uniform vec4 flashColor;

void main()
{


vec4 pixel_color = texture2D(texture, gl_TexCoord[0].xy);
float percent = flashColor.a;

vec4 colorDifference = vec4(0,0,0,1);

colorDifference.r = flashColor.r - pixel_color.r;
colorDifference.g = flashColor.g - pixel_color.g;
colorDifference.b = flashColor.b - pixel_color.b;
pixel_color.r = pixel_color.r + colorDifference.r * percent;
pixel_color.g = pixel_color.g +colorDifference.g * percent;
pixel_color.b =pixel_color.b + colorDifference.b * percent;


gl_FragColor = pixel_color; 

}

要使用tint.frag文件(這是一個着色器文件),您應該通過以下方式將flashColor值發送到sf :: Shader對象:

.cpp代碼

flashColor.a = 1.0;//1.0 for 100% effect to 0.0 for 0% effect
shader.loadFromFile("shader/tint.frag", sf::Shader::Fragment);//use your own 
//file path
shader.setUniform("flashColor", sf::Glsl::Vec4(1, 0, 0, 1));//from left to 
//right: red,green,blue,alpha. Alpha is useless in this shader file.
//max is 1, not 255.
window.draw(yoursprite, &shader);

通過更改flashColor.a,可以更改着色效果。 0是原始顏色,1是使用所需顏色完全着色紋理。

我認為沒有針對此問題的現成解決方案。

但是,您可以嘗試使用具有想要制作動畫的敵人大小的白色精靈來創建自己的精靈,然后跟隨它。 在游戲過程中,將白色精靈的透明度設置為0以使其不可見(如您所提到的,使用setColor),當擊中敵人時,將透明度值設置為255。然后可以隨時間減小它的透明度, “淡出”效果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM