processingと言うものでjavaを使ったシューティングゲームを作成しています。
自機から弾を打ち、敵機に当たったら、敵機のライフをインクリメントして
インクリメントした値に応じてメソッドを呼び出す仕組みを考えましたが、
呼び出されたと思ったら、すぐに消えてしまいます。
消える原因は下記に記載しています、enemy_life = 3の値が変わらないことが原因だと言うことはわかっていますので、変えるにはどうしたらいいのかご教示いただきたいと思います。技術者の方、何卒よろしくお願い致します。
########################################################
//BGM
import ddf.minim.*;
Minim minim;
AudioPlayer bgm;
AudioPlayer shot_sound;
AudioPlayer bakuhatu_sound;
int GAMEOVER_count,GAMEOVER_number,LIFE,startWordCount,mouseClickCount,quiteNumber;
String[] startWord = {"","A","HAPPY NEW","YEAR READY?"};
PImage space;
PImage player;
int player_x;
int player_y;
int player_life;
PImage shot;
int shot_x;
int shot_y;
int shot_life;
//敵の行動を定義
PImage enemy;
int enemy_life;
int enemy_width = 60; //敵の幅
float enemy_x, enemy_y; //敵の位置
float xspeed = 6; // 敵のスピード(横)
float yspeed = 10; //敵のスピード(縦)
int xdirection = 1; // 右か左か
int ydirection = 1; // 上か下か
PImage enemy2;
float enemy2_x, enemy2_y;
//BOSS
PImage boss;
int boss_x;
int boss_y;
//爆発
PImage bakuhatu;
PImage kieru;
//背景のスクロールを制御
int state;
float t;
long t_start = millis();//背景スクロール用
final int SCROLL_SPEED = 4;//スクロールスピード
int scroll_x, scroll_y;//スクロールの横と縦
/-------Setup-------/
void setup(){
size(800,350);
noStroke();
noCursor();
GAMEOVER_count=0;
GAMEOVER_number=2;
mouseClickCount=0;
quiteNumber=0;
enemy_x = 800;
enemy_y = height/2;
enemy = loadImage("enemy1.png");
enemy2_x = 400;
enemy2_y = 100;
enemy2 = loadImage("enemy2.png");
bakuhatu = loadImage("enemy_bakuhatu.png");
kieru = loadImage("kieru.png");
player = loadImage("player.PNG");
shot = loadImage("shot.PNG");
//BGM
minim = new Minim(this);
bgm = minim.loadFile("digitalworld.MP3");
//ショット音
shot_sound = minim.loadFile("launcher1.mp3");
//爆発音
bakuhatu_sound = minim.loadFile("small_explosion1.mp3");
rectMode(CENTER);//長方形の基準を真ん中に
}
/-------Draw-------/
void draw(){
background(0);
game();
}
void game(){
//敵機のライフを3に設定
enemy_life = 3;
print("enemy_life" + enemy_life);
frameRate(30);
Player pl = new Player();
pl.player_move();
Shot sh = new Shot();
sh.shot_fire();
sh.shot_move();
Hantei hit = new Hantei();
hit.atari();
if(enemy_life == 3){
//敵1
Enemy en = new Enemy();
en.enemy_action1();
}else if(enemy_life == 2){
//敵2
Enemy2 en2 = new Enemy2();
en2.enemy_action2();
}
}
/-------自機------/
class Player{
void player_move(){
player_x =mouseX;
player_y =mouseY;
image(player, player_x, player_y);
}
}
/-------敵機------/
class Enemy {
//引数を受け取る
void enemy_action1(){
//直進するだけ
image(enemy, enemy_x, enemy_y);
enemy_x --;
if(enemy_x < 0){
enemy_x = 800;
image(enemy, enemy_x, enemy_y);
}
}
}
//引数を受け取る
/-------敵機------/
class Enemy2 {
//引数を受け取る
void enemy_action2(){
//直進するだけ
image(enemy2, enemy2_x, enemy2_y);
enemy2_x --;
if(enemy2_x < 0){
enemy2_x = 800;
image(enemy2, enemy2_x, enemy2_y);
}
}
}
/-------弾------/
class Shot{
void shot_display(){
shot = loadImage("shot.PNG");
}
/-------弾の処理-------/
void shot_fire(){
//マウスが押された時に横に飛び出す
if(mousePressed == true && shot_life == 0){
//発車位置
shot_x = mouseX;
shot_y = mouseY;
shot_life = 1;
shot_sound.play();
}
}
void shot_move(){
if(shot_life == 1){
shot_x += 8;
//横幅800を超えたら、弾を発車する処理に戻る
if(shot_x > 800) { shot_life = 0; }
image(shot, shot_x, shot_y);
}
}
}
/-------弾と敵機の当たり判定-------/
class Hantei{
//実行されたらライフを返すメソッド
//返してメソッドを実行する このメソッドが呼び出す
void atari(){
if(
//X1 + W1 < X2
shot_x + shot.width < enemy_x
||
//X1 > X2 + W2
shot_x > enemy_x + enemy.width
||
//Y1 + H1 < Y2
shot_x + shot.height < enemy_y
||
//Y1 > Y2 + H2
shot_y > enemy_y + enemy.height
)
{
print("☆");
}else{
enemy = bakuhatu;
bakuhatu = kieru;
bakuhatu_sound.play();
//ライフのグローバル変数をインクリメント
enemy_life--;
}
}
}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/11 06:36
2017/12/11 06:41
2017/12/11 07:04
2017/12/11 07:22 編集
2017/12/11 07:35
2017/12/11 07:42
2017/12/11 07:46
2017/12/11 07:51