XNA icon cooldown clock effect
Started by chosendeath, Sep 25 2012 07:29 PM
13 replies to this topic
#1 Members - Reputation: 108
Posted 25 September 2012 - 07:29 PM
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.
Ad:
#4 Members - Reputation: 1046
Posted 26 September 2012 - 12:53 PM
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.
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.
#6 Members - Reputation: 368
Posted 27 September 2012 - 09:58 AM
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.
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, 27 September 2012 - 09:59 AM.
#13 Members - Reputation: 1046
Posted 02 October 2012 - 10:59 AM
You can supply an AlphaTestEffect in the SpriteBatch.Begin method. But you need to set it up with a special Projection matrix:
I put a little project here 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.
// 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;
I put a little project here 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, 02 October 2012 - 11:02 AM.






