Объединение двух точек и возвращение не работает, но добавление отдельных векторов X / Y - это? - PullRequest
0 голосов
/ 25 декабря 2010

Любопытно, почему мой метод ведет себя не так, как делает это вручную.

Привет, я пытаюсь вычислить вектор X / Y (называемый здесь углом) в коде. Пока не знаю, как делать статические методы, поэтому я делаю в своем классе следующее:

private var gp:Point = new Point(); //defined at top of file
private function combinept(p1:Point, p2:Point) :Point {
    gp.x = p1.x + p2.x;
    gp.y = p1.y + p2.y;
    return gp;
}

В моем методе движения, когда я звоню:

this.vel.x = this.vel.x + this.ep.x;
this.vel.y = this.vel.y + this.ep.y;

Объект подпрыгивает, конечно, немного безумно:)

Но когда я пытаюсь:

 this.vel = this.combinept(this.vel,this.ep);

Вместо этого объект не виден на экране ... как будто он набрал дикую скорость и улетел.

Можете ли вы сказать мне, почему они будут вести себя по-другому?

Ответы [ 2 ]

1 голос
/ 25 декабря 2010

Правильно ли я догадываюсь, что this.vel - это не точка, а мувиклип или спрайт? Тогда разница будет в том, что в первом примере вы добавляете значения x и y, которые являются членами как DisplayObjects, так и Points, а во втором примере вы присваиваете возвращаемую Point для this.vel, тем самым разрывая соединение с вашим объектом. .

Попробуйте это:

private function addPoint(p1:Object, p2:Point) : void {
   p1.x += p2.x;
   p1.y += p2.y;
}

addPoint(this.vel, this.ep);

p1 в данном случае является ссылкой на this.vel, поэтому вам не нужно ничего возвращать.

1 голос
/ 25 декабря 2010

У точки уже есть метод add .

var p3 : Point = p1.add(p2);
...