Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从对象Javascript内部调用的setInterval?_Javascript_Object_Canvas_Game Engine - Fatal编程技术网

从对象Javascript内部调用的setInterval?

从对象Javascript内部调用的setInterval?,javascript,object,canvas,game-engine,Javascript,Object,Canvas,Game Engine,我正在尝试用Jvascript制作一个游戏引擎。到目前为止,我已经: function gameEngine() { this.canvas = $('canvas')[0]; this.ctx = this.canvas.getContext('2d'); this.framerate = 20; this.resetCanvas = function() { this.ctx.fillStyle = 'red'; this.

我正在尝试用Jvascript制作一个游戏引擎。到目前为止,我已经:

function gameEngine() {

    this.canvas = $('canvas')[0];
    this.ctx = this.canvas.getContext('2d');
    this.framerate = 20;

    this.resetCanvas = function() {
        this.ctx.fillStyle = 'red';
        this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);
    };

    this.loop = function() {
        this.resetCanvas();
    };

    this.run = function() {
        setInterval(this.loop, this.framerate);
    };
}

new gameEngine();

但是画布没有出现;为什么?

您从未调用过
setInterval

var ngin = new gameEngine();
ngin.run();

您从不调用
setInterval

var ngin = new gameEngine();
ngin.run();
共同解决办法:

然后您需要实际调用
run
方法:

new gameEngine().run();

// or 

function gameEngine() {

    // snip...

    this.run();
}
共同解决办法:

然后您需要实际调用
run
方法:

new gameEngine().run();

// or 

function gameEngine() {

    // snip...

    this.run();
}

初始化
gameEngine
后,需要调用
run()
函数。您可能还希望将
游戏引擎
存储在变量中

例如:

var myGameEngine = new gameEngine();
myGameEngine.run();

或者,如果不想调用run,请将
this.run()
粘贴在对象定义的末尾。这样就不需要存储对
gameEngine
对象的引用,尽管您可能仍然需要存储引用以供以后参考。

您需要在初始化
gameEngine
后调用
run()
函数。您可能还希望将
游戏引擎
存储在变量中

const ngin = new gameEngine()
ngin.run()
例如:

var myGameEngine = new gameEngine();
myGameEngine.run();

或者,如果不想调用run,请将
this.run()
粘贴在对象定义的末尾。这样就不需要存储对
gameEngine
对象的引用,尽管您可能仍然需要存储引用以供以后参考。

感谢您提供的链接,这对我有很大帮助:)将在我可以的时候接受!您会使用bind方法还是closure方法?这有关系吗?再次感谢!我更喜欢
Function.bind
,但是如果你打算支持IE的旧版本(呃,我不敢相信我在2013年还在谈论这个…),那么你需要感谢这个链接,这已经帮了很多忙:)会在我可以的时候接受!您会使用bind方法还是closure方法?这有关系吗?再次感谢!我更喜欢
Function.bind
,但是如果你打算支持旧版本的IE(呃,我不敢相信我在2013年还在谈论这个…),那么你需要我不建议让构造函数做初始化值以外的任何工作(关于:第2段)。JSLint甚至会对此抱怨,我不建议让构造函数做初始化值以外的任何工作(关于:第2段)。JSLint甚至会对此抱怨
const ngin = new gameEngine()
ngin.run()