バグのイメージがあります。その画像の 5 つのコピーを画面の横から飛ばし、画面の周りで跳ね返り、横から跳ね返したいと考えています。出発点も方向性も違うものにしてほしい。
だから私はいくつかのグローバル変数を作りました
var flyVar;
var flySpeed = 5;
var widthMax = 0;
var heightMax = 0;
var xPosition = 0;
var yPosition = 0;
var xDirection = "";
var yDirection = "";
var bugFly;
var count = 1;
var bug = "bug";
setBugs()
ユーザーの画面のサイズに応じて widthMax と heightMax の値を設定するために使用する関数があります。
各バグの最初の開始場所を設定する bugStartingPlace 関数があります。関数全体を投稿することはしませんが、「bug1」から「bug5」まで同じことを行い、異なる値を与えます。
function bugStartingPlace(bugName) {
//Accepts string as argument and sets the starting position and starting direction of each bug.
if (bugName == "bug1") {
xPosition = 0;
yPosition = 100;
xDirection = "right";
yDirection = "up";
}
}
アニメーションを実行して画像の位置を設定する flyBug() という関数があります。このような一連のステートメントで構成されています。1つのバグで動作させることができるので、動作することを知っています。問題は、5 つのバグでそれを行うことです。
function flyBug() {
if (xDirection == "right" && xPosition > (widthMax - document.getElementById("bugImage").width - flySpeed))
xDirection = "left";
<!--More flow control statements are here-->
document.getElementById("bug1").style.left = xPosition + "px";
document.getElementById("bug1").style.top = yPosition + "px";
<!-- More statements are here that set the position of the image -->
}
そのため、ボディの onload() イベントでアニメーションを実行する方法が必要です。問題の 1 つは、setInterval がパラメーターを含む関数を許可しないことです。そのため、「bug1」をこの関数のパラメーターとして渡したり、「bug2」をこの関数のパラメーターとして渡したりする複数のステートメントを body onload イベントに入れることはできません。そのため、グローバル カウント変数を作成しました。そうすれば、バグの名前を変更する必要があるときはいつでも、カウントの名前を変更してから実行します
bug = bug + count;
しかし、それは多くの複雑さを追加します。bugStartingPlace() 関数のバグの名前が必要なので、その関数を使用する前に count の値と bug の値を変更する必要があります。bugStartingPlace() 関数を使用すると、グローバル変数の値が変更されます。次に、バグの値を再度変更する前に flyBug() を使用する必要があります。
問題の 1 つは、複数のバグがあるにもかかわらず、方向と位置にグローバル変数を使用していることだと思います。1 つのバグに対しては正常に機能しますが、複数のバグに対しては機能しません。
このプログラムのロジックがどのように機能するかについてのヒントを教えてもらえますか?