Короче говоря, я делаю гоночную игру на 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 без (по-видимому) причины, и они увеличиваются только на 4, если включен «Boost» (удваивает скорость игрока).Спасибо за вашу помощь.