Я пытаюсь воссоздать игру Asteroids. Это пример кода для конструктора объекта Ship (я использую функцию конструктора, а не литерал объекта, потому что this
не работает должным образом при ссылке на переменные в литерале):
function Ship(pos) {
var position = pos ? pos : view.center;
var segments = [
new Point(position) + new Point(0, -7.5), // Front of ship
new Point(position) + new Point(-5, 7.5), // Back left
new Point(position) + new Point(0, 3.5), // Rear exhaust indentation
new Point(position) + new Point(5, 7.5) // Back right
]
this.shipPath = new Path.Line({
segments: segments,
closed: true,
strokeColor: '#eee',
strokeWidth: 2
});
this.velocity = new Point(0, -1);
this.steering = new Point(0, -1);
this.rot = function(ang) {
this.steering.angle += ang;
this.shipPath.rotate(ang, this.shipPath.position);
}
this.drive = function() {
this.shipPath.position += this.velocity;
}
}
var ship = new Ship();
var path = new Path({
strokeColor: '#ddd',
strokeWidth: 1
});
function onFrame(event) {
path.add(ship.shipPath.position);
ship.drive();
}
Я не упомянул обработчики клавиш, которые управляют кораблем, но в основном они вызывают функцию this.rot()
под разными углами в зависимости от того, была ли нажата правая или левая кнопка.
По сути, моя проблема заключается в том, что, согласно этому, при управлении кораблем корабль должен вращаться вокруг своей shipPath.position
, что оставляет эту точку движущейся по прямой линии, когда корабль вращается вокруг нее. Вместо этого это происходит:
Кудрявая часть path
связана с тем, что я непрерывно управлял кораблем в течение нескольких секунд. Почему это происходит? Если корабль вращается вокруг своего position
, почему положение должно колебаться в сторону, когда корабль вращается?
Вот ссылка на то, как это работает на моем собственном веб-сайте: http://aronadler.com/asteroid/ Я бы с удовольствием поместил это на jsbin или codepen, но, несмотря на многочасовую работу, я так и не смог заставить paperscript работать в javascript.
Вот набросок. Поскольку по какой-то причине Sketch не позволяет обнаруживать клавиши со стрелками, я задал ему автоматическое постоянное вращение. Эффект тот же.
window.onload = function() { paper.install(window); paper.setup('canvas'); // code }
, но это дает мне сообщение об ошибкеUncaught TypeError: Cannot use 'in' operator to search for 'point' in { x: 0, y: 0 }{ x: 0, y: -7.5 }
- person Aron   schedule 30.12.2015paper.setup('canvas')
. Что я теряю, так это возможность использовать+
(и другие операторы) в точках; Я должен сделатьpoint1.add(point2)
и т. д. И я должен ссылаться на все бумажные функции и конструкторы с префиксомpaper
, поэтомуpaper.Path.Line
и т. д. - person bmacnaughton   schedule 30.12.2015