我已经面对面(上下)制作了2个矩形,它们之间的距离存储为整数。我怎么能写一个代码来检查某个东西(一个可移动的标签)是否经过那个距离(它们之间)而不触及任何矩形?我已经开始将标签制作成矩形:
Rectangle rec = label2.Bounds;
更新
e.Graphics.FillRectangle(Brushes.LightCyan, new Rectangle(Pipe1[0], 0, PipeWidth, Pipe1[1]));
e.Graphics.FillRectangle(Brushes.LightCyan, new Rectangle(Pipe1[2], Pipe1[3], PipeWidth, this.Height - Pipe1[3]));
e.Graphics.FillRectangle(Brushes.LightCyan, new Rectangle(Pipe2[0], 0, PipeWidth, Pipe2[1]));
e.Graphics.FillRectangle(Brushes.LightCyan, new Rectangle(Pipe2[2], Pipe2[3], PipeWidth, this.Height - Pipe2[3]));
e.Graphics.FillRectangle(Brushes.Green, new Rectangle((Pipe1[0] + Pipe1[1]) / 2, 0, 15, PipeDifferentY));
这是两个面对面的矩形,最后一个我试图制作一个小矩形插入它们之间,我有那个矩形存储在那个整数之间的距离,那么我如何定位新的矩形两者面对面,两者之间的距离高度。 ?!
更新2:
我用矩形交叉点制作了它,但现在我还有一个小问题:
if (intersect1 != Rectangle.Empty | intersect2 != Rectangle.Empty)
{
points++;
}
要点是添加10,20,40等等。我尝试过:
points += 1;
但它也不起作用,这可能是因为标签与矩形重叠了一次。我该如何解决这个问题?
答案 0 :(得分:1)
我认为我们需要更深入地了解您的代码以解决您的积分问题。你每次填满时都把它归零吗?我假设它是一个整数?当您单步执行代码时,它会在您执行该行时将值加倍,还是您定期重新检查它?
我想一个更大的问题是,您是否希望“点”表示交叉点总共发生了多少次?一系列帧的次数?我的怀疑是你永远不会将它归零,但它只是保持累积,可能与你用来检查这个值的任何线程的时间速度相同。
要回答您的第一个问题,假设您正确处理了在前两个之间构建第三个矩形,那么您的检查将是三次。假设intersect1是标签边界与顶部矩形的交点,则intersect2是标签边界与底部矩形的交点,intersect3是标签与由两个原始矩形的共享宽度创建的矩形的交点(I从你的例子中,我们不知道它们之间是否有水平偏移)和它们之间的空间高度,它是在两个管道之间但在(( intersect1 == Rectangle.Empty | intersect2 == Rectangle.Empty) && intersect3 != Rectangle.Empty)
时没有触及。当您的标签未与任何管道相交时,您当前的检查只会增加“点数”。
而且,正如一个疯狂的猜测,重新创建Flappy Bird?