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

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

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

Регистрация: Jul 2007
Сообщений: 6
По умолчанию остановка вращения

Перерыл весь форум, не нашел.
Объект должен делать движение из одной задаваемой точки в другую (это-то не проблема), но при этом должен делать один оборот вокруг своей оси. Задача, вроде бы, простая, но он, зараза, у меня не останавливается, а продолжает вращение.

if(cl._rotation < 361) {cl._rotation += 36;}
else {cl._rotation = 0;}

Старый 26.07.2007, 17:25
CGandA вне форума Посмотреть профиль Отправить личное сообщение для CGandA Найти все сообщения от CGandA
  № 2  
Ответить с цитированием
CGandA

Регистрация: Jun 2005
Сообщений: 162
Код:
var grad:Number = 0;
cl.onEnterFrame = function() {
	this._rotation = grad;
	grad += 36;
	if (grad>=360) {
		this._rotation = 0;
		delete this.onEnterFrame;
	}
};

Старый 26.07.2007, 17:37
greenmoon вне форума Посмотреть профиль Отправить личное сообщение для greenmoon Найти все сообщения от greenmoon
  № 3  
Ответить с цитированием
greenmoon

Регистрация: Jul 2007
Сообщений: 6
Вращение получается строго одноразовое в таком случае, т.е. при следующем движении в контрольную точку объект cl уже не вращается. Вот полный код:
Код:
var Sym1x = sym1._x; var Sym2x = sym2._x; var Sym3x = sym3._x; // горизонтальные позиции точек
var Sym1y = sym1._y; var Sym2y = sym2._y; var Sym3y = sym3._y; // вертикальные позиции точек
var posx = 100; var posy = 100; // Начало движения объекта
var speed = 0.1; // скорость
var grad:Number = 0;

sym1.onRollOver = function ():Void {posx = Sym1x; posy = Sym1y;}
sym2.onRollOver = function ():Void {posx = Sym2x; posy = Sym2y;}
sym3.onRollOver = function ():Void {posx = Sym3x; posy = Sym3y;}

onEnterFrame = function ():Void
{
	cl._rotation = grad;
	grad += 36;
	if (grad>=360){cl._rotation = 0; delete cl.onEnterFrame;}

if (cl._x < posx && cl._y < posy)
	{
		dis = Math.abs(posx - cl._x); cl._x += dis*speed;
		dis = Math.abs(posy - cl._y); cl._y += dis*speed;
	}
	else if (cl._x > posx && cl._y > posy)
	{
		dis = Math.abs(posx - cl._x); cl._x -= dis*speed;
		dis = Math.abs(posy - cl._y); cl._y -= dis*speed;
	}
	else if (cl._x > posx && cl._y < posy)
	{
		dis = Math.abs(posx - cl._x); cl._x -= dis*speed;
		dis = Math.abs(posy - cl._y); cl._y += dis*speed;
	}
	else if (cl._x < posx && cl._y > posy)
	{
		dis = Math.abs(posx - cl._x); cl._x += dis*speed;
		dis = Math.abs(posy - cl._y); cl._y -= dis*speed;
	}
}

Старый 26.07.2007, 17:39
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
greenmoon, отредактируйте свои посты и оформите код тегами [code][/code].

Старый 26.07.2007, 17:44
greenmoon вне форума Посмотреть профиль Отправить личное сообщение для greenmoon Найти все сообщения от greenmoon
  № 5  
Ответить с цитированием
greenmoon

Регистрация: Jul 2007
Сообщений: 6
исправил сразу же, как увидел свой прокол

Старый 26.07.2007, 18:13
goarcade вне форума Посмотреть профиль Отправить личное сообщение для goarcade Найти все сообщения от goarcade
  № 6  
Ответить с цитированием
goarcade

Регистрация: Sep 2006
Сообщений: 32
за время, когда идет перемещение от одной точки к другой, объект должен повернуться ровно на 360 градусов?

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

Регистрация: Jul 2007
Сообщений: 6
Да. В принципе, если эта переменная будет задаваться - это не плохо, но это я уже сам вполне приконструлячу =))

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

Регистрация: Sep 2006
Сообщений: 32
rotation = 360*t;
где t (значения от 0 до 1)- расстояние, пройденное объектом от начальной точки (A) к конечной точке(Б), деленное на длину отрезка АБ.

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

Регистрация: Jul 2007
Сообщений: 6
не то
если в код впихнуть еще одну переменную, это смысла не изменит
Код:
	cl._rotation = grad;
	grad += 36;
	if (grad>=360){cl._rotation = 0; delete cl.onEnterFrame;}
ну, добавлю я еще t, а дальше что? цикл работает 1 (один) раз, когда задается новая координата и объект перемещается, он уже второй раз не вращается - в этом задача и смысл вопроса

Старый 26.07.2007, 23:37
goarcade вне форума Посмотреть профиль Отправить личное сообщение для goarcade Найти все сообщения от goarcade
  № 10  
Ответить с цитированием
goarcade

Регистрация: Sep 2006
Сообщений: 32
как тебе вот такой код?
Код:
var target:MovieClip = sym1;
var tempTarget:MovieClip = target;
speed=0.1
t=0;posx0 = cl._x;posy0 = cl._y;posr0 = cl._rotation;
posr0 = (posr0-Math.floor(posr0/360)*360)-360;
sym1.onRollOver = function ():Void {target = this}
sym2.onRollOver = function ():Void {target = this}
sym3.onRollOver = function ():Void {target = this}

onEnterFrame = function ():Void
{
	if(target!=tempTarget)
	{
		tempTarget=target;
		t=0;posx0 = cl._x;posy0 = cl._y;posr0 = cl._rotation;
		posr0 = (posr0-Math.floor(posr0/360)*360)-360;
	}
	t+=speed;
	if(t>1)t=1;
	var dx:Number = target._x-posx0;
	var dy:Number = target._y-posy0;
	cl._x = posx0+dx*t;
	cl._y = posy0+dy*t;
	cl._rotation=posr0+(360-posr0)*t;
}

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

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

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


 


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


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