2014-11-04 43 views
0

美好的一天,每个人。Javascript(EaselJS) - 敌人同时具有相同的功能?

我想用javascript开发道奇游戏。

我该如何解决我创建的所有3个敌人都具有相同功能的部分?我希望他们分开。因为他们三人都应该走向敌人的结局1();

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

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(); 
}} 

enemyforloop处于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/

回答

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);  
    } 
    // .... 
} 
+0

我试过了,它工作。谢谢。我仍然试图了解我做错了什么。所以我不会重复同样的错误。永远不会想到这个解决方案。但它的确很有意义。谢谢你。 – user1978133 2014-11-06 19:27:11

0

你作用域在全球范围内的“项目”(类似你贴在CreateJS社区最初的例子,你的范围,在全球的“敌人”范围也是如此),所以你有同样的问题。

相反,item应该声明的功能,并传递到“enemyMove”的方法:

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. 
} 

确保你在你的代码的顶部去掉“VAR项目”。你应该只声明这样的事情,在他们的寿命期间不需要改变。您的enemyitem对象是暂时的,并且经常更改。

希望这会有所帮助。

+0

读你的解释后。我知道我错了哪里。然而你的解决方案并没有为我工作。我本来可能做错了。谢谢。 – user1978133 2014-11-06 19:29:04

+0

随时分享您的解决方案! – Lanny 2014-11-07 23:43:20

相关问题