已回答 需要Windows窗体应用程序游戏的帮助

Rowlandsfc

会员
已加入
2019年2月3日
留言内容
23
地点
布里真德
编程经验
Beginner
所以我创建了一个基本的游戏,它的水平基本上是太空侵略者。我有一个针对坏蛋的课程,也有一个关于子弹的课程,但是有时候我在游戏中遇到一个问题,子弹只是直接穿过敌人而不是直接击中敌人。这不会一直发生,所以我知道子弹类以及子弹与敌人之间的接触确实起作用,只是不理解为什么有时它会直接通过?


与敌人的子弹碰撞:
bullet.RemoveAll(bullets => bullets.isDisposed); // check for collicion between enemies and bullets
            foreach(JetBullet b in bullet)
            {
                b.MoveBullet(this.panel1);
                foreach(EnemyShips enemy in enemies)
                {
                    if (b.d.Bounds.IntersectsWith(enemy.e.Bounds))
                    {
                        b.isDisposed = true;
                        b.d.Dispose();
                        enemy.isDisposed = true;
                        enemy.e.Dispose();
                        enemyNumber--;
                        enemyTimer.Enabled = true;
                        score = score + 5;
                        enemiesKilled = enemiesKilled + 1;
                        lblKilled.Text = "Enemies Kileed: " + enemiesKilled;
                        lblScore.Text = "Score: " + score;
                        enemiesKilled = enemiesKilled + 1;
                    }
                }
            }

多数民众赞成在我的2个对象之间的冲突代码
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
如何使用400个标签创建类似于minesweeper的网格,
这太可怕了!!!即使在C / C ++教学Win32 API中,也不是教您如何创建Minesweeper的方法。 400个标签表示您有400个窗口句柄。窗口句柄是有限的资源。正确的做法是在单个自定义控件/窗口中呈现所有网格。

(除了一个有趣的问题,我让Windows Minesweeper的创建者担任我的经理大约2年,因此我们总是尝试将Minesweeper的参考资料潜入会议以取笑他。)

现在重点介绍为什么WPF比WinForms高效得多。在WPF中,您还将创建400个UI元素,但是UI元素只是一个抽象,更重要的是,它们并不是有限的资源。当使用WPF绘制屏幕时,UI元素有助于使用较快的DirectDraw API(而不是使用较慢的GDI和GDI +的WinForms)在屏幕上呈现单个图像。
 
Last edited:

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
您的碰撞检测基于实际的矩形相交。如果子弹移动增量大于敌人矩形的大小怎么办?

假设您的敌人身高10x10像素,并且处于位置(100,100),并且没有移动。假设您的子弹2x2的运动矢量为(20,0),初始位置为(15,105)。您会期望子弹击中敌人,因为敌人没有移动,而子弹的运动矢量指向敌人并会经过它。不幸的是,如果我们绘制子弹的位置,我们将看不到交叉点:
Code:
(15,105)
(35,105)
(55,105)
(75,105)
(95,105)
(115,105)
在(95,105)和(115,105)之间,子弹实质上已将自身传送通过敌人占领的(100,100)-(110,110)。

还要考虑的另一件事是如何安排游戏循环。精心设计的游戏循环可让您同时接受所有输入,然后将输入应用于运动矢量,然后更新位置,最后进行碰撞检测。如果您正在做一顿饭,那么在进行碰撞检测之前,您可能在错误的时间移动了子弹或敌人。
 

Rowlandsfc

会员
已加入
2019年2月3日
留言内容
23
地点
布里真德
编程经验
Beginner
您的碰撞检测基于实际的矩形相交。如果子弹移动增量大于敌人矩形的大小怎么办?

假设您的敌人身高10x10像素,并且处于位置(100,100),并且没有移动。假设您的子弹2x2的运动矢量为(20,0),初始位置为(15,105)。您会期望子弹击中敌人,因为敌人没有移动,而子弹的运动矢量指向敌人并会经过它。不幸的是,如果我们绘制子弹的位置,我们将看不到交叉点:
Code:
(15,105)
(35,105)
(55,105)
(75,105)
(95,105)
(115,105)
在(95,105)和(115,105)之间,子弹实质上已将自身传送通过敌人占领的(100,100)-(110,110)。

