2014-11-04 5 views
0

안녕하세요.Javascript (EaselJS) - 적의 같은 기능을 동시에합니까?

나는 자바 스크립트로 닷지 게임을 개발하려하고있다.

내가 만드는 세 명의 적 모두가 같은 기능을 수행하는 부분을 어떻게 해결할 수 있습니까? 나는 그것들이 분리되기를 바란다. 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는 티커 방식입니다. 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);  
} 
} 

나는 enemyrandom을 건너 뛰고 enemymove 2,3,4를 사용하므로 질문에 더 많은 공간이 필요하지 않습니다. 나는 내 질문에 내가 분명하기를 희망한다.

은 지금 당신은 당신이 CreateJS 커뮤니티에 게시 된 최초의 예 (유사 전역 범위에서 "항목을"범위 한 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

0

의 모습입니다 세계의 "적"당신 범위 범위뿐만 아니라), 그래서 당신은 같은 문제가 있습니다.

대신, 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

+0

자유롭게 솔루션을 공유하십시오! – Lanny