簡単に言えば、私はJavaでレースゲームを作っています。私は数冊の本と数学の知識を使って独学で学んでおり、プログラミングを始めてまだ 3 週間しか経っていないので、すべての詳細をまだ学んでいます。背景は次のとおりです。
外接する四角形で囲まれたプレーヤーの画像があり、コードはそのプレーヤーの四角形がフィニッシュ ラインである四角形と交差するタイミングを確認します。ラインと交差するたびに、p1Laps がインクリメントされます。値が特定のポイントに達すると、ゲームは終了し、プレーヤーが勝者と宣言されます。
ここに問題と質問があります: 私の問題は、長方形が交差するたびに Java が複数の交差をカウントしていることです。通常は 8 が交差するため、p1Laps は 8 回インクリメントされます。これは一貫して発生する場合は問題になりませんが、ラップが異なる値で増加することがあります。4、7、および 8 の増分に遭遇したため、特定の周回数後にレースが終了するように値を設定するのは困難です。
私の最初の質問は「なぜ?」2つの長方形が交差するときにJavaが非常に多くの交差をカウントするのはなぜですか? どちらも 2D 形状であることと関係があると思いますが、間違っている可能性があります。
2 番目の質問は、一貫した値でインクリメントを発生させる方法です。できれば「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 ずつ増加し、「ブースト」が有効になっている場合 (プレーヤーの速度が 2 倍になる) は 4 だけ増加します。ご協力いただきありがとうございます。