Class 同一类的两个对象之间的碰撞
好的,我有一个敌人职业(旋转,位置,纹理等等)。我在屏幕上繁殖了一些敌人,它们四处移动,但彼此重叠。所以我试着在同一等级的两个敌人之间进行碰撞检查。但无论我尝试什么方法,它都不太管用。我试过的最好的办法是:Class 同一类的两个对象之间的碰撞,class,xna,collision,Class,Xna,Collision,好的,我有一个敌人职业(旋转,位置,纹理等等)。我在屏幕上繁殖了一些敌人,它们四处移动,但彼此重叠。所以我试着在同一等级的两个敌人之间进行碰撞检查。但无论我尝试什么方法,它都不太管用。我试过的最好的办法是: foreach (Enemy enemy1 in enemies) { enemy1Pos = new Vector2(enemy1.position.X, enemy1.position.Y) foreach (Enemy enemy2 in enemies) { enemy2
foreach (Enemy enemy1 in enemies)
{
enemy1Pos = new Vector2(enemy1.position.X, enemy1.position.Y)
foreach (Enemy enemy2 in enemies)
{
enemy2Pos = new Vector2(enemy2.position.X, enemy2.position.Y)
if (Vector2.Distance(enemy2Pos, enemy1Pos) < 200)
{
enemy1Pos += new Vector2((float)(enemy1.Speed * Math.Cos(enemy1.Rotation)), (float)(enemy1.Speed * Math.Sin(enemy1.Rotation)));
}
}
}
foreach(敌人中的敌人1)
{
enemy1Pos=新向量2(enemy1.position.X,enemy1.position.Y)
foreach(敌人中的敌人2)
{
enemy2Pos=新向量2(enemy2.position.X,enemy2.position.Y)
if(矢量2.距离(enemy2Pos,enemy1Pos)<200)
{
enemy1Pos+=新向量2((float)(enemy1.Speed*Math.Cos(enemy1.Rotation)),(float)(enemy1.Speed*Math.Sin(enemy1.Rotation));
}
}
}
这不是精确的代码,因此可能有一些错误。无论如何,当我实现这个解决方案时,敌人没有重叠,所以在这方面一切都很好。但是,它们总是移动到屏幕的右侧
我还查找了植绒等,但我想知道,如何检测同一类的两个对象之间的碰撞?如果enemy1等于enemy2,则始终会发生碰撞。:) 避免
foreach (Enemy enemy2 in enemies)
{
if (enemy2 == enemy1) continue;
enemy2Pos = new Vector2(enemy2.position.X, enemy2.position.Y)
if (Vector2.Distance(enemy2Pos, enemy1Pos) < 200)
{
enemy1Pos += new Vector2((float)(enemy1.Speed * Math.Cos(enemy1.Rotation)), (float)(enemy1.Speed * Math.Sin(enemy1.Rotation)));
}
}
foreach(敌人中的敌人2)
{
如果(enemy2==enemy1)继续;
enemy2Pos=新向量2(enemy2.position.X,enemy2.position.Y)
if(矢量2.距离(enemy2Pos,enemy1Pos)<200)
{
enemy1Pos+=新向量2((float)(enemy1.Speed*Math.Cos(enemy1.Rotation)),(float)(enemy1.Speed*Math.Sin(enemy1.Rotation));
}
}
Foreach不是这里最好的。。。您可以通过以下各项以更有效的方式完成冲突检查:
for (int i = 0; i<enemies.Count-1; i++)
{
var enemy1 = enemies[i];
for (int j=i+1; j<enemies.Count; j++)
{
var enemy2 = enemies[j]
}
for(int i=0;i你到底想要什么?你已经用一个边界球体实现了碰撞检测。如果你想要其他东西,则需要更多信息。我个人会在敌人每次移动时检查碰撞情况(并在碰撞时将其移回).这样,负责碰撞的敌人总是会被移动。哇!这很有效,非常感谢!+额外的解释真的很棒!