Processingを使用してシューティングゲームを制作しています。
当たり判定を実装したいのですが、うまくいきません。
自機から放った弾(SHOT)が、敵(ENEMY)の当たり判定範囲内に入った時に、弾と敵が描画されなくなるようにしたいです。
【試したこと】
boolean でhitflagを立てて、衝突範囲内に入った時にtrueを返すようなプログラムを作っていますが、うまくいきません。
加えて、敵や弾の速度が不安定になってしまっています。
ENEMY enemy[]; HIKOU hikou; HAIKEI haikei[]; ArrayList<SHOT> shotList = new ArrayList<SHOT>(); PImage png; int N = 100; int n = 5; float ey, ex; float sx, sy; boolean hitflag; void setup() { size(300, 600); frameRate(30); rectMode(CENTER); noCursor(); png = loadImage("hikou.png"); png = loadImage("enemy.png"); hikou = new HIKOU(); haikei = new HAIKEI[N]; for (int i = 0; i < N; i++) { haikei[i] = new HAIKEI(); } enemy = new ENEMY[n]; if(!hitflag){ //ここにhitflagを立てて、falseの時だけ描画しようとしています。 for (int i = 0; i < n; i++) { enemy[i] = new ENEMY(); } } } void draw() { background(0); for (int i = 0; i < N; i++) { haikei[i].draw(); } if(!hitflag){ //ここもfalseの時だけ描画しようとしています。 for (int i = 0; i < n; i++) { enemy[i].draw(); } } for (int i=shotList.size ()-1; i>=0; i--) { SHOT t = shotList.get(i); if (t.isAlive()) { t.move(); t.display(); } else { shotList.remove(i); } } hikou.move(mouseX, mouseY); hikou.display(); PImage hikoupng = loadImage("hikou.png"); image(hikoupng, mouseX - 15, mouseY - 32); } void mousePressed() { shotList.add(new SHOT(hikou.x, hikou.y)); } class HIKOU { //自機 float x, y; float size; HIKOU() { size = 10; } void move(float _x, float _y) { x = _x; y = _y; } void display() { } } public class SHOT { //弾 float size; float speed; SHOT(float _x, float _y) { sx = _x; sy = _y; size = 6; speed = 15; } void move() { sy -= speed; } void display() { stroke(0); fill(255, 0, 0); rect(sx, sy, size, size); } boolean isAlive() { if (sx+size/2<0 || width<sx-size/2 || sy+size/2<0 || height<sy-size/2) { return false; } return true; } } class HAIKEI { //背景 float y; float x; float vy = 10; float len; HAIKEI() { init(); y = random(-height, height); } void init() { y = random(-2*height, -1); x = random(0, width); vy = random(10, 18); len = random(15, 25); } void draw() { stroke(200);//color line(x, y, x, y+len); update(); } void update() { y += vy; if (height < y+len) { init(); } } } public class ENEMY { //敵 float vy = 5; float len; ENEMY() { init(); ey = random(-2 * height, -height); } void init() { ey = random(-20); ex = random(20, width - 20); len = random(20, 35); } void draw() { PImage enemypng = loadImage("enemy.png"); image(enemypng, ex, ey); update(); } void update() { ey += vy; if (height + 40 < ey + len) { init(); } } public boolean hitflag;{ //ここがhitflagです。 if(ex + 20 > sx && ex - 20 > sx && ey + 20 > sy && ey > sy + 20){ hitflag = true; } else { hitflag = false; } } }
修正点が多く、拙い内容で申し訳ないのですが、ご教授いただければ幸いです。
回答1件
あなたの回答
tips
プレビュー