class Character { // 属性 FrameAnim anim; float charaX, charaY, initY; float speedX, speedY; Character(String name, float x, float y) { imageMode(CENTER); anim = new FrameAnim(name, 3); anim.setAnim(0, 2, 3); // 位置とスピードの初期設定 charaX = x; speedX = 5; initY = charaY = y; speedY = 0; } // キャラクターの位置を計算する void move() { // 位置を更新 charaX = charaX + speedX; // 自由落下の位置計算 if(speedY != 0) { speedY = speedY + GRAVITY; charaY = charaY + speedY; bounce(); } // 画面左端に到達したら右端に戻す if(charaX < -anim.img().width/2) { charaX = width - anim.img().width/2; } // 画面右端に到達したら左端に戻す if(charaX > width + anim.img().width/2) { charaX = anim.img().width/2; } } // 床での跳ね返りを計算する void bounce() { if(charaY > initY) { speedY = -speedY * 0.6; charaY = charaY - (charaY - initY); if(anim.index == 2) anim.setAnim(0, 2, 3); // スピードの絶対値が2以下になったらバウンド終了 if(abs(speedY) < 2) { speedY = 0; charaY = initY; } } } // キャラクターを画面に描く void update() { anim.step(); image(anim.img(), charaX, charaY); // 左端にはみ出たキャラを右端に描く if(charaX < anim.img().width/2) { image(anim.img(), width + charaX, charaY); } // 右端にはみ出たキャラを左端に描く if(charaX > width - anim.img().width/2) { image(anim.img(), charaX - width, charaY); } // 画面端でキャラクターを消す fill(0); noStroke(); rect(-120, -120, 120, 240); rect(width, -120, 120, 240); } // キャラクターをジャンプさせる void jump() { anim.setAnim(2, 1, 1); speedY = -15; } }