我正在尝试学习C#中的方法如何工作(也使用XNA Framework)。
这是我制作的方法。
public void Exit()
{
if (Keyboard.GetState().IsKeyDown(Keys.Escape))
{
this.Exit();
}
我的印象是它的格式正确。但我不知道怎么称呼它。或许我做错了?
答案 0 :(得分:7)
你必须从某个地方开始我猜...你似乎已经编写了一个递归的无限循环而不知道它!
public void Exit()
{
if (Keyboard.GetState().IsKeyDown(Keys.Escape))
{
this.Exit(); // this is calling your own Exit() method we we are in at the moment!
}
}
我认为你想要的是:
public void Exit()
{
if (Keyboard.GetState().IsKeyDown(Keys.Escape))
{
Environment.Exit();
}
}
答案 1 :(得分:2)
方法是类(或结构)的成员,并通过类的实例调用。例如:
public class Foo {
public void Bar()
{
Console.WriteLine("Running the Bar method");
}
}
然后你会在某处找到代码:
Foo fooVar = new Foo();
fooVar.Bar(); // call the Bar method
或者,您可以定义一个不需要该类实例的静态方法。例如:
public class Foo {
public static void Bar()
{
Console.WriteLine("Running the static Bar method");
}
}
然后你可以在你的代码中调用它:
Foo.Bar(); // Foo is the name of class, not an object of type Foo
另请查看Charles Petzold's .Net Book Zero以获得对C#和.Net的精彩介绍。
答案 2 :(得分:1)
两件事突出:
}
。this.Exit()
是递归电话。方法总是在对象(如类)上声明,this
引用当前对象,因此{k}继续调用自己,而 Esc 被按下。< / p>
您尝试使用代码完成了什么?
答案 3 :(得分:0)
对于这种特殊方法,您只需将其称为:
Exit();
将其作为一行插入任何地方,它将起作用。在您执行此操作之前,请检查this.Exit();
行,您不希望以递归方式自行调用....
但是看一下方法中的其他代码行我不确定你想要做什么 - 你是否想在与Esc
键一起按下特定键时退出?< / p>
答案 4 :(得分:0)
我相信Microsoft.Xna.Framework.Game
(你继承自(我认为))提供了一个你应该覆盖的“更新”方法。
Overriding基本上用你想要的任何东西替换基类的方法。在这种情况下,调用一个方法来检查键盘的状态,并在按下转义时退出。
每次游戏都应该更新,不出所料,更新自己(屏幕上的内容,玩家位置等)
protected override void Update(GameTime gameTime)
{
// ....
ProcessKeyboard(); // Calls into ProcessKeyboard()
//....
}
private void ProcessKeyboard () // A new method
{
if (Keyboard.GetState().IsKeyDown(Keys.Escape))
{
this.Exit(); // Provided from Microsoft.Xna.Framework.Game
}
// Handle other keys down here.
}