【问题标题】:Game Developing in C# related questions [closed]C# 中的游戏开发相关问题 [关闭]
【发布时间】:2016-11-29 16:37:47
【问题描述】:

过去一两周我一直在制作游戏,但我有一些问题无法在论坛中找到答案。

1。 在使用表单作为角色移动到表单的最右侧时,我该如何制作它,以便它以一种他“穿越”地图的方式将背景平行于角色移动。一个简单的例子是马里奥,当你玩游戏时,地图会用物体等来绘制。

2.我见过一些人以非常有条理的方式编写代码。他们正在使用他们调用到主窗体的类,当使用 KeyUp、KeyDown、MouseUp、MouseDown、Timers 时,在课堂上是否仍然可以使用这些类? (有一个类叫Movement,涉及到这些方法放起来很简单)

3.当角色杀死图片框(敌人)时,我正在尝试创建一个新的,具有相同的属性并将其生成在屏幕的最右侧边缘。 然而,作为我第一次做这样的事情,并且没有从外部资源中找到帮助,我只是把它搞砸了,我没有工作。

我正在调用 createEnemy(),因为最后一个敌人死了

private void createEnemy()
    {
        PictureBox enemy = new PictureBox();
        this.Controls.Add(enemy);
        this.Controls.Add(enemyhealth);
        enemyhealth.Visible = true;
        enemy.Visible = true;
        enemy.BackColor = Color.Black;
        enemy.Size = new Size(34, 40);
        enemy.Location = new Point(character.Location.X, character.Location.Y);
        enemydamage();
        enemyhealth.Location = new Point(enemy.Location.X - 10, enemy.Location.Y - 17);
        enemyhealth.Value = 30;
        enemy.Refresh();
        enemyhealth.Refresh();
        enemy.BringToFront();
        enemyhealth.BringToFront();
    }

感谢您的回答。 我不期待codem中的答案,只是这样做的主要想法。

【问题讨论】:

  • 以目前的形式,您的问题将很难回答。我们不知道你是如何实现你的游戏的,你的框架是什么样子的
  • 三题合一通常不合适。它使问题无法回答。此外,您实际上并没有编程问题,而是“如何开始”的问题,这在这里也不好。
  • 我是 c# 初学者,但我认为你不应该为每个新角色创建一个新的图片框
  • @ErikŠťastný 代替创建图片框,您可以使用single control (selfmade) 并通过overwriting the OnPaint event 将敌人绘制为精灵。你也可以看看XNA

标签: c#


【解决方案1】:

正如其他人所指出的那样,最好有单独的问题并尝试使问题更具体。但让我尽力回答。

1)如果我理解正确,您想要实现的是滚动背景。相当多的东西可以很好地实现这一目标。出于性能和内存的原因,您通常不想渲染或存储整个地图——理想情况下,您不想显示的内容超出您将要显示的内容。这可以通过 WinForms 中的 GDI 来完成。例如参见:

在 Windows 95 时代,我曾经使用 WinG 库做很多此类事情。或者您甚至可能只是在表单中添加滚动条——但您可能很快就会达到性能限制。

但正如其他人所指出的那样,GDI/Winforms 并不是真正为这项任务而设计的。更专为游戏设计的工具集将使您的生活更轻松。例如,XNA 将为您提供许多工具,让您作为游戏开发者的生活更轻松。看看这篇文章:

2) 首先,应该注意的是,在 C# 中,表单(以及几乎所有其他内容)是一个类。如果表单上的 KeyPreview 属性设置为 true,操作系统将确保表单获取 KeyPress 等事件。否则,焦点控件将首先获取此键盘事件并可能向上传递。 https://msdn.microsoft.com/en-us/library/ms171536(v=vs.110).aspx 可能有用。

但是您也可以从表单的处理程序中调用另一个类的方法,从而将事件处理委托给您的另一个类。例如,您可能会让 OnKeyPress 方法调用 Player.MoveRight 或 Player.MoveLeft,具体取决于输入的值。

3) 创建一个敌人——你能提供更多关于这里不起作用的细节吗?您期望什么结果以及您的代码实际在做什么?看起来您将敌人的位置设置为与您的玩家位置相同 - 而不是屏幕的右边缘 - 如果您期望图像,我看不到您为图片框设置图像的位置。解决这个问题的一个更面向对象的方法可能是有一个类来表示你的敌人,并将 PictureBox 作为该类的属性。

如果您决定研究 XNA,Sprite 将是处理玩家和敌人的好方法:

https://msdn.microsoft.com/en-us/library/bb203919.aspx

【讨论】:

  • 我同意你的大部分回答.... XNA 现在早就死了。 Monogame 是它的继任者(大部分代码相同)
  • @yan yankelevich 感谢您的评论。正如你所知道的,我已经离开游戏开发世界有一段时间了......成年后的业务应用程序线的苦差事。 :-)
  • 很遗憾我也遇到了同样的情况。所以我想几年后我将不知道哪种框架/引擎最适合游戏开发(我猜是 Unity):-)
  • 感谢您的所有回答。我目前正在下载 Monogame,我期待着使用它。 3) 实际发生的情况是,当敌人死亡时,它会在玩家身上产生(我选择)一个新的图片框,但敌人的健康(进度条)没有与图片框平行移动,第一个图片框之后似乎没有遵循的属性“死”。
  • 我目前正在使用 MonoGame 创建一个 RPG 游戏。如果不感谢所有帮助,您是否可以建议任何特定的教程,这可能会让我走上正确的道路!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
  • 1970-01-01
  • 2011-04-22
  • 2012-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多