java - 如何使两个矩形相交时的增量可预测?

标签 java increment intersect

长话短说,我正在用 Java 制作一款赛车游戏。我使用一些书籍和我的数学逻辑知识自学成才,而且我只编程了三周,所以我仍在学习这一切的来龙去脉。以下是一些背景知识:

我有一个被边界矩形包围的玩家图像,代码将检查该玩家矩形何时与终点线矩形相交。每次成功与线相交时,p1Laps 都会递增。当数值达到一定值时,游戏结束,玩家被宣布为获胜者。

这是问题和问题: 我的问题是,每次矩形交叉时,Java 都会计算多个相交。通常有 8 个相交,因此 p1Laps 会增加 8 倍。如果这种情况持续发生,这不会成为问题,但有时圈数会以不同的值增加。我遇到过 4,7 和 8 的增量,因此很难设置一个值来确保比赛在一定圈数后结束。

我的第一个问题是“为什么?”当两个矩形相交时,为什么java会计算这么多相交次数?我假设这与它们都是二维形状有关,但我可能是错的。

我的第二个问题是如何使增量以一致的值发生?最好是“1”,但这并不是最重要的,因为我可以调整最终值。

这是似乎相关的代码(删除了很​​多代码):

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.*;
import java.applet.AudioClip;

public class RacerDoom extends JFrame {
//lap counter
int p1Laps=0;

//bouding rectangles
Rectangle p1 = new Rectangle(WIDTH/9,HEIGHT/2,WIDTH/30,WIDTH/30);
Rectangle finishtop = new Rectangle(WIDTH/9,(HEIGHT/2)-HEIGHT/9,(int)((WIDTH/9)*1.5),HEIGHT/70);

//check for intersect
if(p1.intersects(finishtop)&&p1Direction==UP){
                        p1Laps++;}
//choose winner
if(p1Laps>=24) {
                        if(!winnerChosen) {
                            winnerChosen = true;
                            break;
}
}

如前所述,增量通常会增加 8,但我让它们无缘无故地增加 7,并且如果启用“Boost”(使玩家的速度加倍),它们只会增加 4。 感谢您的帮助。

最佳答案

原因可能是汽车需要几帧才能冲过终点线。您可以通过跟踪每辆车是否已经穿过终点线来解决这个问题。为每辆车使用一个 boolean 变量,例如

boolean p1IsOnFinishLine = false;
boolean p2IsOnFinishLine = false;

修改 if 以检查汽车是否与终点线相交并且 p1IsOnFinishLinefalse - 这意味着这是汽车冲线的第一帧。如果是这样,请增加 p1Laps 并将 p1IsOnFinishLine 设置为 true。现在,在下一帧中,汽车仍将与终点线相交,但由于 p1IsOnFinishLinetrue,您知道您已经计算了该圈数,因此您不需要不需要再做一次。当汽车不再与终点线相交时,您可以将 p1IsOnFinishLine 设置为 false,以便为下一次穿越做好准备。

关于java - 如何使两个矩形相交时的增量可预测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7366545/

相关文章:

java - MongoDB: "can' t 保存部分对象”异常

c - 在 C 中直接操作字符串中的 long 值

ios - 每当圆形图像与 Xcode 中的 CGRect 相交时发出

javascript - jQuery递增类名和函数

c - 我如何在for循环中用4递增一个变量

INTERSECT 的 mysql 替代品

image - 图像相交

java - CentOS 上的 Artifactory 环境变量

java - 使 MySQL 查询更快

java - Android 应用程序没有启动图标