我有一个关于交叉或相当碰撞检测与条件的问题。我正在进行条形图像(图像)和球形图像(图像)之间的碰撞检测。根据用户在拖动栏时的响应,可以上下移动条形图。碰撞检测代码如下。
public bool Intersects(Rect barRectangle, Rect blueBallRectangle)
{
barRectangle.Intersect(blueBallRectangle);
if (barRectangle.IsEmpty)
{
return false;
}
else
{
return true;
}
}
在private void OnUpdate(对象发送者,对象e)
Rect blueBallRectangle= new Rect(blueBallPositionX, blueBallPositionY, blueBall.ActualWidth, blueBall.ActualHeight);
Rect barRectangle= new Rect(barPositionX, barPositionY, bar.ActualWidth, bar.ActualHeight);
目前,当球检测到碰撞时,它会偏转。但是,我想补充说它会通过差距而不是偏离。
if (Intersects(barRectangle, blueBallRectangle))
{
this.blueBallVelocityY *= -1;
this.blueBallVelocityX *= -1;
}
酒吧的图片如下。
答案 0 :(得分:1)
似乎你应该使用两个边界框来描述红色条:一个在顶部,一个在底部。然后你的代码可以检查蓝色球是否与 相交。在这种情况下,如果球适合两个障碍物,它将不会与任何一个障碍物相交,并且球将继续快速前进(因此玩家可能会死亡)。
顺便提一下,摘录:
if (barRectangle.IsEmpty)
{
return false;
}
else
{
return true;
}
可以简单地替换为:
return !barRectangle.IsEmpty;