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

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

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

Регистрация: Jan 2011
Сообщений: 247
Attention Правильное вращение объекта

Столкнулся с проблемой правильного вращения объекта по координатам мыши :
Код AS3:
var dx:Number = mousePositionX - hero.x;
var dy:Number = mousePositionY - hero.y;
hero.rotation = Math.atan2(dy, dx) * 180 / Math.PI;
данный пример стоит и не работает, есть у кого готовая формула для правильного вращения по координатам мыши ?

Старый 04.05.2013, 22:02
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
проблема не в этом коде

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

Регистрация: Jan 2011
Сообщений: 247
Цитата:
Сообщение от caseyryan Посмотреть сообщение
проблема не в этом коде
я пробовал менять менять формулу было местами где-то похожее на правильное реагирование, но так как есть сейчас объект вращается "как-то вообще не понятно" , не делая даже 360 градусов.
P.S.вращение объекта только тут присваиваться

Старый 04.05.2013, 23:26
NikolyA вне форума Посмотреть профиль Отправить личное сообщение для NikolyA Найти все сообщения от NikolyA
  № 4  
Ответить с цитированием
NikolyA
 
Аватар для NikolyA

Регистрация: Dec 2006
Сообщений: 1,764
так все же? что надо и что у вас есть?
__________________
а за окном атлантический океан!

Старый 04.05.2013, 23:35
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 5  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Проблема в переменных mousePositionX и mousePositionY. Вот набросал рабочий пример.
TestProject.swf   (1.5 Кб)

Код AS3:
package 
{
	import flash.display.Graphics;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	/**
	 * ...
	 * @author bav
	 */
	[Frame(factoryClass="Preloader")]
	public class Main extends Sprite 
	{
		private var hero:Sprite;
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
			hero = new Sprite();
			var g:Graphics = hero.graphics;
			g.lineStyle(1);
			g.beginFill(0xFFFF00);
			g.moveTo( -10, -10);
			g.lineTo(10, 0);
			g.lineTo(-10, 10);
			g.lineTo( -10, -10);
			g.endFill();
 
			hero.x = stage.stageWidth / 2;
			hero.y = stage.stageHeight / 2;
			addChild(hero);
 
			stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
		}
 
		private function mouseMoveHandler(e:MouseEvent):void 
		{
			var dx:Number = e.stageX - hero.x;
			var dy:Number = e.stageY - hero.y;
			hero.rotation = Math.atan2(dy, dx) * 180 / Math.PI;
 
			var g:Graphics = this.graphics;
			g.clear();
			g.lineStyle(2, 0xFF0000);
			g.moveTo(hero.x, hero.y);
			g.lineTo(e.stageX, e.stageY);
		}
 
	}
 
}
Вложения
Тип файла: swf TestProject.swf (1.5 Кб, 90 просмотров)

Старый 04.05.2013, 23:41
GrafMine вне форума Посмотреть профиль Отправить личное сообщение для GrafMine Найти все сообщения от GrafMine
  № 6  
Ответить с цитированием
GrafMine
 
Аватар для GrafMine

Регистрация: Jan 2011
Сообщений: 247
Цитата:
Сообщение от NikolyA Посмотреть сообщение
так все же? что надо и что у вас есть?
Надо чтоб герой вращался в указанную сторону мышкой , а при данной формуле он "смотрит" только в правый нижний угол игрового поля, и в зависимости где мышка иногда может повернуться на 30-40 градусов ниже или выше
А есть у меня вот такой вот код :
Код AS3:
// create hero 
hero = new Sprite;
hero.graphics.beginFill(0xff0000, 1); 
hero.graphics.drawRect( -15, -15, 30, 50);
hero.graphics.endFill();
hero.x = 200;
hero.y = 200;
addChild(hero);
 
 
 
private function mouseMoveHandler(event:MouseEvent):void {// может тут что-то не правильно...
			if(event.stageX > gameWidth * .1 && event.stageX < gameWidth * .9) {
				mousePositionX = event.stageX;
			}
			if(event.stageY > gameHeight * .5 && event.stageY < gameHeight * .9) {
				mousePositionY = event.stageY;
			}
		}
 
 
private function enterFrameHandler(event:Event):void {
var dx:Number = mousePositionX - hero.x;
var dy:Number = mousePositionY - hero.y;
hero.rotation =Math.atan2(dy, dx) * 180 / Math.PI;
}

Старый 05.05.2013, 00:01
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 7  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Может просто координаты героя в глобальной системе вовсе не (200, 200)?
Плюс не факт, что mouseMoveHandler срабатывает
Напишите надёжнее:
Код AS3:
var dx:Number = stage.mouseX - hero.x;
var dy:Number = stage.mouseY - hero.y;
Или даже так:
Код AS3:
var heroXY:Point = hero.localToGlobal(new Point());
var dx:Number = stage.mouseX - heroXY.x;
var dy:Number = stage.mouseY - heroXY.y;

Старый 05.05.2013, 00:13
GrafMine вне форума Посмотреть профиль Отправить личное сообщение для GrafMine Найти все сообщения от GrafMine
  № 8  
Ответить с цитированием
GrafMine
 
Аватар для GrafMine

Регистрация: Jan 2011
Сообщений: 247
Цитата:
Сообщение от bav Посмотреть сообщение
Проблема в переменных mousePositionX и mousePositionY. Вот набросал рабочий пример.
впринцепи нечем не отличается ну я все равно поставил ваш пример, теперь вращается ну присутствует косяк .
Косяк в том что примерно ровно 90 градусов между тем куда смотрит герой и куда поидеи он "должен смотреть на мышку"... все перепроверил 1000 раз не могу понять...

Цитата:
Сообщение от expl Посмотреть сообщение
Может просто координаты героя в глобальной системе вовсе не (200, 200)?
Плюс не факт, что mouseMoveHandler срабатывает
Напишите надёжнее:
ну в компилированом приложении он в таких примерно координатах и стоит, а как проверить в глобальной ситеме ?
попробовал даже ваш :
Код AS3:
var heroXY:Point = hero.localToGlobal(new Point());
var heroXX:Point = hero.localToGlobal(new Point());
var dx:Number = event.stageX - heroXX.x;
var dy:Number = event.stageY - heroXY.y;
hero.rotation = Math.atan2(dy, dx) * 180 / Math.PI;
все равно, вот 90 градусов как буд-то не хватает...

Старый 05.05.2013, 00:17
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 9  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Так может нарисовать героя надо было смотрящим в нужную сторону (на 3 часа, а не на 0)?
Ну или просто доворачивать его на 90.
__________________
Reality.getBounds(this);

Старый 05.05.2013, 00:29
GrafMine вне форума Посмотреть профиль Отправить личное сообщение для GrafMine Найти все сообщения от GrafMine
  № 10  
Ответить с цитированием
GrafMine
 
Аватар для GrafMine

Регистрация: Jan 2011
Сообщений: 247
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Так может нарисовать героя надо было смотрящим в нужную сторону (на 3 часа, а не на 0)?
Ну или просто доворачивать его на 90.
поставил треугольник что на форуме, понял что да неправильно нарисован, но когда начал стрелять то стрелять начал боком( то есть где раньше было лицо) т.е. все-таки правильно все было?
Код AS3:
bullet.rotation = hero.rotation;
все проблема решена так :
Код AS3:
hero.rotation = (Math.atan2(dy, dx) * 180 / Math.PI)-90;
Спасибо большое за помощь

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

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

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


 


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


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