还要考虑的另一件事是如何安排游戏循环。精心设计的游戏循环可让您同时接受所有输入,然后将输入应用于运动矢量,然后更新位置,最后进行碰撞检测。如果您正在做一顿饭,那么在进行碰撞检测之前,您可能在错误的时间移动了子弹或敌人。
感谢您的答复,对不起,我只是学习这些东西,我了解它可能错过了,并且每件事都一次发生,但是不确定我将如何解决它。所以我需要看看敌人和子弹的移动速度有多快?
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
搜索"连续碰撞检测"?

大约3/4处有简短的概述:
 

Rowlandsfc

会员
已加入
2019年2月3日
留言内容
23
地点
布里真德
编程经验
Beginner
Search for "连续碰撞检测"?

大约3/4处有简短的概述:
好的,谢谢你的链接将调查它
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,925
地点
英国
编程经验
10+
所以我需要看看敌人和子弹的移动速度有多快?
我不这么认为

不能通过登录来简化它 点数 每个对象的位置取决于您的地图尺寸分辨率?如果两个物体占据相同 在屏幕上,例如子弹和一艘船,那么如果两个对象共享相同的 在地图上,子弹与船舶之间的碰撞可以使碰撞条件成立。只需增加您的分数,销毁飞船和子弹并进行处理即可。您可以运行后台工作程序或无限循环来跟踪 点数 每个新生成的对象位置中的哪个?只是脑力激荡...但是跳伞运动员给您的链接似乎是一个有希望的方向,但可能需要的代码比我的建议还多!
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,925
地点
英国
编程经验
10+
您还将发现WPF的资源效率比Winforms高得多。而且,如果您只是在学习,我建议您选择WPF,因为Winforms是EOL,并且已经过时,因为可以使用更现代,更强大的项目类型来提供更好的性能。并且,如果您只是在学习,请考虑过渡到WPF / Xamarin。使用Xamarin还可以使您的应用更容易适应在其他平台上运行的情况,如果您日后可能需要这样做。
 

Rowlandsfc

会员
已加入
2019年2月3日
留言内容
23
地点
布里真德
编程经验
Beginner
您还将发现WPF的资源效率比Winforms高得多。而且,如果您只是在学习,我建议您选择WPF,因为Winforms是EOL,并且已经过时,因为可以使用更现代,更强大的项目类型来提供更好的性能。并且,如果您只是在学习,请考虑过渡到WPF / Xamarin。使用Xamarin还可以使您的应用更容易适应在其他平台上运行的情况,如果您日后可能需要这样做。
感谢您的关注,我在大学学习它,winforms是他们使用的
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,925
地点
英国
编程经验
10+
这就是今天学校的麻烦。他们教过时的材料,您不需要学习。他们应该教wpf,而不是EOL。
 

Rowlandsfc

会员
已加入
2019年2月3日
留言内容
23
地点
布里真德
编程经验
Beginner
我们拥有的任务是一个游戏,他们会开始,但会为您提供有关如何使用400个标签创建类似于minesweeper的网格的说明,但是由于我添加了其他功能等,而且更改了图像,因此不再是网格,而只是空间图像,我现在使用标签的主要目的是随机放置地雷,并检测我的飞船周围的地雷,我想知道是否最好摆脱所有标签并为该类创建一个类地雷,并将它们作为图片框随机放置在面板上吗?
 

Rowlandsfc

会员
已加入
2019年2月3日
留言内容
23
地点
布里真德
编程经验
Beginner
这太可怕了!!!即使在C / C ++教学Win32 API中,也不是教您如何创建Minesweeper的方法。 400个标签表示您有400个窗口句柄。窗口句柄是有限的资源。

(除了一个有趣的问题,我让Windows Minesweeper的创建者担任我的经理大约2年,因此我们总是尝试将Minesweeper的参考资料潜入会议以取笑他。)
是的,加载该表格是胡扯,我已经保存了一份副本,因为它可以正常工作,所以现在我要尝试重新做,但没有所有这些标签
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,925
地点
英国
编程经验
10+
您是诚实地告诉我们,您的学校为您提供了一个项目,并且该项目有400个对象可供使用,或者这400个对象是您的想法?无论哪种方式,这都是一个糟糕的主意。为什么不随机生成它们并使用x / y坐标将其放置位置记录为点?
 

Rowlandsfc

会员
已加入
2019年2月3日
留言内容
23
地点
布里真德
编程经验
Beginner
您是诚实地告诉我们,您的学校为您提供了一个项目,并且该项目有400个对象可供使用,或者这400个对象是您的想法?无论哪种方式,这都是一个糟糕的主意。为什么不随机生成它们并使用x / y坐标将其放置位置记录为点?
这是他们的教程,他们让我们创建了一个程序,该程序保存了400个标签的详细信息和位置,然后我们不得不将文本文件中的内容复制并粘贴到我们的游戏设计器中
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,925
地点
英国
编程经验
10+
哇。您的导师需要补习或更换。他们的学习材料需要燃烧。如果他们是现代补习老师,他们会让您学习WPF。首先教您Winforms会给您带来不利,因为WPF / Winforms之间存在巨大差异,并且从Winforms过渡到WPF具有丰富的学习经验。坦白说,我不明白他们为什么要教您一种EOL产品。

显然,您应该按照他们的要求去做,以便进行可能需要的任何考试,但是如果我是您,我会自己研究他们所讲的内容并教给您,以便您可以找到自己所需要纠正的内容。教你任何试图证明在表单上使用400个对象的人都不是导师,而是小丑。那太荒谬了。

如果您对他们的教学方式或他们想告诉您的内容有任何疑问,可以随时在这里向我们询问您的学习情况。我什至无法想象表单上的400个标签会是什么样。
 

Rowlandsfc

会员
已加入
2019年2月3日
留言内容
23
地点
布里真德
编程经验
Beginner
哇。您的导师需要补习或更换。他们的学习材料需要燃烧。如果他们是现代补习老师,他们会让您学习WPF。首先教您Winforms会给您带来不利,因为WPF / Winforms之间存在巨大差异,并且从Winforms过渡到WPF具有丰富的学习经验。坦白说,我不明白他们为什么要教您一种EOL产品。

显然,您应该按照他们的要求去做,以便进行可能需要的任何考试,但是如果我是您,我会自己研究他们所讲的内容并教给您,以便您可以找到自己所需要纠正的内容。教你任何试图证明在表单上使用400个对象的人都不是导师,而是小丑。那太荒谬了。

如果您对他们的教学方式或他们想告诉您的内容有任何疑问,可以随时在这里向我们询问您的学习情况。我什至无法想象表单上的400个标签会是什么样。
然后,我将不得不自己学习wpf,这门大学课程结束后,我还可以选择一年制的大学学习,所以我想学习更多anywya,有什么地方适合wp教程等吗?
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,925
地点
英国
编程经验
10+
欢迎-完整的WPF教程

在任何搜索引擎上进行快速搜索都会返回许多学习地点的结果。通过使用这些论坛,您也处于正确的位置。欢迎您在遇到问题时在这些论坛上问尽可能多的问题。
 

Rowlandsfc

会员
已加入
2019年2月3日
留言内容
23
地点
布里真德
编程经验
Beginner
There is 欢迎-完整的WPF教程

在任何搜索引擎上进行快速搜索都会返回许多学习地点的结果。通过使用这些论坛,您也处于正确的位置。欢迎您在遇到问题时在这些论坛上问尽可能多的问题。
因此,我摆脱了所有的标签,将我的玩家角色和地雷都设置为类,并在玩家与地雷之间进行碰撞检测时使玩家动作正常进行,鞠躬,我需要弄清楚如何检测那些属于地雷的地雷。围绕玩家并显示金额,我可以从这里开始的任何建议吗?
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
如果可以检测到玩家与地雷之间的碰撞,则可以按照玩家向该方向迈进的假设场景来检测玩家与地雷之间的潜在碰撞。
 
最佳 底部