私がやりたいことは、コンソール アプリケーションを実行し、ユーザーに詳細を入力してもらい、ユーザー入力をゲームに渡すことです。
ユーザーがゲームの解像度を指定して、PreferredBackBuffer に入れるようにします。
これは可能ですか?設定ファイルを書き込んでそこから読み取ることができることは知っていますが、その部分を切り取って直接実行したいと思います。
これが私が持っている「ゲーム」です。私の質問のために表示することが不可欠であるとは思わないので、Player.cs は省略しました。
Main.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Text.RegularExpressions;
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.Media;
namespace SimplePlayer
{
public class Main : Microsoft.Xna.Framework.Game
{
const string fileName = "AppSettings.dat";
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Texture2D spaceTexture;
Player playerShip;
public Main()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
ReadRes();
}
protected override void Initialize()
{
base.Initialize();
}
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);
spaceTexture = Content.Load<Texture2D>("spaceBackground");
Texture2D playerTexture = Content.Load<Texture2D>("shipSprite");
playerShip = new Player(GraphicsDevice, new Vector2(400, 300), playerTexture);
}
protected override void UnloadContent()
{
}
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
playerShip.Update(gameTime);
UpdateInput();
base.Update(gameTime);
}
private void UpdateInput()
{
KeyboardState keyState = Keyboard.GetState();
GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);
if (keyState.IsKeyDown(Keys.Up) || gamePadState.DPad.Up == ButtonState.Pressed)
{
playerShip.Accelerate();
}
if (keyState.IsKeyDown(Keys.Down) || gamePadState.DPad.Down == ButtonState.Pressed)
{
playerShip.MoveReverse();
}
if (keyState.IsKeyDown(Keys.Left) || gamePadState.DPad.Left == ButtonState.Pressed)
{
playerShip.StrafeLeft();
}
if (keyState.IsKeyDown(Keys.Right) || gamePadState.DPad.Right == ButtonState.Pressed)
{
playerShip.StrafeRight();
}
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
spriteBatch.Draw(spaceTexture, Vector2.Zero, Color.White);
playerShip.Draw(spriteBatch);
spriteBatch.End();
base.Draw(gameTime);
}
public void SetWindowSize(int x, int y)
{
graphics.PreferredBackBufferWidth = x;
graphics.PreferredBackBufferHeight = y;
graphics.ApplyChanges();
}
}
}
Program.cs
using System;
namespace SimplePlayer
{
#if WINDOWS
static class Program
{
static void Main(string[] args)
{
using (Main game = new Main())
{
game.Run();
}
}
}
#endif
}