【发布时间】:2014-11-16 12:40:07
【问题描述】:
我正在尝试使用 paper.js 库创建一个简单的游戏,以利用它的矢量绘图框架在所有显示器上实现清晰的结果。
基本的游戏逻辑是用户必须在一定时间内将“蠕虫”移向小球,否则小球就会消失,每一次小球被蠕虫“击中”或“收集”,小球就会消失并出现一个屏幕上的其他地方会生成新的,因此可以获得更多积分。
当蠕虫击中每个球时,我已经设法得到一个原型方法,但我正在努力控制球的大小。
在此处查看工作示例http://goo.gl/uNcl5y
使用下面的方法检查距离,在这个方法中调用“destruct”(或者当球应该缩小到零半径时):
Ball.prototype = {
checkCollision: function(linepoint, ball) {
var dist = this.point.getDistance(linepoint);
if (dist <= this.radius) {
this.destruct(ball);
}
},
destruct: function(ball) {
console.log(ball.bounds.width); //returns undefined
}
}
这是使用 Paper.js 的 onFrame 函数调用的(本质上是一个 setInterval,每 30 毫秒左右调用一次,用于动画):
//set animations
function onFrame() {
for (var i = 0; i < balls.length; i++) {
balls[i].checkCollision(path.firstSegment.point, balls[i]);
}
}
据我所知,传入“balls[i]”数组对象应该可以让我访问它的属性,因此允许我更改它们,果然
destruct: function(ball) {
console.log(ball);
}
日志
{
point: { x: 89, y: 628 },
path: Path @4,
radius: 30
}
但使用 (scale() 是 paper.js 中的内置转换函数)
ball.scale(0);
返回
"Uncaught TypeError: undefined is not a function"
我无法理解正在发生的事情,任何指针将不胜感激。
【问题讨论】:
-
你不需要传球[i] 也不需要传球。
this的值是调用对象,因此您可以使用this代替:stackoverflow.com/questions/16063394/… -
感谢 HMR,我一直在使用“this”但无济于事,因此拼命尝试将球数组索引传入。
-
也许您从超时或事件处理程序中调用代码。如果是这种情况,请尝试使用绑定或传递闭包(请参阅我的其他评论中的链接)
标签: javascript arrays class object