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

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

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

Регистрация: Jan 2007
Сообщений: 24
По умолчанию Не перемещаются!

Проблемка такая...

Нужно, чтобы из 4-х палок собирался прямоугольник, у которого можно поменять высоту, длинну и все такое. Причем сделать все программно, да и к тому же кол-во таких прямоугольников тоже можно поменять.
С одним у меня получилось:
Код:
x0 = 512;
y0 = 384;
l = 300;
h = 100;
speed = 5;
mn = 2;
p = 0.01;
k = 0.1;
_root.createEmptyMovieClip("verhgor_mc", -10);
_root.createEmptyMovieClip("pravver_mc", -9);
_root.createEmptyMovieClip("nizgor_mc", -8);
_root.createEmptyMovieClip("levver_mc", -7);
var speedtest = speed;
with (verhgor_mc) {
	lineStyle(3, 0xff0000, 100);
	moveTo(x0*mn, y0-h/2);
	lineTo(x0*mn+l, y0-h/2);
}
with (nizgor_mc) {
	lineStyle(3, 0xff0000, 100);
	moveTo(0, y0+h/2);
	lineTo(-l, y0+h/2);
}
with (pravver_mc) {
	lineStyle(3, 0xff0000, 100);
	moveTo(x0+l/2, 0);
	lineTo(x0+l/2, -h);
}
with (levver_mc) {
	lineStyle(3, 0xff0000, 100);
	moveTo(x0-l/2, y0*mn);
	lineTo(x0-l/2, y0*mn+h);
}
rastverh = _root.verhgor_mc._x-(x0+l/2);
rastniz = _root.nizgor_mc._x+(x0+l/2);
onEnterFrame = function () {
	speed = speedtest;
	if (_root.verhgor_mc._x == -(x0+l/2)) {
		speed = 0;
	} else {
		p += 0.005;
		k += 0.05;
		n = ((_root.verhgor_mc._x-x0)*10/rastverh)*k;
		if ((_root.verhgor_mc._x-speed*n)<=-(x0+l/2)) {
			_root.verhgor_mc._x = -(x0+l/2);
		} else {
			_root.verhgor_mc._x -= speed*n;
			updateAfterEvent();
		}
	}
	speed = speedtest;
	if (_root.nizgor_mc._x == x0+l/2) {
		speed = 0;
	} else {
		if ((_root.nizgor_mc._x+speed*n)>=(x0+l/2)) {
			_root.nizgor_mc._x = x0+l/2;
		} else {
			_root.nizgor_mc._x += speed*n;
			updateAfterEvent();
		}
	}
	speed = speedtest;
	if (_root.pravver_mc._y == y0+h/2) {
		speed = 0;
	} else {
		if ((_root.pravver_mc._y+speed*n)>=y0+h/2) {
			_root.pravver_mc._y = y0+h/2;
		} else {
			_root.pravver_mc._y += speed*n;
		}
	}
	speed = speedtest;
	if (_root.levver_mc._y == -(y0+h/2)) {
		speed = 0;
	} else {
		if ((_root.levver_mc._y-speed*n)<=-(y0+h/2)) {
			_root.levver_mc._y = -(y0+h/2);
		} else {
			_root.levver_mc._y -= speed*n;
		}
	}
};
(достаточно просто перекопировать во флеш)

