1

2 つの js ファイルがあり、どちらも 1 つの HTML ファイルによって呼び出されます。

<script type="text/javascript" src="scripts/levelmovement.js"></script>
<script type="text/javascript" src="scripts/generation.js"></script>

levelmovement.js の一部:

function moveLevel(){
    if(firstreset == true){
        resetTime();
    }
    var time2 = new Date();
    var millis2 = time2.getTime();
    var millis3 = millis2 - millis1;
    poschange = Math.floor(millis3 / 5);
    for(i = 0; i < chunkpos.length; i++){
        temppos[i] = chunkpos[i] - poschange;
        if(temppos[i] <= -150){
            temppos[i] += 1200;
            generate(i);
        }
        pos = temppos[i];
        document.getElementById('chunk' + i).setAttribute('style','left: ' + pos + 'px;');
    }
}

関数「moveLevel()」は次のように呼び出されます。

window.onload = function(){
    gameLoop();
}

function gameLoop(){
    if(currentscreen == 'playing'){
        moveLevel();
    }
    setTimeout('gameLoop()',1);
}

Generation.js 全体:

var generatedtop;
var howtogentop = 'gen';
var howtogenbottom = 'gen';
var chunktogenerate = 0;

function topGen(g){
    document.getElementById('t' + chunktogenerate).setAttribute('src','images/terrain/t' + g + '.png');
    if(g == 'gap0'){
        howtogentop = 'gap';
    }
    else{
        howtogentop = 'gen';
    }

    if(g == 'gap0' || g == 'gap2'){
        generatedtop = 'gap';
    }
    else{
        generatedtop = 'default';
    }
}

function bottomGen(g){
    document.getElementById('b' + chunktogenerate).setAttribute('src','images/terrain/b' + g + '.png');
    if(g == 'gap0'){
        howtogenbottom = 'gap';
    }
    else{
        howtogenbottom = 'gen';
    }
}

function generate(chunknum){
    chunktogenerate = chunknum;
    var rand1 = Math.floor(Math.random()*100)+1;
    var rand2 = Math.floor(Math.random()*100)+1;
    if(howtogentop == 'gen'){
        if(rand1 <= 25){
            topGen('space');
        }
        if(rand1 <= 50 && rand1 > 25){
            topGen('jump');
        }
        if(rand1 <= 75 && rand1 > 50){
            topGen('slide');
        }
        if(rand1 > 75){
            topGen('gap0');
        }
    }
    if(howtogentop == 'gap'){
        topGen('gap2');
    }

    if(howtogenbottom == 'gen'){
        if(generatedtop == 'gap'){
            if(rand2 <= 33){
                bottomGen('space');
            }
            if(rand2 <= 66 && rand2 > 66){
                bottomGen('jump');
            }
            if(rand2 > 66){
                bottomGen('gap0');
            }
        }
        if generatedtop != 'gap'){
            if(rand2 <= 25){
                bottomGen('space');
            }
            if(rand2 <= 50 && rand2 > 25){
                bottomGen('jump');
            }
            if(rand2 <= 75 && rand2 > 50){
                bottomGen('jump');
            }
            if(rand2 > 75){
                bottomGen('gap0');
            }
        }
    }
    if(howtogenbottom == 'gap'){
        bottomGen('gap2');
    }
}

私はすべてをチェックしましたが、「moveLevel()」は次のコード行を削除した場合にのみ機能します:

generate(i);

ブラウザが「generate()」関数を認識できないように見えますが、その理由はわかりません...

4

3 に答える 3

5

この行:

if generatedtop != 'gap'){

ブラケットがありません。正しいのは次のとおりです。

if(generatedtop != 'gap'){
于 2012-06-11T01:37:38.437 に答える
3

私が抱えていた同様の問題の解決策を探してこのページに来ました。このページは直接には役に立ちませんでしたが、問題を解決するための指示を与えました.

これが発生する実際の理由は次のとおりです。

js ファイルに file1.js と言う関数があり、別の js ファイルで file2.js と呼んでいる場合、それらが同じ html ページで呼び出されたとしても、js エラーがあると関数は機能しません。 file1.js全体。エラーが発生した場合、js ファイル全体がまったく含まれていないようなものです。

したがって、解決策は、含まれているすべての js ファイルで発生しているすべての js エラーをクリーンアップすることです。

これが誰かに役立つことを願っています。

于 2013-06-05T10:02:25.830 に答える
0

これは、関数が定義される前に呼び出すためです。js ファイルをロードする順序を変更すると、問題が解決するはずです。

<script type="text/javascript" src="scripts/generation.js"></script>
<script type="text/javascript" src="scripts/levelmovement.js"></script>
于 2012-06-11T01:27:52.717 に答える