Проблема с вращением при отражении (2D-платформа)
Рука моего игрока запрограммирована так, чтобы она следовала за моей мышью и вращалась соответственно, и я запрограммировал выстрелы пуль с использованием этого значения вращения
(Math.atan2(this._dy, this._dx) * 180 / Math.PI
где _dy - это положение мыши y (-), y руки моего игрока, а _dx - положение мыши (-) y руки моего игрока.
Однако, когда я программирую проигрыватель на отражение, когда мышь пересекла X-координаты, угол пули также отражается. Как бы я исправить эту проблему?
Я уже пытался вычесть 180 из угла, но он по-прежнему не срабатывает в направлении мыши.
1 ответ
Во-первых, убедитесь, что у вас есть отношения родителя-ребенка-брата: "A" должен быть родителем "B" и "C". "B" и "C" не должны иметь прямой связи. Их связь в том, что у них один и тот же родитель. Поэтому, когда вы хотите переместить персонажа, переместите родителя, и оба переместятся. Теперь для хороших вещей:
Используйте ключевые кадры и родственные отношения
подход начального уровня
Сделайте персонажа и руку обоих потомков одного и того же родительского контейнера экранного объекта (Movie Clip в этом случае). Теперь вместо того, чтобы что-то переворачивать с помощью xScale, что, как я полагаю, вы сделали, вы можете просто заставить обоих дочерних элементов MC (руки и персонажа) перейти к кадру 2 (или к тому, что доступно), где переворачивается графика.
xScale body, переместить руку в кадр 2, изменить порядок z
подход умеренного уровня (лучший результат)*
В качестве альтернативы, вы можете выполнить ту же настройку "родного брата", что и выше, а затем масштабировать персонажа, но не руку (я думаю, что масштабирование руки снова испортит ее, но вы могли бы сделать так, чтобы рука переместилась в кадр 2 и перевернула ее в обратном направлении. таким образом, большой палец и рукоятка указывают в правильном направлении. Бонусные баллы за изменение порядка размещения z, так что рука переходит на другую сторону тела. xScale только для тела позволяет вам иметь только один набор кадров для анимации его ног и туловище и т. д., но также избегайте масштабирования руки вообще).
Глобальные свойства
продвинутый подход
Третий вариант - использовать глобальное вращение и глобальные точки. Я не буду иллюстрировать это здесь, потому что я не настолько продвинут, и мне потребуется время, чтобы выяснить точный синтаксис. Если вы уже освоили глобальные свойства, попробуйте это; Если нет, попробуйте один из приведенных выше.
* Пример (лучший результат)
if (facingRight == true && stage.mouseX < totalChar.x){
// totalChar is on the stage
// and contains two children:
// armAndGun and bodyHeadLegs
totalChar.armAndGun.gotoAndStop(2);
// in frame 2 of the arm MC, draw the
// arm and gun in the flipped orientation
totalChar.addChild(bodyHeadLegs);
// re-ads body to parent so it's
// z-order is above the arm;
totalChar.bodyHeadLegs.xScale = -1;// flips body and any animation of legs and head
facingRight = false;
// use a variable or property like this
// to keep him from constantly flipping
}
Вам понадобится подобный код, чтобы перевернуть его обратно.