А вот со множеством ничего не получается, они рисуются, но не перемещаются:
Код:
x0 = 512;
y0 = 384;
//Начальные координаты центра, гдо должен стоять в последствии прямоугольник
l = 300;
//Длинна прямоугольника
h = 100;
//Высота прямоугольника
speed = 5;
// Скорость перемещения
p = 0.01;
//Что-то вроде ускорения усорения
k = 0.1;
//Что-то вроде ускорения
w = 1;
//Кол-во прямоугольников
//Эта операция нужна, чтобы скорость раньше времени не анулировалась. У нас много палок, но одна скорость
var speedtest = speed;
//Т.к. прямоугольникоа должно быть определенное кол-во, то идем в цикл:
for (var o = 0; o<w; o++) {
	//Создаем м.к. с палками
	_root.createEmptyMovieClip("verhgor"+o+"_mc", o*4-4);
	_root.createEmptyMovieClip("pravver"+o+"_mc", o*4-3);
	_root.createEmptyMovieClip("nizgor"+o+"_mc", o*4-2);
	_root.createEmptyMovieClip("levver"+o+"_mc", o*4-1);
	//Рисуем палки
	//Верхняя горизонтальная
	with ("verhgor"+o+"_mc") {
		lineStyle(3, 0xff0000, 100);
		moveTo(x0*2, y0-h/2);
		lineTo(x0*2+l, y0-h/2);
	}
	//Нижная горизонтальная
	with ("nizgor"+o+"_mc") {
		lineStyle(3, 0xff0000, 100);
		moveTo(0, y0+h/2);
		lineTo(-l, y0+h/2);
	}
	//Правая вертикальная
	with ("pravver"+o+"_mc") {
		lineStyle(3, 0xff0000, 100);
		moveTo(x0+l/2, 0);
		lineTo(x0+l/2, -h);
	}
	//Левая вертикальная
	with ("levver"+o+"_mc") {
		lineStyle(3, 0xff0000, 100);
		moveTo(x0-l/2, y0*2);
		lineTo(x0-l/2, y0*2+h);
	}
	rastverh = _root["verhgor"+o+"_mc"]._x-(x0+l/2);
	//С помощью этого параметра вычисляется расстояние до конечной точки палки, нужна для вычисления коэф. ускорения
}
onEnterFrame = function () {
	//Опять же, так как у нас палок дофига, то идем в цикл:
	for (var o = 0; o<w; o++) {
		speed = speedtest;
		//Вот за этим как раз и нужен был нам спидтест. Чтобы скорость не анулировалась раньше времени
		if (_root["verhgor"+o+"_mc"]._x == -(x0+l/2)) {
			//Начальные координаты любой из палок (0,0), так что чтобы передвинуть к примеру vrehgor
			//Сам рисунок которого появляется за правой границей клипа, его конечные координаты по х
			//Должны быть отрицательными
			speed = 0;
			//Если Палка добралась до места, то скорость анулируется
		} else {
			p += 0.005;
			//А вот и наше ускорение ускорения
			k += 0.05;
			//С ним и ускорение
			n = ((_root["verhgor"+o+"_mc"]._x-x0)*10/rastverh)*k;
			//Сам не в курсе, как это называть, но выглядит не плохо
			if ((_root["verhgor"+o+"_mc"]._x-speed*n)<=-(x0+l/2)) {
				_root["verhgor"+o+"_mc"]._x = -(x0+l/2);
				//Если вдруг на "следующем шаге" палка перепрыгнет через точку, то она сразу встает на место
			} else {
				_root["verhgor"+o+"_mc"]._x -= speed*n;
				//Собсно само перемещение
				updateAfterEvent();
				//Не шибко помогет, но да ничего...
			}
		}
		speed = speedtest;
		//А вот и наша страховка! Если на verhgor скорость анулировалась, то она снова стала прежней тут
		//Дальше все аналогично верхнему
		if (_root["nizgor"+o+"_mc"]._x == x0+l/2) {
			speed = 0;
		} else {
			if ((_root["nizgor"+o+"_mc"]._x+speed*n)>=(x0+l/2)) {
				_root["nizgor"+o+"_mc"]._x = x0+l/2;
			} else {
				_root["nizgor"+o+"_mc"]._x += speed*n;
				updateAfterEvent();
			}
		}
		speed = speedtest;
		if (_root["pravver"+o+"_mc"]._y == y0+h/2) {
			speed = 0;
		} else {
			if ((_root["pravver"+o+"_mc"]._y+speed*n)>=y0+h/2) {
				_root["pravver"+o+"_mc"]._y = y0+h/2;
			} else {
				_root["pravver"+o+"_mc"]._y += speed*n;
			}
		}
		speed = speedtest;
		if (_root["levver"+o+"_mc"]._y == -(y0+h/2)) {
			speed = 0;
		} else {
			if ((_root["levver"+mn+"_mc"]._y-speed*n)<=-(y0+h/2)) {
				_root["levver"+mn+"_mc"]._y = -(y0+h/2);
			} else {
				_root["levver"+mn+"_mc"]._y -= speed*n;
			}
		}
	}
};
(чтобы у каждого прямоугольника были разные координаты, размер и скорость еще не делал еще не делал)

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

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

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


 


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


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