私の簡単なJavaScriptゲームは、スペースインベーダーのクローンです。JavaScriptのゲームは時間の経過とともに速く始まり、遅くなります
私はp5.jsクライアント側ライブラリを使用しています。
私はゲームをスピードアップしようと多くのことを試みました。
時間がたつにつれて遅くなり、遅くなり、楽しくはありません。
私が持っているすべてのコードを表示するわけではありません。私はすべてのクラスを見せているわけではありませんが、すべてが起こっているメインクラスを示します。
誰かがこれを目にして、大きなことがあれば教えてください。
私はJSに新しくゲームを作っているので、人々がスクリプトで使用するupdate() というものがありますが、私はそれに精通していません。
ありがとうございます。
var ship;
var flowers = []; // flowers === aliens
var drops = [];
var drops2 = [];
function setup() {
\t createCanvas(600, 600);
\t ship = new Ship();
\t for (var i = 0; i < 6; i ++) {
\t \t flowers[i] = new Flower(i * 80 + 80, 60);
\t }
\t flower = new Flower();
}
function draw() {
\t background(51);
\t ship.show();
\t ship.move();
\t shipDrops();
\t alienDrops();
\t dropsAndAliens();
\t dropDelete();
\t drop2Delete();
}
\t // if 0 drops, show and move none, if 5, etc..
\t function shipDrops() {
\t \t \t \t for (var i = 0; i < drops.length; i ++) {
\t \t \t \t drops[i].show();
\t \t \t \t drops[i].move();
\t \t for (var j = 0; j < flowers.length; j++) {
\t \t if(drops[i].hits(flowers[j])) {
\t \t \t \t flowers[j].shrink();
\t \t \t \t if (flowers[j].r === 0) {
\t \t \t \t \t flowers[j].destroy();
\t \t \t \t }
\t \t \t // get rid of drops after it encounters ship
\t \t \t \t \t drops[i].evaporate();
\t \t \t }
\t \t \t \t \t if(flowers[j].toDelete) {
\t \t \t // if this drop remove, use splice function to splice out of array
\t \t \t \t \t flowers.splice(j, 1); \t // splice out i, at 1
\t \t \t \t \t }
\t \t }
\t }
\t \t
}
\t function alienDrops() {
\t \t // below is for alien/flower fire drops 2
\t \t for (var i = 0; i < drops2.length; i ++) {
\t \t \t drops2[i].show();
\t \t \t drops2[i].move();
\t \t if(drops2[i].hits(ship)) {
\t \t \t ship.shrink();
\t \t \t drops2[i].evaporate(); // must evap after shrink
\t \t \t ship.destroy();
\t \t \t if (ship.toDelete) {
\t \t \t \t delete ship.x;
\t \t \t \t delete ship.y;
\t \t \t } // above is in progress, deletes after ten hits?
\t \t \t
\t \t }
\t }
}
\t function dropsAndAliens() {
\t var randomNumber; // for aliens to shoot
\t var edge = false;
\t
\t // loop to show multiple flowers
\t for (var i = 0; i < flowers.length; i ++) {
\t \t flowers[i].show();
\t \t flowers[i].move();
\t \t // ******************************************
\t \t \t randomNumber = Math.floor(Math.random() * (100));
\t \t \t \t if(randomNumber === 5) {
\t \t \t \t var drop2 = new Drop2(flowers[i].x, flowers[i].y, flowers[i].r);
\t \t \t \t drops2.push(drop2);
\t \t \t }
\t \t //**************** above aliens shooting
\t \t // below could be method, this will ensure the flowers dont
\t \t //go offscreen and they move
\t \t //makes whtever flower hits this space become the farther most
\t \t //right flower,
\t \t if (flowers[i].x > width || flowers[i]. x < 0) {
\t \t \t edge = true;
\t \t }
\t }
\t \t // so if right is true, loop thru them all again and reset x
\t \t if (edge) {
\t \t \t for (var i = 0; i < flowers.length; i ++) {
\t \t \t // if any flower hits edge, all will shift down
\t \t \t // and start moving to the left
\t \t \t flowers[i].shiftDown();
\t \t }
\t }
}
function dropDelete() {
\t for (var i = drops.length - 1; i >= 0; i--) {
\t \t \t if(drops[i].toDelete) {
\t \t \t // if this drop remove, use splice function to splice out of array
\t \t \t \t drops.splice(i, 1); \t // splice out i, at 1
\t \t \t }
\t \t }
}
function drop2Delete() {
\t \t for (var i = drops2.length - 1; i >= 0; i--) {
\t \t \t if(drops2[i].toDelete) {
\t \t \t // if this drop remove, use splice function to splice out of array
\t \t \t \t drops2.splice(i, 1); \t // splice out i, at 1
\t \t \t }
\t \t }
}
function keyReleased() {
\t if (key != ' ') {
\t ship.setDir(0); // when i lift the key, stop moving
\t }
}
function keyPressed() {
\t // event triggered when user presses key, check keycode
\t if(key === ' ') {
\t \t var drop = new Drop(ship.x, height); // start ship x and bottom of screen
\t \t drops.push(drop); // when user hits space, add this event to array
\t }
\t if (keyCode === RIGHT_ARROW) {
\t \t // +1 move right
\t \t ship.setDir(1);
\t } else if (keyCode === LEFT_ARROW) {
\t \t // -1 move left
\t \t ship.setDir(-1);
\t } // setir only when pressing key, want continuous movement
}
デルタタイム計算を使用する必要があります。https://stackoverflow.com/questions/13996267/loop-forever-and-provide-delta-time – pokeybit
スニペットが機能しません。 –