我正在尝试制作一个使用 XNA 的 SteamRE 机器人,现在,我刚刚创建了一个新的 XNA 项目,并在其上添加了 SteamRE 示例代码,如果我运行它,它工作正常,但事实是,它没有实际上启动了 XNA 窗口,所以它不能寻找键盘处理等。
如果我删除 while(true) 循环它可以工作,但它不会连接。
这是我的代码,如果你们可以看看这个并帮助我,那就太好了。
namespace Steam
{
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
string userName = "username";
string passWord = "password";
SteamClient steamClient = new SteamClient(); // initialize our client
SteamUser steamUser;
SteamFriends steamFriends;
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
protected override void Initialize()
{
base.Initialize();
}
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
steamUser = steamClient.GetHandler<SteamUser>(); // we'll use this later to logon
steamFriends = steamClient.GetHandler<SteamFriends>();
}
protected override void UnloadContent()
{
}
KeyboardState oldState = Keyboard.GetState();
protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
ConnectSteam();
base.Update(gameTime);
}
public void ConnectSteam()
{
steamClient.Connect(); // connect to the steam network
while (true)
{
CallbackMsg msg = steamClient.WaitForCallback(true); // block and wait until a callback is posted
msg.Handle<SteamClient.ConnectCallback>(callback =>
{
// the Handle function will call this lambda method for this callback
if (callback.Result != EResult.OK)
{
Console.WriteLine("Failed. 1");
}
//break; // the connect result wasn't OK, so something failed
// we've successfully connected to steam3, so lets logon with our details
Console.WriteLine("Connected to Steam3.");
steamUser.LogOn(new SteamUser.LogOnDetails
{
Username = userName,
Password = passWord,
});
Console.WriteLine("Logged on.");
});
msg.Handle<SteamUser.LogOnCallback>(callback =>
{
if (callback.Result != EResult.OK)
{
Console.WriteLine("Failed. 2");
}
// we've now logged onto Steam3
});
}
}
public void ConnectToFPP()
{
KeyboardState newState = Keyboard.GetState(); // get the newest state
// handle the input
if (oldState.IsKeyUp(Keys.Space) && newState.IsKeyDown(Keys.Space))
{
steamFriends.JoinChat(110338190871147670);
}
oldState = newState; // set the new state as the old state for next time
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
base.Draw(gameTime);
}
}
}
谢谢!