Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.06.2013, 23:39
ndiezel вне форума Посмотреть профиль Отправить личное сообщение для ndiezel Посетить домашнюю страницу ndiezel Найти все сообщения от ndiezel
  № 1  
Ответить с цитированием
ndiezel
 
Аватар для ndiezel

Регистрация: Mar 2009
Адрес: Из города на Ингуле
Сообщений: 116
Отправить сообщение для ndiezel с помощью ICQ
По умолчанию Двухствольное орудие

Всем привет.
Пытаюсь сделать оружие герою в игрушке. Двухстволка.
Поворот оружия за мышкой - есть. Стрельба туда, куда мышкой тыцнул - тоже есть. Но, блин... Как сделать две пульки так, чтоб летели параллельно?

Вот мой код:
Код AS3:
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.
Старый 30.06.2013, 13:12
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 2  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
На сколько большое расстояние между двумя стволами, чтобы так заморачиваться? Если очень уж хочется, очевидно, нужно найти координаты для начальных позиций пулек.

Проще всего для вас будет обозначить точки вылета пулек каким нибудь невидимым спрайтом. Поместить их внутрь персонажа чтоб вращались вместе с ним. А для получения глобальных координат воспользоваться методом localToGlobal.

Либо самостоятельно находить координаты для начальных позиций пуль.
В этом случае, сперва нужно выбрать одну из моделей выстрелов:
Название: выстрел из 2 позиций.PNG
Просмотров: 303

Размер: 7.9 Кб

В первом случае, у вас есть угол куда смотрит персонаж = a, для нахождения левой точки - вычитаете из угла персонажа половину PI, затем смещаетесь на 5 (дистанция появления пули от игрока) - вот ваша точка. Аналогично для правой, только угол = a + половина PI.

На второй модели сперва, нужно найти точку относительно которой пули разводятся в стороны (маленькая красная), затем от неё как и в первой модели найти боковые точки.
__________________
Дети не должны знать о своих родителях

Старый 30.06.2013, 22:39
ndiezel вне форума Посмотреть профиль Отправить личное сообщение для ndiezel Посетить домашнюю страницу ndiezel Найти все сообщения от ndiezel
  № 3  
Ответить с цитированием
ndiezel
 
Аватар для ndiezel

Регистрация: Mar 2009
Адрес: Из города на Ингуле
Сообщений: 116
Отправить сообщение для ndiezel с помощью ICQ
Сделал через localToGlobal.
Поместил в пушку два спрайта над дулами.

Сделал функцию:
Код AS3:
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.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 00:31.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.