オリジナル円形模様メソッドを繰り返しで並べる
boolean jump = false; //ジャンプ中ならtrue boolean hit = false; float x=10, y=300, w=50, h=50, vx=1, vy=0; float gravity = 0.1; //重力加速度(簡易版) float t1x = 0, t1y = 350, t1w = 200, t1h = 20, t1Vx = 1, t1Vy = 1; float t2x = 200, t2y = 315, t2w = 180, t2h = 10, t2Vx = 1, t2Vy = 1; void setup() { size(960, 540); } void draw() { hit = false; background(255); fill(0, 0, 0); //自キャラの移動 //マウスの方向に移動(サンプルは右の移動のみ) if (keyPressed) { if (key == 'd') { x += 1; } } //ジャンプ時の上下方向の移動 if (jump==true) { vy = vy + gravity; y = y + vy; } //足場1の処理 rect(t1x, t1y, t1w, t1h); if (checkCollision2(x, y, w, h, t1x, t1y, t1w, t1h)) { vy = 0; jump = false; hit = true; } //足場2の処理 t2y+=t2Vy; if (t2y < 300) { t2Vy = 1; } else if (t2y > 330) { t2Vy = -1; } rect(t2x, t2y, t2w, t2h); if (checkCollision2(x, y, w, h, t2x, t2y, t2w, t2h)) { vy = 0; y = t2y-h; jump = false; hit = true; } //他の足場の処理を書く //足場を動かしても良い //衝突していないなら下に移動する if (hit==false) { y+=2; } rect(x, y, w, h); //自キャラ //画面端-自キャラの幅まで行けばクリア if (x > width-w) { text("Game Clear!!", 100, 50); noLoop(); } //画面下までいけばゲームオーバー if (y > height) { text("Game Over!!", 100, 50); noLoop(); } } boolean checkCollision2(float x1, float y1, float w1, float h1, float x2, float y2, float w2, float h2) { boolean hit = false; if ((x1+w1) >= x2 && x1 <= (x2+w2)) { if ((y1+h1) >= y2 && y1 <= (y2+h2)) { if ( (y1+h1) <= (y2+h2/2)) { hit = true; } } } return hit; } void mousePressed() { if (jump == false) { jump = true; vy = -5; } }
Copy