-Цитатник

Кабачки «Сергиево-Посадские» - стерилизации не требуют, стоят хорошо, но мало - (0)

Кабачки «Сергиево-Посадские» - стерилизации не требуют, стоят хорошо, но мало Предлагаю очень ...

20 супер рецептов огурцов на зиму! - (0)

20 супер рецептов огурцов на зиму!     20 супер рецептов огурцов на зиму! ...

Если вам за 30,40,50 - секреты красоты - (0)

Если вам за 30,40,50 - секреты красоты Любая, уважающая себя, женщина стремится выглядеть отли...

Стихи - (1)

Стихи / Короткие             ...

Стихи o любви. - (2)

Стихи o любви. Ты всех прекрасней Тебе скажу что ты прекрасна Что нет и не было д...

 -Рубрики

 -Приложения

 -Всегда под рукой

 -

Радио в блоге
[Этот ролик находится на заблокированном домене]

Добавить плеер в свой журнал
© Накукрыскин

 -Фотоальбом

Фотоальбом закрыт для неавторизованных. Зарегистрироваться!

 -Поиск по дневнику

Поиск сообщений в rukosueva66

 -Подписка по e-mail

 

 -Сообщества

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 14.04.2012
Записей: 7320
Комментариев: 2296
Написано: 10457


Календарь во флеш. Урок.

Понедельник, 01 Апреля 2013 г. 04:58 + в цитатник
Цитата сообщения Та_ещё_штучка_Я Календарь во флеш. Урок.

Будем делать вот такой календарик, с возможностью перемещаться по годам и месяцам.



Запускаем Flash CS5. Выбираем Файл Action Script 2.0

В панели Свойства назначаем параметры нового документа. Жмём Изменить.

В параметрах вписывем значения ширины и высоты (570*570), а также меняем цвет фона.

Далее нарисуйте прямоугольник произвольных размеров с цветом линий #C2C1C1 и цветом заливки #E0DFE3

Выделите этот прямоугольник и задайте ему ширину 570, а длину 60 и координаты 0 как по оси x, так и по оси Y.

Продублируйте этот прямоугольник. Скопируйте и вставте его на этом же слое.
Второму экземпляру задайте параметры Ш:570, В:420, X:0, Y:85

По отдельности сгруппируйте каждый прямоугольник.То есть, выделяем один из прямоугольников. В шапке проги выбираем вкладку Модификация. Далее - Группировать. То же делаем со вторым прямоугольником.

Переименуйте слой, на котором они расположены в “base” .Создайте новый слой. Дайте ему имя “head”

Скопируйте меньший прямоугольник на слое “base”.

Выделить слой “head” и вставить на место скопированный прямоугольник.

Двойной щелчок по нему для редактирования. Установите цвет заливки. У меня он салатовый A1C90D

Вернуться на основную сцену. Выделите прямоугольник и в панели свойств задайте ему такие параметры Ш:542 В:37

Далее преобразуйте этот прямоугольник в мувиклип.

Точка регистрации – верхний левый угол. Назовем его “head”.

В панели свойств назначим имя экземпляру - “areahead”

Открываем панель выравнивания.

Выделяем мувик “areahead”(слой head) и малый прямоугольник (слой base),зажав клавишу Sift. В панели выравнивания снимаем флажок “выровнять в пределах работы”

.Далее дублируем мувиклип “areahead”(Копировать - вставить).Полученному прямоугольнику задаем такие свойства:Ш:542, И:400, X:14,Y:95

.Выбираем только что измененный прямоугольник и жмем клавишу F8 и преобразуем его в мувиклип. Имя: “body”. Точка регистрации – верхний левый угол

В панели свойств назначаем имя для этого мувиклипа - “areabody”

Теперь вырежьте этот мувиклип.

Создайте новый слой “body”, и в первом кадре нажмите - Вставить на место.
Создайте новый слой “panel”. На нём будут располагаться нужные нам кнопки.

Далее нарисуйте кнопки- стрелочки, которые будут кнопками назад и вперед.
В панели инструментов выбираем Многоугольник, цвет заливки которого соответствует цвету уже отрисованных прямоугольников.

В панели свойств устанавливаем параметры нового инструмента, а именно число сторон - 3.

Рисуем треугольник и редактируем с помощью инструмента Трансформация.

Далее дорабатываем кнопку инструментом Прямоугольник и, с помощью стрелок на клавиатуре подтягиваем обе геометрические фигуры.

Выделяем их и во вкладке Модификация выбираем :Комбинировать объекты - Слияние.

Дублируем кнопку и во вкладке Модификация: Преобразовать - Отразить слева направо.

Стрелками на клавиатуре перемещаем вторую кнопку и устанавливаем, как на скрине.

