processingを学び始めてから間もなく知識が疎いです。
なんとかしてゲームを二つ作りました。
私の計画では、ここから二つのゲームを一つにしたいのですが、できません。
私がとった方法は、一つのゲーム中のvoid setup(),void draw()の中にもう一つのゲームのvoid draw(),void setup()の内容を書くというものです。
しかし、一方のゲームしか起動しませんでした。
下記の二つのゲームを一つのゲームとして成り立たせたいです。
概要は青いボールを避けながら、上から降ってくる赤いボールに触れるというものです。
float frballx; //仲間ボールのx座標 float frbally; //仲間ボールのy座標 float frsp=0; //仲間ボールの速度 float fra=0; //仲間ボールの加速度 float g = 3; float touch=0; void setup(){ size(500,650); frballx=width/2; } void draw(){ background(255); smooth(); frsp = frsp + g /30+fra; frbally = frbally + frsp; stroke(255,0,0); fill(255,0,0); ellipse(frballx,frbally,30,30); if(frbally>665){ textSize(20); text("GameOver",20,20); frameRate(0); } if(mouseX>frballx-30 && mouseX<frballx+30 && mouseY>frbally-30 && mouseY<frbally+30){ touch=80; fra=0.0001; next(); //次の球がでる }} //次の球の設定 void next(){ frbally=-200; frsp=0; frballx=20 + random(465); }
enball[] ball = new enball[7]; //敵ボールの定義 int i = 0; // forに使う int j= 0; // 同上 int M7 = 0; // ボールが7個ある float[] enballx = new float[7]; // 敵ボールの座標 float[] enbally = new float[7]; // int flg = 0; void setup() { size(500,650); for (i = 0; i < 7; i=i+1) { ball[i] = new enball(30, 30, 30, 30); //敵ボール ball[j].set(mouseX + 15, mouseY + 15, random(5, 8), random(5,8)); //(float X, float Y, float enspX, float enspY) enspXは敵のボールのX速度 enspYは敵ボールのY速度 j=j+1; if (j == 7) { j = 0; M7 = 1; } } } void draw() { background(255); for (i = 0; i < 7; i=i+1) { ball[i].latest(); //最新の画面に切り替える ball[i].hitwall(); //画面の上下左右端に当たったときの設定用 ball[i].ballfun(); //ボールの設定用 function hitme(); // ボールが自機にヒットしたときの設定用 } stroke(255,0,0); fill(255,0,0); rect(mouseX-5, mouseY-5, 10, 10); //自機の設定 } class enball { //敵ボール PVector posi; //位置を定義 PVector ensp; //速度を定義 enball(float X, float Y, float enspX, float enspY) { posi = new PVector(X, Y); //向きベクトル ensp = new PVector(enspX, enspY); //速度ベクトル } void latest() { posi.add(ensp); //位置+速度 } void hitwall() { if ((posi.x > width)||(posi.x < 0)) { ensp.x = -ensp.x; //ボールが左右の壁に触れると反射 } if ((posi.y > height)||(posi.y < 0)) { ensp.y = -ensp.y; //ボールが上下の壁に触れると反射 } } void ballfun() { stroke(0,0,255); fill(0,0,255); ellipse(posi.x+10, posi.y+10, 30, 30); //ボールの描画 enballx[i] = posi.x; enbally[i] = posi.y; } void set(float X, float Y, float enspX, float enspY) { //位置、速度 posi.set(X, Y); ensp.set(enspX, enspY); } } void hitme() { //敵ボールが自機ふヒットしたときGameOver if (M7 == 1 && mouseX + 18 > enballx[i] && mouseX - 18 < enballx[i] && mouseY + 18 > enbally[i] && mouseY - 18 < enbally[i] || flg == 1) { fill(255,0,0); // 文字色 textSize(20); text("GameOver",20,20); noLoop(); } }
回答2件
あなたの回答
tips
プレビュー