• Advertisement
Sign in to follow this  

XNA icon cooldown clock effect

This topic is 1934 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

In blizzard games, when a spell or item is on cooldown there is a clock effect over the icon. What would be the best way to do this in XNA? I tried using solutions from other posts but they didn't touch directly on XNA, and I couldn't figure out how to implement the solutions.

Share this post


Link to post
Share on other sites
Advertisement
Given that the icons are normally all of similar sizes/dimensions, I'd guess that it's a semi-transparent animated sprite drawn over the original icon.

Share this post


Link to post
Share on other sites
I read a way to do it was the alpha mask thing, it seemed like the most efficient way to do it but I couldn't find a way to implement it in XNA.

Share this post


Link to post
Share on other sites
In XNA you can use SpriteBatch with an AlphaTestEffect. Set the Alpha value to set the threshold above which something is drawn.

If you have a "disc" image with the alpha varying at different angles around the disc, then you could use this to display different "angle ranges" of the disc, so to speak.

Share this post


Link to post
Share on other sites
Take 5 vertices and make a square clock. Place vertices at 12, 3, 6 and 9 o'clock and one in the center.

The top and center vertex never moves.

The 3, 6 and 9 o'clock vertices you move in a circle using sin(tx+b) and cos(tx+b), where t is time, x is the scale and b is the phase/offset. Edited by Tispe

Share this post


Link to post
Share on other sites
That's not the alpha mask technique though, I want to do what phil said and use an alpha channel texture... but I don't how to use AlphaTestEffect properly with the spritebatch in XNA

Share this post


Link to post
Share on other sites
Yes, but how do I use the AlphaTestEffect to actually draw something with the SpriteBatch? Sorry for my noobiness :(

Share this post


Link to post
Share on other sites
Set up an instance of AlphaTestEffect with the parameters set properly, and then pass it to SpriteBatch.Draw in one of the overloaded functions.

Share this post


Link to post
Share on other sites
But none of the overloads can take an AlphaTestEffect or any Effect it seems... the closest ones seem to be the ones with the SpriteEffects enum

Share this post


Link to post
Share on other sites
Oops.

Disregard that post. I haven't written XNA code in so long.

You use the blending options in [b]SpriteBatch.Begin().[/b] I believe it's [b]BlendState.AlphaBlend [/b]or something similar.

Share this post


Link to post
Share on other sites
You can supply an AlphaTestEffect in the SpriteBatch.Begin method. But you need to set it up with a special Projection matrix:

[CODE]
// Set up an AlphaTestEffect with a Projection that allows it to be used with SpriteBatch.
Matrix projection = Matrix.CreateOrthographicOffCenter(0, GraphicsDevice.PresentationParameters.BackBufferWidth, GraphicsDevice.PresentationParameters.BackBufferHeight, 0, 0, 1);
Matrix halfPixelOffset = Matrix.CreateTranslation(-0.5f, -0.5f, 0);
alphaTestEffect = new AlphaTestEffect(GraphicsDevice);
alphaTestEffect.VertexColorEnabled = false;
alphaTestEffect.AlphaFunction = CompareFunction.Greater;
alphaTestEffect.ReferenceAlpha = 0;
alphaTestEffect.World = Matrix.Identity;
alphaTestEffect.View = Matrix.Identity;
alphaTestEffect.Projection = halfPixelOffset * projection;
[/CODE]

I put [url="http://icefallgames.com/Files/AlphaTestClock.zip"]a little project here[/url] that shows how to use this to make a "clock" effect.

The only downside is that since you're using alpha to control the "angle" at which the "clock" is visible, you can't really use alpha blending. That's fine if you're ok with an opaque background.

Otherwise, you'd need to use a second "alpha texture" to control the angle; that would require writing a custom shader. Edited by phil_t

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement