我一直在通过制作太空入侵者克隆来锻炼我的技能。我在2天前问过一个问题,这个问题已经解决了,我已经取得了很多进展。我设法使一切工作,collisons,声音,gamestate管理和运动等
除了入侵者只从我的阵列中的索引0(每个最左边的入侵者)射击后,一切正常。代码是在game1.cs中从第344行开始的区域。
入侵者也行动不错。它们击中屏幕边缘并向下移动像素,并继续向相反方向移动。但是,如果我摧毁最外层的入侵者,游戏仍会识别死亡入侵者。
所以游戏突然告诉屏幕中心的入侵者向下,向相反方向。它使游戏更具动感,但这不是我想要的效果。移动代码位于同一位置,从game1.cs中的第344行开始
可在此处下载来源:http://db.tt/1AodUfdS
答案 0 :(得分:1)
在大多数情况下,第一个入侵者射击的原因是你每次都要创建一个新的Random对象。这将使用系统时间进行初始化。因此在循环中,大多数随机数将相等(因为系统时间几乎相等)。而是在游戏开始时创建一个Random对象。
对于你的第二个问题:你总是使用第一个(索引0)和最后一个(索引10)入侵者来确定行是否应该改变方向。相反,使用可见的第一个/最后一个入侵者:
var LeftMost = Type1Invaders.Where(i => i.invaderVis).FirstOrDefault();
var RightMost = Type1Invaders.Where(i => i.invaderVis).LastOrDefault();
通过这些,您可以继续进行测试。如果结果为null,则该行为空。