0

我有一个错误的图像。我想让该图像的 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 函数来设置每个 bug 的初始起始位置。我不会发布整个函数,但它对“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 -->

}

所以,我需要一些方法来让动画与 body onload() 事件一起进行。一个问题是 setInterval 不允许包含参数的函数。所以我不能在body onload事件中放置多个语句,将“bug1”作为参数传递给这个函数,“bug2”作为参数传递给这个函数等等。这就是我制作全局计数变量的原因。这样,每当我需要更改错误的名称时,我都会更改 count 的名称,然后执行

bug = bug + count; 

但这增加了很多复杂性。我需要 bugStartingPlace() 函数的错误名称,所以我需要在使用该函数之前更改 count 的值并更改 bug 的值。一旦我使用了 bugStartingPlace() 函数,它就会改变全局变量的值。然后我需要在再次更改 bug 的值之前使用 flyBug()。

我想问题之一是我使用全局变量来表示方向和位置,即使我有多个错误。它适用于一个错误,但不适用于多个错误。

谁能给我关于这个程序的逻辑应该如何工作的提示?

4

1 回答 1

0

setInterval 允许像 setTimeout 一样在函数 BUT 中使用参数:

setInterval(funcName(param1,param2...), 100);

不会工作。你会得到它像这样工作:

var func = function () { funcName(param1,param2..); }

setInterval(func, 100);

要理解 javascript 的那一部分,请通读 dougles crockfords 对函数的解释,他讲得非常清楚和深刻。链接到他的视频

编辑:对不起,我理解你的问题是错误的......

它为什么不起作用的问题是,就像你想通了全局变量一样。你可以把 bug 变成一个对象。然后他的动作将是方法,其中可以包含一个函数等。如果你然后初始化一个新的错误(你可以这样做一千次),所有的变量都留在对象中,而不会相互冲突。这是提供代码可靠性的一种安全方式。

您可以使用嵌套函数非常简单地做到这一点。

另一种方法是将错误 vie 参数的名称发送到例如 fly 函数。并且该函数中唯一的工作是给它的参数。

于 2013-04-15T15:56:17.867 回答