I was just discussing with cairnswm about creating stuff with Pascal and XNA. Since Chrome 1.5 supports .NET 2.0 I thought I would quickly try and get a Hello world progam workin. This is the result...
0. Install .NET 2.0 and XNA Game Studio Express
1. Download the Free Chrome 1.5 command line compiler and install it
2. Create a file named XNADemo.pas and copy code as follows...
Code:
namespace XNADemo;
interface
uses
Microsoft.Xna.Framework,
Microsoft.Xna.Framework.Content,
Microsoft.Xna.Framework.Audio,
Microsoft.Xna.Framework.Graphics,
Microsoft.Xna.Framework.Input,
Microsoft.Xna.Framework.Storage;
type
TXNAGame = class(Microsoft.Xna.Framework.Game)
private
// these are the size of the output window, ignored on Xbox 360
preferredWindowWidth : integer;
preferredWindowHeight : integer;
graphics : GraphicsDeviceManager;
class content : ContentManager;
protected
method Initialize; override;
method BeginRun; override;
method Update( gameTime : Gametime ); override;
method BeginDraw : boolean; override;
method Draw( gameTime : Gametime ); override;
method EndDraw; override;
method LoadGraphicsContent( loadAllContent : boolean ); override;
method UnloadGraphicsContent( unloadAllContent : boolean ); override;
public
constructor;
// Entry point into this object.
class method Main;
end;
implementation
constructor TXNAGame;
begin
inherited;
preferredWindowWidth := 320;//1280;
preferredWindowHeight := 240;//720;
Self.graphics := new Microsoft.Xna.Framework.GraphicsDeviceManager(Self);
Self.graphics.PreferredBackBufferWidth := preferredWindowWidth;
Self.graphics.PreferredBackBufferHeight := preferredWindowHeight;
end;
class method TXNAGame.Main;
begin
try
// probably should not be instantiating an object within itself :).
with lGame := new TXNAGame do
lGame.Run;
except
on E: Exception do
begin
// MessageBox.Show(E.Message);
end;
end;
end;
method TXNAGame.Initialize;
begin
// Your Initialize Code here
Window.Title := 'Pascal and XNA';
inherited;
end;
method TXNAGame.BeginRun;
begin
// Your BeginRun Code here
inherited;
end;
method TXNAGame.Update( gameTime : Gametime );
begin
// Allows the default game to exit on Xbox 360 and Windows
if (GamePad.GetState(PlayerIndex.One).Buttons.Back = ButtonState.Pressed) then
Self.Exit();
// Your Update Code here
inherited Update( gameTime );
end;
method TXNAGame.BeginDraw : boolean;
begin
if not ( inherited BeginDraw ) then
begin
result := false;
exit;
end;
// Your BeginDraw Code here
result := true;
end;
method TXNAGame.Draw( gameTime : Gametime );
begin
graphics.GraphicsDevice.Clear( Color.CornflowerBlue );
inherited Draw( gameTime );
// Your Draw Code here
end;
method TXNAGame.EndDraw;
begin
// Your EndDraw Code here
inherited;
end;
method TXNAGame.LoadGraphicsContent( loadAllContent : boolean );
begin
if (loadAllContent) then
begin
// TODO: Load any ResourceManagementMode.Automatic content
end;
// TODO: Load any ResourceManagementMode.Manual content
end;
method TXNAGame.UnloadGraphicsContent( unloadAllContent : boolean );
begin
if (unloadAllContent) then
begin
content.Unload;
end;
end;
end.
3. At the command line type
Code:
Chrome XNADemo.pas /frameworkversion:v2.0.50727 /ref:"C:\Program Files\Microsoft XNA\XNA Game Studio Express\v1.0\References\Windows\x86\Microsoft.Xna.Framework.dll" /ref:"C:\Program Files\Microsoft XNA\XNA Game Studio Express\v1.0\References\Windows\x86\Microsoft.Xna.Framework.Game.dll"
If all goes well you should have an XNADemo.exe file ready to run. This will display a blank screen with the Window title "Pascal and XNA"!
Remember this is Chrome Object Pascal, which is slightly different to CodeGear Object Pascal
Bookmarks