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

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

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

Регистрация: May 2009
Сообщений: 122
По умолчанию Вращение вокруг своей оси

Есть код
Код AS3:
var angle:Number = 0;
var angleChange:Number = 10; // speed
 
var radius:Number = 100;
 
var centerX:Number = stage.stageWidth / 2;
var centerY:Number = stage.stageHeight / 2;
 
var satellite:MovieClip = new Asteroid();
satellite.x = stage.stageWidth / 2;
satellite.y = stage.stageHeight / 2;
addChild(satellite);
 
addEventListener(Event.ENTER_FRAME, onLoop, false, 0, true);
function onLoop(evt:Event):void
{
	var radian:Number = deg2rad(angle);
	satellite.x = centerX + radius * Math.cos(radian);
	satellite.y = centerY + radius * Math.sin(radian)
	angle += angleChange;
	angle %= 360;
	if(angle == 0)
		angleChange = 0;
}
 
function deg2rad(deg:Number):Number {
	return deg * (Math.PI/180)
}
В данное случае объект вращается относительно центра сцены.
Подскажите пожалуйста, как сделать, чтоб объект вращался относительно своего центра(точка регистрации находитсяв центре).
Спасибо

Старый 20.08.2011, 20:43
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 2  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Код AS3:
var centerX:Number = obj.x - obj.width / 2;
var centerY:Number = obj.y - obj.height / 2;
__________________
тут я

Старый 20.08.2011, 20:46
DarkKnight2009 вне форума Посмотреть профиль Отправить личное сообщение для DarkKnight2009 Найти все сообщения от DarkKnight2009
  № 3  
Ответить с цитированием
DarkKnight2009

Регистрация: May 2009
Сообщений: 122
Цитата:
Сообщение от КорДум Посмотреть сообщение
Код AS3:
var centerX:Number = obj.x - obj.width / 2;
var centerY:Number = obj.y - obj.height / 2;
Вот я заменил код
Код AS3:
var angle:Number = 0;
var angleChange:Number = 10; // speed
 
var radius:Number = 100;
 
var satellite:MovieClip = new Asteroid();
satellite.x = stage.stageWidth / 2;
satellite.y = stage.stageHeight / 2;
addChild(satellite);
 
var centerX:Number = satellite.x - satellite.width / 2;
var centerY:Number = satellite.y - satellite.height / 2;
 
 
addEventListener(Event.ENTER_FRAME, onLoop, false, 0, true);
function onLoop(evt:Event):void
{
	var radian:Number = deg2rad(angle);
	satellite.x = centerX + radius * Math.cos(radian);
	satellite.y = centerY + radius * Math.sin(radian)
	angle += angleChange;
	angle %= 360;
	if(angle == 0)
		angleChange = 0;
}
 
function deg2rad(deg:Number):Number {
	return deg * (Math.PI/180)
}
Но результат остался прежний

Старый 20.08.2011, 20:51
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 4  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
А, не заметил. Точка регистрации в центре. Тогда вместо centerX нужно obj.x.
__________________
тут я

Старый 20.08.2011, 20:59
DarkKnight2009 вне форума Посмотреть профиль Отправить личное сообщение для DarkKnight2009 Найти все сообщения от DarkKnight2009
  № 5  
Ответить с цитированием
DarkKnight2009

Регистрация: May 2009
Сообщений: 122
Цитата:
Сообщение от КорДум Посмотреть сообщение
А, не заметил. Точка регистрации в центре. Тогда вместо centerX нужно obj.x.
Извините, может, я что-то не так меняю
Код AS3:
var angle:Number = 0;
var angleChange:Number = 10; // speed
 
var radius:Number = 100;
 
var satellite:MovieClip = new Asteroid();
satellite.x = stage.stageWidth / 2;
satellite.y = stage.stageHeight / 2;
addChild(satellite);
 
var centerX:Number = satellite.x - satellite.width / 2;
var centerY:Number = satellite.y - satellite.height / 2;
 
 
addEventListener(Event.ENTER_FRAME, onLoop, false, 0, true);
function onLoop(evt:Event):void
{
	var radian:Number = deg2rad(angle);
	satellite.x = satellite.x + radius * Math.cos(radian);
	satellite.y = satellite.y + radius * Math.sin(radian)
	angle += angleChange;
	angle %= 360;
	if(angle == 0)
		angleChange = 0;
}
 
function deg2rad(deg:Number):Number {
	return deg * (Math.PI/180)
}
Но сейчас вообще не то получилось, объект, куда-то улетает

