Показать сообщение отдельно
  #3 (permalink)  
Старый 01.08.2017, 13:31
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Negotiant,
С точки зрения абстракции класса, спутник это та же планета (particle) - спутник вращается вокруг планеты, планета вращается вокруг звезды (солнца), у них абсолютно одинаковый интерфейс: x, y, radius, image, move и тд, осталось добавить type чтобы их отличать и hasClick(clickX, clickY) чтобы клик проверять:
function Particle(type/*, ...*/) {
    this.type = type;
    // ...
}
Particle.prototype.hasClick = function(x, y) {
    return Math.hypot(x - this.x, y - this.y) <= this.radius;
};

particles.push(new Particle('planet'/*, ...*/), new Particle('sputnik'/*, ...*/)/*, ...*/);

canvas.addEventListener('click', function (e) {
    for (var i = 0; i < particles.length; i++) {
        if (particles[i].hasClick(e.offsetX, e.offsetY)) {
            alert(particles[i].type);
        }
    }
});
Ответить с цитированием