gpt4 book ai didi

javascript - 来自纯 javascript 的 Paper.js

转载 作者:行者123 更新时间:2023-11-30 08:07:54 25 4
gpt4 key购买 nike

我正在尝试使用 paper.js 制作游戏,但有些东西无法正常工作,所以我简化了一些事情并且......不再工作了。

我尝试用 paper.js 和已经创建的命名空间 paperscript 来制作,但是调试起来太难了,所以我尝试使用 javascript directly .

即使使用 super 简单的代码在浏览器中移动一个球......它也不起作用。

这是我的代码:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Bouncing ball</title>
<link rel="stylesheet" href="../css/style.css">
<script type="text/javascript" src="../../lib/paper.js"></script>
<script type="text/javascript">
var ball;

function game(_view) {
console.log("game!");
ball = new Ball();
this.view = _view;
console.log(ball);
}

paper.install(window);
window.onload = function() {
var canvas = document.getElementById('canvas');
paper.setup(canvas);
view.onFrame = onFrame;
game(view);
}

var Ball = Base.extend({
initialize: function() {
this.position = new Point(100, 100);
this.velocity = new Point(3, 0);

this.path = new Path.Circle(location, 25);
this.path.strokeColor = 'black';
this.path.fillColor = 'black';
},

iterate: function() {
this.position += this.velocity;
this.path.position = this.position;

return this;
}
});

function onFrame(event) {
ball.iterate();
//console.log(ball);
};

</script>
</head>
<body>
<canvas id="canvas" resize></canvas>
</body>
</html>

我一直收到这个错误:

Uncaught TypeError: Cannot call method 'iterate' of undefined

最佳答案

当您分配onFrame 处理程序时,会调用setter 函数setOnFrame,它会立即调用帧处理程序。由于此时ball没有初始化,函数调用失败。

setOnFrame: function(onFrame) {
this._onFrame = onFrame;
if (!onFrame) {
delete this._onFrameCallback;
return;
}
var that = this,
requested = false,
before,
time = 0,
count = 0;
this._onFrameCallback = function(param, dontRequest) {
requested = false;
if (!that._onFrame)
return;
paper = that._scope;
requested = true;
if (!dontRequest) {
DomEvent.requestAnimationFrame(that._onFrameCallback,
that._canvas);
}
var now = Date.now() / 1000,
delta = before ? now - before : 0;
that._onFrame(Base.merge({
delta: delta,
time: time += delta,
count: count++
}));
before = now;
that.draw(true);
};
if (!requested)
this._onFrameCallback(); //here your onFrame function is called
},

如果你看this jsFiddle ,并确保您在开发工具中设置了 break on exceptions,您可以看到堆栈。解决方案是在分配处理程序之前初始化 ball

关于javascript - 来自纯 javascript 的 Paper.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14969202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com