2012-02-07 12 views
4

私はHTML5のキャンバスAPIを使用してJavascriptでゲームを作成しており、ロードブロッキングを達成しました。JavaScriptのゲームの問題

ゲームの効果の1つは、y軸に沿って上向きに移動するミサイルであり、これはx軸に沿って移動する風の吹き出し(タービンによって放出される)の影響を受けます。私はこれらのタービンの1つを作ることに問題はなかったが、それらの数が3に増加するとき、私は問題に遭遇する。それらがレンダリングされる前に、今

function gameStateNewLevel(){ 

    for (var i = 0; i < 2; i++){ 
     turbine = {}; 
     turbine.width = 10; 
     turbine.height = Math.floor(Math.random()*200); //turbine height 
     turbine.y = Math.floor(Math.random()*600) //turbine y-axis 
     if (Math.random()*10 > 5){ //indicates turbine side of canvas 
      turbine.side = leftSide; 
     }else{ 
      turbine.side = rightSide; 
     } 
     if(turbine.height <= 100){ //Increases turb. size if it's too small 
      turbine.height += Math.floor(Math.random()*100); 
     } 

     turbines.push(turbine); 

    } 

    context.fillStyle = "#FFFFFF"  
    switchGameState(GAME_STATE_PLAYER_START); 
} 

、彼らはまた、updateTurbine機能により更新されます。ここで見ることができるよう は、新しいレベルの時に、私は、その配列の中に押し込まれているオブジェクト、これらのタービンをインスタンス化します。このすべての機能は、タービンが互いに重なり合っていないことを確認し、必要に応じて(軸を循環してその中の各オブジェクトを比較することによって)y軸の上下に動かすようにします。私は機能を作ったが、すべてのループの間に完全に失われている。これは、約限り私が持っているようであり、私は私が間違ってトラックによ感があります:あなたは、ソースコードと私はwww.techgoldmineで壊すこの事なし得た遠いを見つけることができます

function updateTurbines(){ 
    tempTurbine = {} 
    turbinePositionTop = tempTurbine.y; 
    turbinePositionBottom = tempTurbine.y + tempTurbine.height; 
    for (var i = turbineArrayLength; i < 2; i++){ 
     tempTurbine = turbines[i]; 
     for (var i = turbineArrayLength; i < 2; i++){ 
      if (tempTurbine !== tempTurbines[i]){ 
       while(){ 

       } 
      } 
     } 
    } 
} 

を。 com

+1

提案:あなた '(turbine.height <= 100)場合、{' 'しばらく(turbine.height <= 100)でなければなりません{'場合には、新たな数が100 –

+0

の下にまだあるそれを置きますjsfiddle.net –

+2

@ジェフリーか、最初から '100 + Math.random()* 100'を使用してください... – Andrew

答えて

5

あなたのコードに誤りがありますが、ここでコメントを参照してください。

function updateTurbines(){ 
    var l = turbines[i].length; // get the turbine length directly from the array[1] 
    for (var i = 0; i < l; i++){ // go through all of the turbines 
     var tempTurbine = turbines[i]; 
     turbinePositionTop = tempTurbine.y; // now .y is defined because tempTurbine is not an empty object 
     turbinePositionBottom = tempTurbine.y + tempTurbine.height; 
     for (var j = 0; j < l; j++) { // NOT i but j here 
      if (tempTurbine !== tempTurbines[j]){ 
       while(){ 
        // ... 
       } 
      } 
     } 
    } 
} 

[1]これは、エラーが発生する可能性があります:

function updateTurbines(){ 
    tempTurbine = {} 
    turbinePositionTop = tempTurbine.y; // tempTurbine is an empty object right now so .y is undefined 
    turbinePositionBottom = tempTurbine.y + tempTurbine.height; // same problem here 
    for (var i = turbineArrayLength; i < 2; i++){ // why am I starting at the end of the array? What's the 2 for? 
     tempTurbine = turbines[i]; 
     for (var i = turbineArrayLength; i < 2; i++){ // why am I doing this twice? I'm also clobbering the value of "i" 
      if (tempTurbine !== tempTurbines[i]){ 
       while(){ 

       } 
      } 
     } 
    } 
} 

をここで私は何のやって知らずにいることを書き直したい方法です配列を変更した場合。私はあなたが今のところそれに追加すると仮定しています。

+0

あなたのお返事ありがとうございます。私は明日このショットを与え、それがどのようになったかを教えてくれる。本当にありがとう。 – styke

+0

ねえ、ちょうどあなたが近くだったと言っていたが、それは間違っていた。 var l = turbines [i] .length; これは現在のオブジェクトの長さしか持っていません。 tempTurbineも適切に定義されておらず、8行目ではtempTurbine [j]だったはずです。 いずれにしても動作しませんでした。私は答えに作業コードを掲載しました。 – styke

2

インデックスが重複している可能性があります。内部ループは外側ループの値をiに変更しています。

iを内側ループのjに変更しました。

function updateTurbines(){ 
    tempTurbine = {} 
    turbinePositionTop = tempTurbine.y; 
    turbinePositionBottom = tempTurbine.y + tempTurbine.height; 
    for (var i = turbineArrayLength; i < 2; i++){ 
     tempTurbine = turbines[i]; 
     for (var j = turbineArrayLength; j < 2; j++){ 
      if (tempTurbine !== tempTurbines[j]){ 
       while(){ 
        //What the heck is going on here? 
       } 
      } 
     } 
    } 
} 

固定されている場合はお知らせください。

+0

ありがとう、それはありませんでした機能をどのように見なければならないかを明確にするだけで解決します。あなたのアドバイスを心に留めておきます。乾杯! – styke

+0

これを考慮してください – styke

0

返信は役に立ちましたが、いずれも機能しませんでした...これが私が最後に得たコードです。

function updateTurbines(){ 
    var l = turbines.length; 
    for (var i = 0; i < l; i++){ // go through all of the turbines 
     var tempTurbine1 = turbines[i]; 
     tempTurbine1.PositionTop = tempTurbine1.y; // now .y is defined because tempTurbine is not an empty object 
     tempTurbine1.PositionBottom = tempTurbine1.y + tempTurbine1.height; 
     for (var j = 0; j < l; j++) { // NOT i but j here 
      var tempTurbine2 = turbines[j]; 
      if (tempTurbine1 !== tempTurbine2 && tempTurbine1.PositionBottom >= tempTurbine2.PositionTop){ 

    } 
    } 
    } 
}