изменение положения объектов в зависимости от масштаба

В моей игре есть самолеты, которые пролетают мимо экрана с видом сверху вниз. когда самолеты падают, я уменьшаю их масштаб, чтобы казалось, что они падают ближе к земле и дальше от экрана. У меня тоже есть турели на этих крафтах. это отдельные объекты с воздушного плана. Я их тоже уменьшаю. Единственная проблема в том, что они неправильно позиционируются. они остаются в своих положениях x и y, даже если они масштабируются, это выглядит так, как будто они отрываются от воздушного самолета. возможно ли правильно изменить их положение в зависимости от размера объекта, на котором они сидят (например, воздушные самолеты)

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


person numerical25    schedule 19.01.2010    source источник


Ответы (1)


Вы должны хранить все для каждой плоскости внутри своего собственного MovieClip. Но все же полезно знать, как это сделать без встроенного scaleX/scaleY. С вашими текущими настройками это можно сделать так (где плоскость — это ваша плоскость, масштаб — это коэффициент (от 0 до 1), до которого вы собираетесь масштабировать плоскость, а турель — это турель, которая должна масштабироваться относительно самолет):

function scalePlane(plane, turret, scale:Number):void {

    //scaling coordinates:
    var relativeX:Number = turret.x - plane.x;
    var relativeY:Number = turret.y - plane.y;
    var newRelativeX:Number = relativeX*scale;
    var newRelativeY:Number = relativeY*scale;
    turret.x = plane.x + newRelativeX;
    turret.y = plane.y + newRelativeY;
    //scaling size:
    turret.scaleX *= scale;
    turret.scaleY *= scale;
    plane.scaleX *= scale;
    plane.scaleY *= scale;
}

scalePlane(plane1, turret1, 0.9);
//overall scale is 0.9;
//next frame:
scalePlane(plane1, turret1, 0.9);
//now the overall scale is 0.81 because you are multiplying the scales

Я не проверял это, но это должно работать, если у самолета и башни одни и те же родители. Обратите внимание, что масштаб в этом случае является относительным, поэтому вам, возможно, придется немного изменить свои расчеты. (если бы вы дважды вызвали этот код с масштабом 0,5, плоскость имела бы масштаб 0,5 * 0,5 = 0,25)

person Ponkadoodle    schedule 19.01.2010
comment
Благодарю. Я храню все внутри мувиклипа, но, похоже, он не слушает мой класс башни, когда я делаю это таким образом. должно быть? Я делаю что-то неправильно - person numerical25; 19.01.2010
comment
неважно, теперь я знаю, почему. Я настроил его в своем игровом движке, где используется только один цикл. и все классы используют метод updateObject для обновления своего статуса в каждом кадре. так как я помещаю свои турели в мувиклип, а не добавляю их таким образом, это не может работать правильно - person numerical25; 19.01.2010
comment
Единственная причина, по которой я сделал это таким образом, заключается в том, что мне не нужно беспокоиться об уничтожении всех прослушивателей событий и циклов displayobjects. Если я добавлю прослушиватель событий в свой класс башни и добавлю их непосредственно в мой муви-клип с самолетом. они будут уничтожены, когда я уничтожу самолет - person numerical25; 19.01.2010
comment
это не сработало. только что попробовал. масштаб должен быть приращением, на которое он масштабируется, или текущим размером масштаба. - person numerical25; 19.01.2010
comment
Я отредактировал свой пост, чтобы показать, как вы будете использовать его для масштабирования как координат, так и размера. - person Ponkadoodle; 19.01.2010