【问题标题】:Accessing Class properties returns "Undefined"访问类属性返回“未定义”
【发布时间】: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


【解决方案1】:

缩放方法是在路径对象上定义的。在 destruct 函数中,你必须在路径对象上调用 scale。

 destruct: function(ball) {
        ball.path.scale(0,0);
 }

【讨论】:

  • 做到了!非常感谢,您是否碰巧知道是否可以在 onFrame() 内设置比例动画;我在文档中找不到任何关于它的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多