Старый 20.08.2011, 21:03
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 6  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Нет, Вы должны сначала запомнить координаты объекта. А затем их поставлять в формулу. Иначе координаты будут постоянно меняться, что Вы и получаете.
__________________
тут я

Старый 20.08.2011, 21:08
DarkKnight2009 вне форума Посмотреть профиль Отправить личное сообщение для DarkKnight2009 Найти все сообщения от DarkKnight2009
  № 7  
Ответить с цитированием
DarkKnight2009

Регистрация: May 2009
Сообщений: 122
Цитата:
Сообщение от КорДум Посмотреть сообщение
Нет, Вы должны сначала запомнить координаты объекта. А затем их поставлять в формулу. Иначе координаты будут постоянно меняться, что Вы и получаете.
Пожалуйста, напишите, что я делаю не так.
я пишу
Код AS3:
var angle:Number = 0;
var angleChange:Number = 10; // speed
 
var radius:Number = 100;
 
var satellite:MovieClip = new Asteroid();
satellite.x = stage.stageWidth / 2;
satellite.y = stage.stageHeight / 2;
addChild(satellite);
 
var satelliteX:Number = satellite.x - satellite.width / 2;
var satelliteY:Number = satellite.y - satellite.height / 2;
 
 
addEventListener(Event.ENTER_FRAME, onLoop, false, 0, true);
function onLoop(evt:Event):void
{
	var radian:Number = deg2rad(angle);
 
	satelliteX = satelliteX + radius * Math.cos(radian);
	satelliteY = satelliteY + radius * Math.sin(radian)
	angle += angleChange;
	angle %= 360;
	if(angle == 0)
		angleChange = 0;
}
 
function deg2rad(deg:Number):Number {
	return deg * (Math.PI/180)
}
объект вообще не жвижется

Старый 20.08.2011, 21:09
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 8  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
о___О
Код AS3:
satelliteX = satelliteX + radius * Math.cos(radian);
satelliteY = satelliteY + radius * Math.sin(radian)
А ГДЕ Вы его тут двигаете?
Код AS3:
obj.x = satelliteX + radius * Math.cos(radian);
obj.y = satelliteY + radius * Math.sin(radian)
Добавлено через 3 минуты
Что-то Вы все напутали.
Код AS3:
// запоминаем координаты
var centerX:int = obj.x;
var centerY:int = obj.y;
...
// двигаем:
obj.x = centerX+ radius * Math.cos(radian);
obj.y = centerY+ radius * Math.sin(radian);
__________________
тут я

Старый 20.08.2011, 21:13
DarkKnight2009 вне форума Посмотреть профиль Отправить личное сообщение для DarkKnight2009 Найти все сообщения от DarkKnight2009
  № 9  
Ответить с цитированием
DarkKnight2009

Регистрация: May 2009
Сообщений: 122
Цитата:
Сообщение от КорДум Посмотреть сообщение
о___О
Код AS3:
satelliteX = satelliteX + radius * Math.cos(radian);
satelliteY = satelliteY + radius * Math.sin(radian)
А ГДЕ Вы его тут двигаете?
Код AS3:
obj.x = satelliteX + radius * Math.cos(radian);
obj.y = satelliteY + radius * Math.sin(radian)
Да ,вот же, я все поменял, но результат прежний
Код AS3:
var angle:Number = 0;
var angleChange:Number = 10; // speed
 
var radius:Number = 100;
 
var satellite:MovieClip = new Asteroid();
satellite.x = stage.stageWidth / 2;
satellite.y = stage.stageHeight / 2;
addChild(satellite);
 
var satelliteX:Number = satellite.x - satellite.width / 2;
var satelliteY:Number = satellite.y - satellite.height / 2;
 
 
addEventListener(Event.ENTER_FRAME, onLoop, false, 0, true);
function onLoop(evt:Event):void
{
	var radian:Number = deg2rad(angle);
 
	satellite.x = satelliteX + radius * Math.cos(radian);
	satellite.y = satelliteY + radius * Math.sin(radian)
	angle += angleChange;
	angle %= 360;
	if(angle == 0)
		angleChange = 0;
}
 
function deg2rad(deg:Number):Number {
	return deg * (Math.PI/180)
}
Объект крутится по-кругу, а не относительно своего центре

Старый 20.08.2011, 21:13
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 10  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Стоять. А зачем Вы его вообще двигаете, если Вам его надо вращать? о__О
__________________
тут я

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

Теги
angle , rotation
Опции темы
Опции просмотра

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

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


 


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


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