我試圖寫一個函數來檢查碰撞對象,以避免這種檢查的對象C#碰撞:3D(XYZ)
此功能需要檢查相交對象是否其他對象:
static bool CheckCollision(Int32 X, Int32 Y, Int32 Z, Int32 SizeX, Int32 SizeY, Int32 SizeZ)
{
bool ret = false;
for (int i = 0; i < ObjList.Count ; i++)
{
if (Z > ObjList[i].Z + ObjList[i].SizeZ || Z + SizeZ < ObjList[i].Z)
Console.WriteLine("Z +-");
else if (Y + SizeY < ObjList[i].Y || Y > ObjList[i].Y + ObjList[i].SizeY)
Console.WriteLine("Y +-");
else if (X + SizeX < ObjList[i].X || X > ObjList[i].X + ObjList[i].SizeX)
Console.WriteLine("X +-");
else
{
Console.WriteLine("||");
ret = true;
break;
}
}
// Console.Write("\n" + ret+"\n");
return ret;
}
ObjList - 對象數據的列表:
private struct S_ObjList
{
public Int32 X;
public Int32 Y;
public Int32 Z;
public Int32 SizeX;
public Int32 SizeY;
public Int32 SizeZ;
}
static List<S_ObjList> ObjList = new List<S_ObjList>();
http://pastebin.com/abDZLk9N - 所有代碼。
CheckCollision無法正常工作。
此功能也不起作用(總是返回true)
static bool CheckCollision(Int32 X, Int32 Y, Int32 Z, Int32 SizeX, Int32 SizeY, Int32 SizeZ)
{
foreach (S_ObjList MyObject in ObjList)
{
if ((Z + SizeZ > MyObject.Z || Z < MyObject.Z + MyObject.SizeZ) && (X + SizeX > MyObject.X || X < MyObject.X + MyObject.SizeX) && (Y + SizeY > MyObject.Y || Y < MyObject.Y + MyObject.SizeY))
{
return true;
}
}
return false;
}
你好傾倒你的代碼的幾行就更難讓我們來幫助你。請解釋如何使用完整的代碼片段來展示問題。 – Romoku
我添加了一張圖片。 –