2

私がやりたいことは、コンソール アプリケーションを実行し、ユーザーに詳細を入力してもらい、ユーザー入力をゲームに渡すことです。

ユーザーがゲームの解像度を指定して、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
}
4

2 に答える 2

2

ゲームの実行可能ファイルは、実際にはコンソール アプリケーションの実行可能ファイルにすぎない可能性があります。設定の入力が完了すると、コンソール アプリケーションはゲームを実行し、設定をコマンド ライン引数として渡します。

于 2012-12-07T20:53:34.453 に答える
0

コードで実行可能ファイルを起動するには、次のようにします。

const string ex1 = "C:\\";
const string ex2 = "C:\\SomeDirectory";

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.FileName = "YourGame.exe";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = "-f j -o \"" + ex1 + "\" -z 1.0 -s y " + ex2;

try
{
    // Start the process
    using (Process exeProcess = Process.Start(startInfo))
    {
    exeProcess.WaitForExit();
    }
}
catch
{
    // Log error.
}
于 2012-12-07T20:58:39.040 に答える