首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >javascript:未捕获引用错误

javascript:未捕获引用错误
EN

Stack Overflow用户
提问于 2018-07-15 00:48:55
回答 1查看 48关注 0票数 0

我正在做一个javascript游戏,使用画布。然而,我得到了错误(下图),背景图像没有显示。我怀疑下面4个文件,因为其他文件没有任何麻烦。我猜这个问题和game_state...how有关,我能解决这个问题吗?我苦恼了两天:(请帮帮我)

error image1

error image2

index.html

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="ko">

<head>
 <meta charset="utf-8">
 <title>Lion Travel</title>

 <!--GameFramework-->
 <script src="/.c9/gfw/GameFramework.js"></script>
 <script src="/.c9/gfw/FrameCounter.js"></script>
 <script src="/.c9/gfw/InputSystem.js"></script>
 <script src="/.c9/gfw/SoundManager.js"></script>
 <script src="/.c9/gfw/GraphicObject.js"></script>
 <script src="/.c9/gfw/SpriteAnimation.js"></script>
 <script src="/.c9/gfw/ResourcePreLoader.js"></script>
 <script src="/.c9/gfw/DebugSystem.js"></script>
 <script src="/.c9/gfw/Timer.js"></script>
 <script src="/.c9/gfw/FrameSkipper.js"></script>
 <script src="/.c9/gfw/TransitionState.js"></script>

 <!--GameInit-->
 <script src="/.c9/gfw/gfw.js"></script>

 <!--Game Logic-->
 <script src="/.c9/RS_Title.js"></script>

</head>

<body>
    <canvas id="GameCanvas" width="800" height="600">html5 canvas is not supported.</canvas>
</body>
</html>

gfw.js

代码语言:javascript
复制
function onGameInit() {
    document.title = "Lion Travel";

    GAME_FPS = 30;
    debugSystem.debugMode = true;

    resourcePreLoader.AddImage("/.c9/title_background.png");
    soundSystem.AddSound("/.c9/background.mp3", 1);

    after_loading_state = new TitleState();
    setInterval(gameLoop, 1000 / GAME_FPS); 
}

window.addEventListener("load", onGameInit, false);

RS_Title.js

代码语言:javascript
复制
function TitleState() 
{
    this.imgBackground = resourcePreLoader.GetImage("/.c9/title_background.png");
    soundSystem.PlayBackgroundMusic("/.c9/background.mp3");
    return this; 
}

TitleState.prototype.Init = function()
{
    soundSystem.PlayBackgroundMusic("/.c9/background.mp3");
};

TitleState.prototype.Render = function()
{
    var theCanvas = document.getElementById("GameCanvas");
    var Context = theCanvas.getContext("2d");

    //drawing backgroundimage
    Context.drawImage(this.imgBackground, 0, 0);
};

TitleState.prototype.Update = function()
{

};

GameFramework.js

代码语言:javascript
复制
var GAME_FPS;
var game_state = after_loading_state;

function ChangeGameState(nextGameState)
{
    //checking essential function
    if(nextGameState.Init == undefined)
        return;

    if(nextGameState.Update == undefined)
        return;

    if(nextGameState.Render == undefined)
        return;

    game_state = nextGameState;

    game_state.Init();
}

function Update() 
{
    timerSystem.Update();

    game_state.Update();

    debugSystem.UseDebugMode();
}

function Render()
{
    //drawing
    var theCanvas = document.getElementById("GameCanvas");
    var Context = theCanvas.getContext("2d");

    Context.fillStyle = "#000000";
    Context.fillRect(0, 0, 800, 600);

    //game state
    game_state.Render();

    if(debugSystem.debugMode)
    {
        //showing fps
        Context.fillStyle = "#ffffff";
        Context.font = '15px Arial';
        Context.textBaseline = "top";
        Context.fillText("fps: "+ frameCounter.Lastfps, 10, 10);
    }
}

function gameLoop()
{
    Update();
    Render();

    frameCounter.countFrame();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-15 04:53:49

这里的问题是,您甚至在初始化after_loading_state (只有在加载文档之后才初始化)之前就使用对象after_loading_state来初始化game_state。因此,game_state仍然是undefined

要解决此问题,请将GameFramework.js中的var game_state = after_loading_state;更改为var game_state;。并在gameLoop函数中添加game_state = after_loading_state;作为第一行。这样,变量的初始化就会以正确的顺序发生。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51341458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档