|
|
|||||
Двухствольное орудие
Всем привет.
Пытаюсь сделать оружие герою в игрушке. Двухстволка. Поворот оружия за мышкой - есть. Стрельба туда, куда мышкой тыцнул - тоже есть. Но, блин... Как сделать две пульки так, чтоб летели параллельно? Вот мой код: for(var shw02b:int=0;shw02b<2;shw02b++)//Две пульки { w01b = new Bullet_01(); var circle: Shape = new Shape(); circle.graphics.lineStyle(1, 0xFFFF00); circle.graphics.beginFill(0xFFFFFF, 1); circle.graphics.drawCircle(0, 0, 2); circle.graphics.endFill(); w01b.addChild(circle); angleInRadians = (hw02.rotation-90) / 180.0 * Math.PI;//hw02 - это орудие. Куда повернулось, туда и пуляем. w01b.dx = Math.cos(angleInRadians); w01b.dy = Math.sin(angleInRadians); warZone.addChildAt(w01b,1); w01Bullets.push(w01b); //Вот тут пытаюсь второй пульке придать отличные от первой координаты w01b.x = hw02.x - 6*shw02b*w01b.dx; w01b.y = hw02.y - 6*shw02b*w01b.dy; } Если менять одну координату, то при разных поворотах, расстояние между пульками будет разное. Подскажите решение, пожалуйста, кто что подобное делал. Или в моём примере как можно второй пульке координаты задать?.. Последний раз редактировалось iNils; 30.06.2013 в 00:56. |
|
|||||
На сколько большое расстояние между двумя стволами, чтобы так заморачиваться? Если очень уж хочется, очевидно, нужно найти координаты для начальных позиций пулек.
Проще всего для вас будет обозначить точки вылета пулек каким нибудь невидимым спрайтом. Поместить их внутрь персонажа чтоб вращались вместе с ним. А для получения глобальных координат воспользоваться методом localToGlobal. Либо самостоятельно находить координаты для начальных позиций пуль. В этом случае, сперва нужно выбрать одну из моделей выстрелов: В первом случае, у вас есть угол куда смотрит персонаж = a, для нахождения левой точки - вычитаете из угла персонажа половину PI, затем смещаетесь на 5 (дистанция появления пули от игрока) - вот ваша точка. Аналогично для правой, только угол = a + половина PI. На второй модели сперва, нужно найти точку относительно которой пули разводятся в стороны (маленькая красная), затем от неё как и в первой модели найти боковые точки.
__________________
Дети не должны знать о своих родителях |
|
|||||
Сделал через localToGlobal.
Поместил в пушку два спрайта над дулами. Сделал функцию: for(var shw02b:int=0;shw02b<2;shw02b++) { w01b = new Bullet_01(); var circle: Shape = new Shape(); circle.graphics.lineStyle(2, 0xFFFF00); circle.graphics.beginFill(0xFFFFFF, 1); circle.graphics.drawCircle(0, 0, 3); circle.graphics.endFill(); w01b.addChild(circle); angleInRadians = (hw02.rotation-90) / 180.0 * Math.PI; w01b.dx = Math.cos(angleInRadians)*2; w01b.dy = Math.sin(angleInRadians)*2; warZone.addChildAt(w01b,1); w01Bullets.push(w01b); if(shw02b==0) { var pt1:Point = new Point(hw02P1.x, hw02P1.y); pt1 = hw02P1.parent.localToGlobal(pt1); pt1 = parent.globalToLocal(pt1); w01b.x=pt1.x; w01b.y=pt1.y; } if(shw02b==1) { var pt2:Point = new Point(hw02P2.x, hw02P2.y); pt2 = hw02P2.parent.localToGlobal(pt2); pt2 = parent.globalToLocal(pt2); w01b.x=pt2.x; w01b.y=pt2.y; } } Только у меня в игре есть вращения и перемещения экрана. С помощью scaleX, scaleY и т.д. И когда экран вращается, то пули летят не оттуда, откуда нужно. Герой смещается, а точки отсчёта в орудии - нет. Как это можно исправить? Или, может всё же как можно вычислить, без localToGlobal? Добавлено через 51 минуту Решил другим способом, через формулы. Хотя, этот тоже рабочий. В любом случае - тему можно закрывать. |
Часовой пояс GMT +4, время: 00:31. |
|
« Предыдущая тема | Следующая тема » |
|
|