2014-11-16 3 views
0

Я пытаюсь создать простую игру, используя библиотеку paper.js, чтобы получить четкие результаты на всех дисплеях, используя ее векторную схему рисования.Доступ к свойствам класса возвращает «Undefined»

Основная логика игры заключается в том, что пользователь должен перемещать «червяк» по направлению к шарам в течение определенного времени или они исчезают, каждый раз, когда мяч «попадает» или «собирается» червем, тогда мяч исчезает и новый создается в другом месте на экране, что позволяет получить больше очков.

Мне удалось получить прототипный метод, стреляющий по каждому шару, когда червь бьет его, но я стараюсь манипулировать размером шаров, когда это происходит.

Смотрите рабочий пример здесь http://goo.gl/uNcl5y

Расстояние проверяется с помощью метода ниже, и в этом методе «уничтожение» (или, когда мяч должен сжать до радиуса нуля) называется в ней:

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]); 
    } 
}  

Насколько я могу сказать, проходящей в «шары [I]» объект массив должен дать мне доступ к его свойства, и поэтому позвольте мне изменить их, достаточно уверен

destruct: function(ball) { 
     console.log(ball); 
    } 

журналы

{ 
    point: { x: 89, y: 628 }, 
    path: Path @4, 
    radius: 30 
} 

но с использованием (шкала() представляет собой функцию преобразования встроенные в paper.js)

ball.scale(0); 

возвращается

"Uncaught TypeError: undefined is not a function" 

Я не могу обернуть голову вокруг того, что происходит, любые указатели будут очень благодарны.

+0

Вам не нужно передавать мячи [i] или мяч. Значение 'this' является вызывающим объектом, поэтому вы можете использовать' this' вместо этого: http://stackoverflow.com/questions/16063394/prototypical-inheritance-writing-up/16063711#16063711 – HMR

+0

Спасибо HMR, я использовал «это», но безрезультатно, отсюда и отчаянная попытка передать индекс шаровой матрицы. – user3586963

+0

Возможно, вы вызываете код из тайм-аута или обработчика события. Если это так, попробуйте использовать bind или передать закрытие (см. Ссылку в моем другом комментарии) – HMR

ответ

0

Метод масштабирования определяется для объекта пути. В функции destruct вы должны называть масштаб объекта пути.

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

Проверьте http://sketch.paperjs.org/ для рабочего примера. – Aravind

+0

Вот и все! Большое спасибо, вам известно, можно ли анимировать масштаб внутри onFrame(); Я не могу найти ничего об этом в документации. – user3586963

Смежные вопросы