Я пытаюсь сделать shmup и попытаться создать конкретный «шаблон пули». В принципе, у меня есть вражеский огонь, и несколько пуль вытесняются вокруг круга. Предположим, что этот круг пуль направлен вправо. Затем, я хочу, чтобы круг обрушился на себя, поэтому я добавляю второй импульс к скоростям стрелки x &. По существу, так что форма пули увольняет выглядит примерно так, как он путешествует (я надеюсь, что это дрянная символизация имеет смысл):AS3 дополнительное движение по линейному пути
O o • o O
Это работает.
Тогда я просто хочу, чтобы свернуть его вертикальное положение, а не по горизонтали, так это будет выглядеть следующим образом:
O — O
Я также могу это сделать. НО, если я попытаюсь снять этот круг по диагонали или в направлении, отличном от горизонтально или вертикально, он немного сломается.
Вот код, с которым я работаю, раздел с clusterGrowthX & Y - это та часть, с которой я столкнулся. Решение, вероятно, смотрит мне прямо в лицо, но я не могу понять это сейчас. Любые вопросы, просто спросите. Благодарю.
for(var j:int = 0; j < _info.clusterAmount; j++)
{
var around : Number = _info.angle - (_info.clusterRange/2) + (_info.clusterRange/_info.clusterAmount/2) + j * (_info.clusterRange/_info.clusterAmount);
var xOff : Number = (Math.cos(around) * _info.clusterRadius);
var yOff : Number = (Math.sin(around) * _info.clusterRadius);
var bullet = new _info.bulletShape(_info);
bullet.x = startPoint.x + xOff;
bullet.y = startPoint.y + yOff;
if(_info.dParent is PlayerControl)
{
bullet.x += Math.cos(_info.angle) * 40;
bullet.y += Math.sin(_info.angle) * 40;
}
var sign : Number = (_info.angle < 0) ? -1 : 1;
trace(Math.cos(around),Math.sin(around));
bullet.info.vx += Math.cos(around) * _info.clusterGrowthX;
bullet.info.vy += Math.sin(around) * _info.clusterGrowthY;
bullet.rotation = _info.angle * 180/Math.PI;
_info.dLevel.addChild(bullet);
}
Я думаю, это должно помочь вам: http://math.stackexchange.com/questions/17246/is-there-a-way-to-rotate-the-graph-of-a-функция (после применения первого вращение преобразуется в соответствии с круговым рисунком, вы не можете вращать с помощью sin cos больше, вам нужно использовать матрицы вращения). Я столкнулся с этой проблемой: таким образом, я создал новый объект матрицы ->, переведенный x | y ->, повернул матрицу со встроенной функцией -> plug back x | y или вы могли сами вникать в матричные вычисления. – chadiik
Ха-ха, +1 для обучения меня термину [shmup] (http://en.wikipedia.org/wiki/Shoot_'em_up). Я почти всю свою жизнь мучился и даже не знал об этом. –
Если он работает, когда он совершенно горизонтальный, просто положите его в контейнер Sprite и поверните и переместите его так, как вам нужно, ваши вычисления тогда не будут затронуты им, потому что пуля всегда будет относительно ее контейнера. – M4tchB0X3r