Преобразовываем обе стрелки в символы Кнопка( клавиша F8 )
В панели свойств укажите кнопкам имена “prev” и “nex” соответствующе:


Рисуем кружочек с помощью инструмента Овал.
Задаем ему параметры: Цвет линий #A1C90D, Заливка: белым

В панели свойств задаём толщину линии обводки - 6

Задаём размер кружочку Ш:22,5; В:22,5.

Теперь жмёте F8 и преобразуем кружочек в кнопку. Имя: krug; Тип: Button; Точка регистрации: Center

.Делаем два дубликата символа “krug” и расположите их так, как указанно на скрине.

Далее создайте текстовые поля рядом с кружочками и введите текст.
В свойствах текста выбрать его цвет и размер.

Воспользуйтесь инструментом Выделение и стрелками на клаве для установки текстов, как на скрине

.Теперь в панели свойств для этих кружков укажем следующие имена
“pogod” – перед надписью «Год», “pomes” – перед надписью «Месяц» и “defaul” – перед надписью «Текущая».



В панели инструментов выбираем Овал.Теперь рисуем маленький кружок, который будет исполнять роль «перемычки». Его рисуем без линии, с черным цветом заливки.

Выставляем кругу такие свойства:Ш:12; В:12

Жмем F8 и преобразуем его в мувиклип с точкой регистрации по центру

В панели свойств указываем имя “flag”

Располагаем мувиклип “flag” над “defau".
Щелкаете Ctrl + F8 . Вписываем имя: ”ob”; Тип: Фрагмент ролика; Нажимаем Дополнительно, отмечаем галочкой Экспорт для Action Script и в поле Identifier указываем “obvod”

В этом мувиклипе нарисуйте прямоугольник без заливки и с обводкой на ваш вкус, со свойствами Ш: 55; В: 45; X: 5; Y: -7

Возвращаемся на стадию. Далее займемся созданием бликов:
Создайте новый слой “bliki” и расположите его поверх остальных слоев

Скройте все слои, кроме “bliki” и “base”

Скопируйте содержимое слоя ”base”и вставте на слой “bliki”
Не снимая выделения, щелкните на Панели выбора цвета линии и нажмите none.
Открываем панель Цвет. Тип заливки выберите Линейный. Создайте 4 ползунка и задайте им белый цвет. .Далее выделите 2-ой ползунок и в окошке Альфа установите 25%, а 3-му 20%:

Получится как то так.

Создайте новый слой “as” и в первом кадре вставить код:


