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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.07.2011, 21:18
1q2w3e4r5t6 вне форума Посмотреть профиль Отправить личное сообщение для 1q2w3e4r5t6 Найти все сообщения от 1q2w3e4r5t6
  № 1  
Ответить с цитированием
1q2w3e4r5t6

Регистрация: Jul 2011
Сообщений: 43
Question Поворот объекта в зависимости от положения курсора мыши на экране

Добрый вечер.
Наверное каждый из вас играл в игры, где нужно с помощью пушки разрушить, например, замок. Так вот в таких играх угол выстрела и его сила определялась положением курсора в приложении (выше курсор - больше угол, дальше курсор от пушки - сильнее выстрел). Хочу сделать подобное, но не получается.
Код AS3:
package Game
{
	import flash.display.Sprite;
	import flash.events.MouseEvent;
 
	public final class Cannon extends Sprite
	{
		private var cannon:Sprite;
		public function Cannon()
		{
			super();
			cannon = new Sprite();
			cannon.graphics.beginFill(0x000000, 1);
			cannon.graphics.drawRect(10,485,50,10);
			cannon.graphics.drawCircle(10,490,10);
			this.addChild(cannon);
			this.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveListener);
		}
 
		private function mouseMoveListener(e:MouseEvent):void
		{
			this.rotation = Math.atan(e.stageY/e.stageX)*180/Math.PI;
			trace(Math.atan(e.stageY/e.stageX)*180/Math.PI)
		}
	}
}
Делаю так: поворачиваю пушку на угол а=arctg(y/x), где x и y - координаты мыши в окне приложения. Но прикол в том, что ничего не поворачивается (иногда даже исчезает...). Подскажите, как правильно сделать?)

PS и как задать точку, относительно которой происходит вращение?

Старый 12.07.2011, 21:26
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 2  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Геометрия. Векторы. Загляните в соседнюю тему..

Старый 12.07.2011, 21:29
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 3  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Код AS3:
rotation = Math.atan2(stage.mouseY - this.y, stage.mouseX - this.x) * 180 / Math.PI;

Старый 12.07.2011, 22:03
1q2w3e4r5t6 вне форума Посмотреть профиль Отправить личное сообщение для 1q2w3e4r5t6 Найти все сообщения от 1q2w3e4r5t6
  № 4  
Ответить с цитированием
1q2w3e4r5t6

Регистрация: Jul 2011
Сообщений: 43
Цитата:
Сообщение от goodguy Посмотреть сообщение
Код AS3:
rotation = Math.atan2(stage.mouseY - this.y, stage.mouseX - this.x) * 180 / Math.PI;
Не, не работает... Курсор вожу по экрану, а в отладке координаты не отображаются.

Старый 12.07.2011, 22:12
Heavy вне форума Посмотреть профиль Отправить личное сообщение для Heavy Найти все сообщения от Heavy
  № 5  
Ответить с цитированием
Heavy

Регистрация: Jul 2010
Адрес: Сибирь
Сообщений: 98
Отправить сообщение для Heavy с помощью ICQ
Листенер должен слушать движение на cannon или всетаки на stage?
А формула goodguy точно рабочая.

Старый 12.07.2011, 22:16
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 6  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
+1. Строчка взята из рабочего кода.

Старый 12.07.2011, 22:49
1q2w3e4r5t6 вне форума Посмотреть профиль Отправить личное сообщение для 1q2w3e4r5t6 Найти все сообщения от 1q2w3e4r5t6
  № 7  
Ответить с цитированием
1q2w3e4r5t6

Регистрация: Jul 2011
Сообщений: 43
Не я не знаю на кого. Просто нужно чтобы когда по окну водишь мышью, в след за ней крутилась моя пушка. Как это сделать?
И еще: как задать точку, относительно которой происходит вращение? Метод есть какой?

Старый 12.07.2011, 23:01
saikspaik вне форума Посмотреть профиль Отправить личное сообщение для saikspaik Найти все сообщения от saikspaik
  № 8  
Ответить с цитированием
saikspaik

Регистрация: Nov 2009
Сообщений: 300
Делаешь
Код AS3:
stage.addEventListener
, и в это слушатель добавляешь код который привел goodguy, только изменяешь rotation своей пушки. То есть
Код AS3:
cannon.rotation = Math.atan2(stage.mouseY - this.y, stage.mouseX - this.x) * 180 / Math.PI;
Вроде ж все предельно ясно.

Старый 12.07.2011, 23:19
1q2w3e4r5t6 вне форума Посмотреть профиль Отправить личное сообщение для 1q2w3e4r5t6 Найти все сообщения от 1q2w3e4r5t6
  № 9  
Ответить с цитированием
1q2w3e4r5t6

Регистрация: Jul 2011
Сообщений: 43
Спасибо, с этим разобрался что куда и как) А точку поворота как задать-то? Да, у меня сейчас моя пушка крутится, но относительно левого верхнего угла окна (точка 0.0). А мне нужна точка (10, 490)!

Старый 12.07.2011, 23:22
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 10  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
Вроде ж все предельно ясно.
Ну вот для некоторых не ясно, что (10, 490) нужно подставить вместо this.x и this.y

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:55.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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