You can Run XNA Applications from Web without installing them on the PC.
- Are you joking?
- Absolutely not!
It has some drawbacks and looks silly but the truth is you can call them. And
plus its a little bit tricky.
In this article I am going to show you how you can do it.
First of all create a new Empty Web Application:
Add 2 WebForms(Default & Popup)
Add a Button on Default.aspx
In CodeBehind add:
protected
void Button2_Click(object
sender, EventArgs e)
{
PopUp("Popup.aspx");
}
public
void PopUp(string
url)
{
string popup =
"<script language='javascript'>" +
"window.open('" + url +
"', 'CustomPopUp', " +
"'width=200, height=200,
resizable=no')" +
"</script>";
Page.RegisterStartupScript("Popup", popup);
}
And then add these references in your Popup.aspx:
using
Microsoft.Xna.Framework;
using
Microsoft.Xna.Framework.Audio;
using
Microsoft.Xna.Framework.Content;
using
Microsoft.Xna.Framework.GamerServices;
using
Microsoft.Xna.Framework.Graphics;
using
Microsoft.Xna.Framework.Input;
using
Microsoft.Xna.Framework.Input.Touch;
using
Microsoft.Xna.Framework.Media;
using
System.Windows.Forms;
using
System.Threading;
using
System.Diagnostics;
Update your partial class for your webpage as seen below:
public
partial class
Popup : System.Web.UI.Page
{
protected void
Page_Load(object sender,
EventArgs e)
{
}
System.Web.UI.WebControls.Label lbl =
new System.Web.UI.WebControls.Label();
static Game1
game = new Game1();
delegate void
CallXNADelegate(Game1
windows);
private void
updateXNAWindow(Game1 windows)
{
if (System.Windows.Forms.Control.FromHandle(game.Window.Handle).InvokeRequired)
{
CallXNADelegate del =
new CallXNADelegate(updateXNAWindow);
System.Windows.Forms.Control.FromHandle(game.Window.Handle).Invoke(del,
new object[] {
windows });
}
else
{
windows.Run();
}
}
protected void
Button1_Click(object sender,
EventArgs e)
{
updateXNAWindow(game);
}
}
We are using Threading Invoke our delegate.
Then add this class to your Popup.aspx
public
class Game1 :
Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
public Game1()
{
graphics = new
GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
protected override
void Initialize()
{
base.Initialize();
}
protected override
void LoadContent()
{
spriteBatch = new
SpriteBatch(GraphicsDevice);
}
protected override
void UnloadContent()
{
Application.ExitThread();
}
protected override
void Update(GameTime
gameTime)
{
base.Update(gameTime);
}
protected override
void Draw(GameTime
gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
base.Draw(gameTime);
}
protected override
void EndRun()
{
base.EndRun();
Application.ExitThread();
}
}
After that run your WebApplication
So? What do you think?
Not in the Internet but you can use this method in your company's Intranet.
Business Games would look nice in your Intranet.
Note: And hey this is just a recommendation for Intranets.Everyone knows
Windows based objects dont work on client computers on Internet ;) So dont make
a comment like that below this article.