长话短说,我正在用 Java 制作赛车游戏。我使用一些书籍和我的数学逻辑知识自学成才,而且我只编程了三周,所以我仍在学习这一切的来龙去脉。这里有一些背景:
我有一个由边界矩形包围的玩家图像,代码将检查该玩家矩形何时与作为终点线的矩形相交。每次成功与线相交时,p1Laps 都会增加。当该值达到某一点时,游戏结束,玩家被宣布为获胜者。
这是问题和问题:我的问题是Java在每次矩形交叉时计算多个相交。通常有 8 个相交,因此 p1Laps 会增加 8 倍。如果它始终如一地发生,这将不是问题,但有时圈数会以不同的值递增。我遇到了 4,7 和 8 的增量,因此很难设置一个值来确保比赛将在一定圈数后结束。
我的第一个问题是“为什么?” 当两个矩形交叉时,为什么java会计算这么多相交?我假设这与它们都是 2D 形状有关,但我可能是错的。
我的第二个问题是如何使增量以一致的值发生?最好是“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。谢谢你的帮助。