0x800a1391 - JavaScript运行时错误:'Stage'未定义

时间:2013-04-19 09:37:09

标签: javascript

我正在尝试做这个教程:

http://www.sitepoint.com/creating-a-simple-windows-8-game-with-javascript-game-basics-createjseaseljs/

    <!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>CatapultGame</title>

    <!-- WinJS references -->
    <link href="//Microsoft.WinJS.1.0/css/ui-dark.css" rel="stylesheet" />
    <script src="//Microsoft.WinJS.1.0/js/base.js"></script>
    <script src="//Microsoft.WinJS.1.0/js/ui.js"></script>

    <!-- CatapultGame references -->
    <link href="/css/default.css" rel="stylesheet" />
    <script src="/js/default.js"></script>
    <script src="js/CreateJS/easeljs-0.6.0.min.js"></script>
    <script src="js/CreateJS/preloadjs-0.2.0.min.js"></script>
</head>
<body>
    <canvas id="gameCanvas"></canvas>
</body>
</html>

并且有JS文件

// For an introduction to the Blank template, see the following documentation:
// http://go.microsoft.com/fwlink/?LinkId=232509


(function () {
    "use strict";

    WinJS.Binding.optimizeBindingReferences = true;

    var app = WinJS.Application;
    var activation = Windows.ApplicationModel.Activation;

    WinJS.strictProcessing();

    var canvas, context, stage;
    var bgImage, p1Image, p2Image, ammoImage, p1lives, p2lives, title, endGameImage;
    var bgBitmap, p1Bitmap, p2Bitmap, ammoBitmap;
    var preload;

    // Current Display Factor. Because the orignal assumed a 800x480 screen
    var SCALE_X = window.innerWidth / 800;
    var SCALE_Y = window.innerHeight / 480;
    var MARGIN = 25;
    var GROUND_Y = 390 * SCALE_Y;

    function initialize() {
        canvas = document.getElementById("gameCanvas");
        canvas.width = window.innerWidth;
        canvas.height = window.innerHeight;
        context = canvas.getContext("2d");

        preload = new createjs.PreloadJS();
        preload.onComplete = prepareGame;
        var manifest = [
            { id: "screenImage", src: "images/Backgrounds/gameplay_screen.png" },
            { id: "redImage", src: "images/Catapults/Red/redIdle/redIdle.png" },
            { id: "blueImage", src: "images/Catapults/Blue/blueIdle/blueIdle.png" },
            { id: "ammoImage", src: "images/Ammo/rock_ammo.png" },
            { id: "winImage", src: "images/Backgrounds/victory.png" },
            { id: "loseImage", src: "images/Backgrounds/defeat.png" },
            { id: "blueFire", src: "images/Catapults/Blue/blueFire/blueCatapult_fire.png" },
            { id: "redFire", src: "images/Catapults/Red/redFire/redCatapult_fire.png" },
        ];

        preload.loadManifest(manifest);


        stage = new Stage(canvas); <<<--------
    }

    function prepareGame() {
        bgImage = preload.getResult("screenImage").result;
        bgBitmap = new Bitmap(bgImage);
        bgBitmap.scaleX = SCALE_X;
        bgBitmap.scaleY = SCALE_Y;
        stage.addChild(bgBitmap);

        stage.update();
    }

    function gameLoop() {

    }

    function update() {

    }

    function draw() {

    }

    app.onactivated = function (args) {
        if (args.detail.kind === activation.ActivationKind.launch) {
            if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) {
                // TODO: This application has been newly launched. Initialize
                // your application here.
            } else {
                // TODO: This application has been reactivated from suspension.
                // Restore application state here.
            }
            args.setPromise(WinJS.UI.processAll());
        }
    };

    app.oncheckpoint = function (args) {
        // TODO: This application is about to be suspended. Save any state
        // that needs to persist across suspensions here. You might use the
        // WinJS.Application.sessionState object, which is automatically
        // saved and restored across suspension. If you need to complete an
        // asynchronous operation before your application is suspended, call
        // args.setPromise().
    };

    document.addEventListener("DOMContentLoaded", initialize, false);

    app.start();
})();

但是当我试图运行该项目时,我得到并且错误地说“0x800a1391 - JavaScript运行时错误:'舞台'未定义”,位于我的代码中的标记位置。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

如果您使用的是较新版本的EaselJS(3.1是当前版本),则需要更改一些内容。最常见的是EaselJS和PreloadJS对象现在包装在createjs命名空间中。所以教程中的一行:

stage = new Stage(canvas);

变为

stage = new createjs.Stage(canvas);

和行

bgBitmap = new Bitmap(bgImage);

变为

bgBitmap = new createjs.Bitmap(bgImage);

答案 1 :(得分:0)

我希望你的应用程序中定义了Stage类,这就是为什么你在line stage = new stage(canvas)上得到错误的原因;

请交叉检查是否已在任何JS文件中定义“Stage”类(包含在HTML中)

可能是问题!!!!

感谢。