Javascript(EaselJS) - Enemy's同时具有相同的功能?

时间:2014-11-04 14:17:03

标签: javascript arrays for-loop methods easeljs

大家好日子。

我正在尝试用javascript开发一个闪避游戏。

如何解决我创建的所有3个敌人具有相同功能的部分?我希望他们分开。因为在所有这三个方面都应该朝着enemyrandom1()的结果方向前进;

这是我用来创造敌人的代码。

var item:
var enemy;
var enemys = new Array();
function createEnemy(){
enemy = new createjs.Shape();
enemy.graphics.beginFill("black").drawRect(0, 0, 10, 10);
enemy.x = (Math.random() * 400) +1;
enemy.y = 50
stage.addChild(enemy);
enemys.push(enemy);
console.log(enemys)
}

createEnemy();
createEnemy();
createEnemy();



function enemyforloop(){
for(var i=0;i<enemys.length;i++) {
item = enemys[i];
enemyMove();
}}

敌人的循环是在Ticker方法中。 Enemymove是一种旨在让敌人向一个方向移动的功能。在它到达某个放置后,它会被放入一个随机的位置然后继续。

function enemyMove(){
if(enemyrandom == 1)
{
item.y -= enemyspeed;   
    if(item.y < -10)
    {
        enemyrandom1();
    }
}

function enemyrandom1(){

enemyrandom = Math.floor((Math.random() * 4) + 1);
enemyspeed = Math.random() *2 + 1;

if(enemyrandom == 1){
    item.y = 300;
    item.x = Math.floor((Math.random() * 400) + 1);     
}
}

我跳过了敌人和敌人2,3,4所以它不会占用更多的空间。 我希望我对我的问题很清楚。

这就是它现在的样子http://jsfiddle.net/HqYeD/411/

2 个答案:

答案 0 :(得分:0)

你已经确定了&#34;项目&#34;在全局范围内(类似于您在CreateJS社区中发布的初始示例,其中您将&#34;敌人&#34;在全局范围内),因此您遇到同样的问题。

相反,item应声明 in 函数,并传递给&#34; enemyMove&#34;方法:

function enemyforloop(){
    for(var i=0;i<enemys.length;i++) {
        var item = enemys[i]; // NOTE THE VAR USED HERE!
        enemyMove(item); // ITEM IS PASSED IN HERE!
    }
}
function enemyMove(item){
    // This code should not need to change.
}

确保删除&#34; var项目&#34;在代码的顶部。你应该只声明这样的事情,在他们的生命周期中不需要改变。您的enemyitem对象是暂时的,并经常更改。

希望这有帮助。

答案 1 :(得分:0)

摆脱全局enemyspeedenemyrandom并将这些变量范围限定在每个敌人身上。

function createEnemy() {
    enemy = new createjs.Shape();
    enemy.graphics.beginFill("black").drawRect(0, 0, 10, 10);
    enemy.x = (Math.random() * 400) +1;
    enemy.y = 5;

    // scope direction and speed to each enemy
    enemy.enemyspeed = Math.random() *2 + 1;
    enemy.enemyrandom = Math.floor((Math.random() * 4) + 1);

    stage.addChild(enemy);
    enemys.push(enemy);
    console.log(enemys)
}

根据此更改您的其余代码......

function enemyMove() {
    if(item.enemyrandom == 1) {  // use scoped direction
        item.y -= item.enemyspeed;   // use scoped speed
        if(item.y < -10)
        {
            enemyrandom1();
        }
    }
  // ....
 }

...类似地

function enemyrandom1() {

    item.enemyrandom = Math.floor((Math.random() * 4) + 1);
    item.enemyspeed = Math.random() *2 + 1;

    if(item.enemyrandom == 1){
        item.y = 300;
        item.x = Math.floor((Math.random() * 400) + 1);     
    }
    // ....
}