gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:35:04 25 4
gpt4 key购买 nike

长话短说,我正在用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com