私はWhack a Moleスタイルのゲームを作成しました。私は、このモル数を打つためにmousePressed()メソッドを使用しています。コードは正常に動作しますが、マウスを押したままにするだけで簡単にやり遂げることができる、ゲームを破壊するような攻撃があります。基本的に毎回マウスをクリックするのではなく、それを押さえて各モルを得ることができます。この問題を解決するには、mouseClicked()を代わりに使用しました。同じ問題です。これはおそらく、私がmousePressed()で持っているブーリアンに起因するものですが、別のゲームで同様の問題があり、ブーリアン変数がないところでコーディングしているので、わかりません。私はあなたがモル、任意の解決策を叩きたいときに毎回クリックしなければならないようにゲームをしたいですか?私はちょうどここに来たような3時間のためのそれでトラブルシューティングの代わりにタイマーを使用することについて考えた。ありがとう - ここにコードです:処理:mousePressed()/ mouseClicked()ticks too too often
package whackmole;
import processing.core.PApplet;
import processing.core.PFont;
import processing.core.PImage;
import java.util.Random;
public class WHACKMOLE extends PApplet {
PImage mole;
PImage mallet1;
PImage mallet2;
PFont f;
public int timer;
public int startTime;
public int gameTime;
public int startGameTime;
int score = 0;
Random rnd = new Random();
boolean mouseP = false;
int life = 3;
Mole mole1;
Mole mole2;
Mole mole3;
Mallet mallet;
enum GameState {
MENU,
RUNNING,
RUNNING2
}
static GameState currentState;
public void setup() {
size(1000, 800);
currentState = GameState.MENU;
mole = loadImage("mole.png");
mole1 = new Mole(mole);
mole2 = new Mole(mole);
mole3 = new Mole(mole);
f = createFont("comic.tff",16,true);
textFont(f,36);
}
public void draw() {
switch(currentState){
case MENU:
drawMenu();
startTime = millis();
timer = 0;
life = 3;
gameTime = millis();
cursor(CROSS);
score = 0;
break;
case RUNNING:
drawRunning();
break;
case RUNNING2:
drawRunning2();
gameTime = millis() - startGameTime;
break;
}
}
public void drawRunning() {
clear();
background(50,255,50);
if(timer < 60000){
mallet2 = loadImage("mallet2.png");
timer = millis();
mole1.drawMole();
mole1.collision(mallet);
timer = millis() - startTime;
mallet1 = loadImage("mallet1.png");
mallet = new Mallet(mallet1, mouseX, mouseY);
fill(255,255,255);
text("Time: " + ((60 - timer/1000)), 850, 50);
if (mouseP){
mallet.drawMallet(mallet2, mouseX, mouseY);
}
else {
mallet.drawMallet(mallet1, mouseX, mouseY);
}
if(timer > 60000){
fill(255,255,255);
text("Game over!" , 400, 400);
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
}
currentState = GameState.MENU;
}
noCursor();
text("Score: " + score ,25,50);
}
}
public void drawRunning2() {
clear();
mallet1 = loadImage("mallet1.png");
mallet = new Mallet(mallet1, mouseX, mouseY);
mallet2 = loadImage("mallet2.png");
background(50,255,50);
timer = millis() - startTime;
text("Life: " + life ,25,50);
noCursor();
text("Time: " + (gameTime/1000), 825, 50);
if(life <= 0){
mole1.dead = true;
mole2.dead = true;
mole3.dead = true;
text("Game over!" , 400, 400);
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
}
currentState = GameState.MENU;
timer = 0;
gameTime = 0;
startGameTime = millis();
}
if (timer < 1800){
if (!mole1.dead){
mole1.drawMole();
mole1.collision(mallet);
}
if (!mole3.dead){
mole3.drawMole();
mole3.collision(mallet);
}
if (!mole2.dead){
mole2.drawMole();
mole2.collision(mallet);
}
if (mouseP){
mallet.drawMallet(mallet2, mouseX, mouseY);
}
else {
mallet.drawMallet(mallet1, mouseX, mouseY);
}
}
else {
startTime = millis();
if (!mole1.dead || !mole2.dead || !mole3.dead) {
life --;
}
if (life > 0){
mole1.dead = false;
mole2.dead = false;
mole3.dead = false;
mole1.xPos = rnd.nextInt(950);
mole1.yPos = rnd.nextInt(600);
mole3.xPos = rnd.nextInt(950);
mole3.yPos = rnd.nextInt(600);
mole2.xPos = rnd.nextInt(950);
mole2.yPos = rnd.nextInt(600);
}
}
}
public void drawMenu(){
clear();
background(142,22,178);
fill(165, 119, 249);
rect(250, 150, 500, 200);
fill(255,255,255);
text("Time Mode", 375, 270);
fill(165, 119, 249);
rect(250, 450, 500, 200);
fill(255,255,255);
text("Survival Mode", 375, 570);
}
public void mousePressed()
{
mouseP = true;
if(currentState == GameState.MENU && mouseX > 250 && mouseX < 750 && mouseY > 150 && mouseY < 350){
currentState = GameState.RUNNING;
}
if(currentState == GameState.MENU && mouseX > 250 && mouseX < 750 && mouseY > 450 && mouseY < 650){
currentState = GameState.RUNNING2;
}
}
public void mouseReleased()
{
mouseP = false;
}
public class Mallet{
PImage mallet1;
PImage mallet2;
float xPos1;
float yPos1;
public Mallet(PImage mallet1, float xPos1, float yPos1){
this.mallet1 = mallet1;
this.xPos1 = xPos1;
this.yPos1 = yPos1;
}
public void drawMallet(PImage mallet1, float xPos1, float yPos1){
image(mallet1, xPos1 - 40, yPos1 - 60);
}
}
public class Mole{
PImage Mole;
float xPos;
float yPos;
boolean dead = false;
public Mole(PImage mole){
this.Mole = mole;
this.xPos = rnd.nextInt(950);
this.yPos = rnd.nextInt(750);
}
public void drawMole(){
if (dead == true) {
this.xPos = rnd.nextInt(1000 - mole.width/2);
this.yPos = rnd.nextInt(800 - mole.height);
dead = false;
}
image(Mole, xPos, yPos);
}
public void collision(Mallet m){
if(
mouseP == true &&
mouseX > xPos && mouseX < xPos + mole.width && mouseY > yPos && mouseY < yPos + mole.height){
score ++;
dead = true;
}
}
}
}
問題は解決しましたか? –