//Объявляем массив monmas,содержащий названия месяцев
var monmas:Array = new Array(["Январь"], ["Февраль"], ["Март"], ["Апрель"], ["Май"], ["Июнь"], ["Июль"], ["Август"], ["Сентябрь"], ["Октябрь"], ["Ноябрь"], ["Декабрь"]);
//Объявляем массив daymas, содержащий 8 элементов - 1 пустой, остальные 7 - названия дней недели
var daymas:Array = new Array(["Пн"], ["Вт"], ["Ср"], ["Чт"], ["Пт"], ["Сб"], ["Вс"]);
//Объявляем массив cold, содержащий количество дней в месяцах в невисокосный год
var cold:Array = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
//Объявляем новый объект Date - my_date
var my_date:Date = new Date();
/*date_default Если = true, то будут рассматриваться
текущие дата и время, иначе дата и время могут быть назначены.
Пока оставим true, что бы при открытии флешки показывались текущий месяц и год.*/
date_default = true;
/*Объявляем новый объект TextFormat - my_txt. В нем будут
храниться настройки текста в ячейках.*/
var my_txt:TextFormat = new TextFormat();
/* align - выравнивание, size - размер, font - шрифт. Могут быть и другие
параметры.*/
my_txt.align = "center";
my_txt.size = 27;
my_txt.font = "Times New Roman";
/*Назначение переменных
den - число, dned - день недели, ye - год, mon - месяц
perem - переменная, которая обозначает положение перемычки flag */
if (date_default) {
var den = _root.my_date.getDate();
var dned = _root.my_date.getDay();
var ye = _root.my_date.getFullYear();
var mon = _root.my_date.getMonth();
var perem = 3;
}
/* Функция, которая подсчитывает день недели 1-го числа данного месяца
по любому числу и соответсвующему ему дню недели*/
function dn1vm(dvm, dnvm) {
//dvm - число, dnvm - день недели
var dn = 0;
dn = 8-((dvm-dnvm)%7);
if (dn>7) {
dn -= 7;
}
return (dn);
//Возвращает день недели
}
/* Функция, которая определяет високосный ли год... */
function vis(ye) {
//ye - год
if (ye%4 == 0) {
return (true);
} else {
return (false);
}
}
//Функция, которая возвращает количество дней с первого 1 января.
function dns1(mon, mmm) {
//mon - месяц mmm - число
var xq = 0;
var xw = 0;
for (xq; xq/^Суммируем дни всех месяцев
if ((vis) and (mon>=2)) {
xw++;
}
//^Если високосный год и текущий месяц позже февраля, то прибавляется 1 к числу дней
xw += mmm;
//^Прибавляем к количеству дней число и vВозвращаем количество дней.
return (xw);
}
/* Функция, которая выдает день недели первого
числа следующего месяца */
function dn1sm(dned, mon) {
//dned - день недели mon - месяц
var er = _root.cold[mon];
//^ er - количество дней в месяце
if (_root.vis(_root.ye) and _root.mon == 1) {
er++;
}
//^Проверка на високосность
if (mon == 11) {
_root.ye++;
_root.mon = -1;
}
/*^Если месяц - декабрь, то глобальная переменная
ye увеличиваеться на один, а так как эта функия используеться
перед инкрементом месяца, то глобальная переменная месяц mon - (январь-1)
*/
er = er%7+dned;
/*^Остаток от деления числа er на 7 будет день
недели последнего числа месяца. А если прибавить к этому числу
день недели vи сделаем проверку на перенаполнение числа, то мы получим
день недели первого числа*/
if (er>7) {
er -= 7;
}
return (er);
//^Возвращаем день недели первого числа
}
/*Функция, которая используеться
для вывода значений глобальных переменных после
кнопки назад*/
function dn1pm(dned, mon) {
//dned - день недели, заданного числа mon - месяц текущий
if (mon-1 == -1 || mon-1 == 1) {
//vЕсли месяц - январь.
if (mon == 0) {
_root.ye--;
_root.mon = 11;
//vДень недели 1-ого января...
dned = _root.dn1vm(_root.den, dned);
//vДекремент dend, с проверкой на выход за пределы допустимых значений
if (dned-1<0) {
dned += 6;
} else {
dned--;
}
//vНазначение глобальной переменной dned(день недели)
_root.dned = _root.dn1vm(31, dned);
//vНазначение глобальной переменной den(число)
_root.den = 1;
}
//vЕсли предыдущий месяц - февраль.
if (mon-1 == 1) {
if (_root.vis(_root.ye)) {
//Если год високосный.
if (dned-1<0) {
dned += 6;
} else {
dned--;
}
_root.mon--;
_root.dned = _root.dn1vm(29, dned);
} else {
if (dned-1<0) {
dned += 6;
} else {
dned--;
}
_root.mon--;
_root.dned = _root.dn1vm(28, dned);
}
}
} else {
if (dned-1<0) {
dned += 6;
} else {
dned--;
}
_root.dned = _root.dn1vm(_root.cold[mon-1], dned);
_root.mon--;
}
}
/*Функция предназначена для создания нужного количества текстовых полей
и забивания их значениями*/
function postr(mon, ye, den, dned) {
//vСоздается 2 пустых мувиклипа
_root.areahead.createEmptyMovieClip("area2", 1);
_root.areabody.createEmptyMovieClip("area1", 1);
//vВ верхнем создаеться текстовое поле, в котором будет печататься заголовок календаря
_root.areahead.area2.createTextField("textm", 1, 0, 0, _root.areahead._width, _root.areahead._height);
//vК созданному текстовому полю применяется стиль my_txt
_root.areahead.area2.textm.setNewTextFormat(_root.my_txt);
//vВыводиться значение месяца и года
_root.areahead.area2.textm.text = _root.monmas[mon]+", "+ye;
//vУчтановка запрещения выделения текста в текстовом поле
_root.areahead.area2.textm.selectable = false;
var nam:Array = [];
var por = 0;
var nnn = 0;
for (nx=1; nx<=7; nx++) {
for (ny=1; ny<=8; ny++) {
nam[nx, ny] = "ned"+nx+ny;
por++;
//В нижнем созданном мувиклипе создается текстовое поле
_root.areabody.area1.createTextField(nam[nx, ny], por, _root.areabody._width/8*(ny-1), _root.areabody._height/7*(nx-1), _root.areabody._width/8, _root.areabody._height/7);
//vК созданному текстовому полю применяется стиль my_txt
_root.areabody.area1[nam[nx, ny]].setNewTextFormat(_root.my_txt);
//vУчтановка запрещения выделения текста в текстовом поле
_root.areabody.area1[nam[nx, ny]].selectable = false;
//vЕсли верхняя строка то выводит в каждом текстовом поле этой строки название месяца
if ((ny != 1) and (nx == 1)) {
_root.areabody.area1[nam[nx, ny]].text = _root.daymas[por-2];
}
//vЕсли поле с числами
if ((ny != 1) and (nx != 1)) {
nnn++;
prov = _root.cold[_root.mon];
if (_root.vis(_root.ye) and _root.mon == 1) {
prov++;
}
if (nnn-(dn1vm(den, dned)-1)>0) {
//vПроверка на високосный год и месяц - февраль
if (((vis) and (mon == 1)) and (nnn-(dn1vm(den, dned)-1)<=29)) {
_root.areabody.area1[nam[nx, ny]].text = nnn-(dn1vm(den, dned)-1);
}
//Проверка на выход из области допустимых значений.
if (nnn-(dn1vm(den, dned)-1)<=prov) {
_root.areabody.area1[nam[nx, ny]].text = nnn-(dn1vm(den, dned)-1);
} else {
_root.areabody.area1[nam[nx, ny]].text = "";
}
}
}
//vЕсли на поле отображаеться текущий месяц.
if ((_root.perem == 3 and ny>1) || (_root.ye == _root.my_date.getFullYear() and _root.mon == _root.my_date.getMonth() and ny>1)) {
//Если истина, то окошечко "obvod" из библиотеки атачиться на сцену. Ему назначаются координаты текущего текстового поля
if ((nnn-(dn1vm(den, dned)-1) == _root.my_date.getDate()) and (_root.my_date.getMonth() == mon) and (_root.my_date.getFullYear() == ye)) {
this.attachMovie("obvod", "ob", 1, {_x:(_root.areabody._width/8*(ny-1))+_root.areabody._x, _y:(_root.areabody._height/7*(nx-1))+_root.areabody._y});
}
} else if (ny != 1) {
removeMovieClip("ob");
}
prov = _root.cold[_root.mon];

if (_root.vis(_root.ye) and _root.mon == 1) {
prov++;

}
if (nnn-(dn1vm(den, dned)-1)7)-3;
}
}
}
}
}
//vЕсли установлено отображение текущей даты, то в функцию _root.postr передается текущая дата.
if (date_default) {
_root.postr(_root.my_date.getMonth(), _root.my_date.getFullYear(), _root.my_date.getDate(), _root.my_date.getDay());
}
//vФункция определяющая действия если радиокнопка Год активна.
pogod.onRelease = function() {
date_default = false;
_root.perem = 1;
_root.flag._x = _root.pogod._x;
};
//vФункция определяющая действия если радиокнопка Месяц активна.
pomes.onRelease = function() {
date_default = false;
_root.perem = 2;
_root.flag._x = _root.pomes._x;
};
//vФункция определяющая действия если радиокнопка Текущая активна.
function def() {
date_default = true;
_root.perem = 3;
_root.den = _root.my_date.getDate();
_root.dned = _root.my_date.getDay();
_root.ye = _root.my_date.getFullYear();
_root.mon = _root.my_date.getMonth();
_root.flag._x = _root.defaul._x;
_root.postr(_root.my_date.getMonth(), _root.my_date.getFullYear(), _root.my_date.getDate(), _root.my_date.getDay());
}
//Функция, которая определяет какие действия требуется выполнить, если нажата кнопка nex
function nextsh() {
if (_root.perem == 2) {
var q = dn1sm(dn1vm(_root.den, _root.dned), _root.mon);
_root.mon++;
_root.dned = q;
_root.den = 1;
_root.postr(_root.mon, _root.ye, 1, q);
}
if (_root.perem == 1) {
if ((_root.vis(_root.ye) and _root.mon<=1) || (_root.vis(_root.ye+1) and _root.mon>1)) {
_root.dned += 2;
} else {
_root.dned++;
}
if (_root.dned>6) {
_root.dned -= 7;
}
_root.ye++;
_root.postr(_root.mon, _root.ye, _root.den, _root.dned);
}
}
//Функция, которая определяет какие действия требуется выполнить, если нажата кнопка prev
function prevsh() {
if (_root.perem == 2) {
dn1pm(_root.dned, _root.mon);
_root.postr(_root.mon, _root.ye, _root.den, _root.dned);
}
if (_root.perem == 1) {
if ((_root.vis(_root.ye) and _root.mon>1) || (_root.vis(_root.ye-1) and _root.mon<=1)) {
_root.dned -= 2;
} else {
_root.dned--;
}
_root.ye--;
if (_root.dned<0) {
_root.dned += 7;
}
_root.postr(_root.mon, _root.ye, _root.den, _root.dned);
}
}
//vбез коментариев
defaul.onRelease = function() {
def();
};
nex.onRelease = function() {
nextsh();
};
prev.onRelease = function() {
prevsh();
};

Проинспектируйте работу. Экспорт в формате swf.



Урок отсюда: http://demiart.ru/forum/index.php?showtopic=66677&st=0
Рубрики:  Дизайн дневника/Часики-флеш

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку