Модераторы: SoWa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ActionScript, с нуля 
:(
    Опции темы
AlDev
Дата 30.11.2005, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: 8
Всего: 50



ActionScript 2 для начинающих.

Итак, вы считаете, что Flash – это такая программка, в которой можно рисовать баннеры ну и различные мультфильмы. Спешу вас разочаровать, это далеко не так. Flash – далеко не банеры и мультики. Об этом говорит хотя-бы то, что в нём есть свой зык, который может очень много чего.

Итак, это руководство предназначено для тех, кто хочет научиться писать код во flash, а не только рисовать какую-нибудь красивую анимацию.

Итак, приступим.

Шаг первый: Что и где писать?

Писать для начала будем в Macromedia Flash MX 2004 (aka Flash 7). Flash 8 будет даже лучше. Итак, давайте для начала создадим документ Flash. Для этого открываем Flash и выбираем File -> New -> Flash Document. У вас создался ваш первый Flash – документ и с чуством выполненого долга вы можете идти и попить кофе. Не хотите? Хотите научиться писать код? Ну нет, сначала научитесь терпению.

Итак, где пишется код?
Для того, чтобы написать код, выберите Frame (кадр), выделив его (нажав левой кнопкой мыши по кадру в timeline). Теперь нажмите F9 (или Window -> Actions). Вот вам окно написания кода. В низу окошка написано, Layer 1: 1. Это означает, что вы пишите код для первого кадра на слое Layer 1. Но это пока не важно. Итак, напишем простейший код в Actions:

trace («Hello, world!’);

Теперь нажимаем Ctrl+Enter. Мы запустили Flash-ку на выполнение. В окне output появилась надпись Hello, world!.

Довольны? Работает? Хорошо, теперь, после того, как вы написали свой первый скрипт, можно заняться мозгоё... ой, о чём это я. Всмысле теорией.
Итак, введем несколько понятий.

1. Переменная
2. Функция

Что это такое и зачем это надо?

Переменные.
Объявление переменных.
Начнем с понятия переменной. Переменная – это поименованная ячейка памяти, имя которой можно использовать для осуществления доступа к данным, находящимся по данному адресу. Умно звучит, не правда-ли? Тогда отойдём от памяти и прочей фигни, а просто вспомним школьный курс алгебры. Помните, вы там искали x? Так вот x – это переменная. Если мы создаем переменную, это значит, что где-то в необозримых просторах памяти выделяется место для нашей переменной, и мы можем использовать её имя для того, чтобы изменять то, что хранится в выделеном месте или просто читать данные оттуда. Простая аналогия – хранилище на вокзале. Множество различных яйчеек. В них храниться непонятно что. Вы сдаете вещи в хранилище и получаете ключик от вашей яйчейки. То есть вам выделили место для хранения чего-либо. И при помощи ключа вы можете менять содержимое, забирать или ложить вещи. Так вот всё это множество яйчеек будет памятью, выделеная вам яйчекйка будет местом, гдже хранится хначение переменной, а ключик – это имя переменной, с помощью которого вы можете получить доступ к содержимому яйчейки.
Итак, как нам выделить память для переменной. Для этого достаточно будет её объявить, а всеми извращениями, такими как поиск памяти, пусть занимается flash-player. Вообщем, объявление переменной начинается с ключевого слова var. Далее пишется имя переменной и затем задаётся её тип. То есть шаблон можно представить, как

var variable_name:variable_type;

variable_name – имя переменной
variable_type – тип переменной.

Каким может быть имя? Есть несколько простых правил:
1. Имя переменной должно быть уникальным
2. Имя переменной может начинаться с буквы или символов “_”, “$”.
3. Имя переменной нельзя разделять пробелами
4. Имя переменной не может совпадать с зарезервироваными словами ActionScript. О них будет сказано далее.

Одна важная особенность: имена переменных регистро-зависимы. То есть переменная с именем name это совсем не то-же самое, что и переменная с именем Name.

Старайтесь называть переменные по тому, какую смысловуб нагрузку они несут. Например, если вы храните в переменной возвраст, то не надо называть её, как a_36532_sdsdfxcvsdf, лучше назвать её age. Вам-же потом понятней будет.

Теперь рассмотрим типы переменных. Итак, вообще, что такое тип. Тип характеризует данные, которые хранятся в переменной. Так как хранить в переменной можно всё, что угодно, то для удобства работы с тем, что вы там храните, и существует понятие типа переменных. Вообще самыми используемыми у вас будут несколько: числовой, строковый и булевый.

Числовой тип описывается как Number. Используется он для хранения числовой информации. Как несложно догадаться, объявление идёт ввиде:

var variable_name:Number;

Это указывает на то, что в переменной с именем variable_name используется числовой тип данных.

Второй тип, как уже говорилось выше – строковый. Описывается как String. Используется он, как не трудно догадаться, для хранения строк. Ну и объявление:

var variable_name:String;

Третий тип – булевый. Описывается как Boolean. Содержать он может только два значения – true или false. Что значит “истина” или “ложь”. Более близко мы с ним познакомимся в дальнейшем. Объявление переменной булевого типа:
var variable_name:Boolean;
Итак, мы научились объявлять переменные. Теперь научимся запихивать в них различные бесценные данные. В смысле присваивать им значения. Присвоение значения происходит с помощью оператора =. Например, объявим переменную name и присвоим ей значение “Вася”:

var name:String;
name = “Вася”;

Все строковые значения пишутся в кавычках!
Получение значения происходит через мия переменной. Например, если мы хотим узанть то, что находится в переменной name, мы делаем:

trace (name);

И в ouput увидим то, что в неё занесли.
Присваивание значения можно совместить и с объявлением переменной. Напрмиер:

var name:String = “Вася”;


---------------------------------------------------------------------------------------------------------------
продолжение следует smile

Работа с переменными. Некоторые операторы.

Итак, мы научились создавать переменные и получать/изменять их значения. Теперь перейдем к действиям над ними.
Самый используемый оператор, это, естественно, присваивание. Производится оно с помощью символа =. Этот символ означает, что мы присваиваем перенной какое-либо значение. До этого он уже был написан, так-что остановлюсь на некоторых извращениях, а именно:
Можно присвоить одно и то-же значение нескольким переменным. Это выглядит вот так:

var a:Number;
var b:Number;
var c:Number;
a = b = c = 10;
trace (a);
trace (b);
trace ( c );

Выдаст 10, 10, 10. То есть мы присвоили значение 10 для всех трех переменных. Присваивание идёт справа на лево, то есть наш кодэквивалентен следующему:

var a:Number;
var b:Number;
var c:Number;
c = 10;
b = c;
a = b;

Теперь перейдём к остальным операторам. Итак, рассмотрим тип Number и то, что можно делать с переменными этого типа. Как в начальных классах, начнём со сложения.

Математические операторы
1. Сложение.

Сложение производится с помощью оператора +. Примеры операции сложения:

var a:Number = 2;
var b:Number = 3;
trace (a+b);
trace (a+2);
var c:Number = a+b;
trace ( c );

2. Вычитание

Производится с помощью оператора -. Пример:

var a:Number = 2;
var b:Number = 3;
var c:Number = a – b;

3. Умножение

Юзаем для этой цели оператор *.

var a:Number = 2;
var b:Number = 3*a;

4. Деление.
Оператор деления - /

var a:Number = 2;
var b:Number = 3/a;

Сразу возникает желание поделить на 0? Ну пожалуйста, пробоуйте smile . Получите в c значение NaN. Вам интересно, что это значит? Читайте дальше и всё будет понятно.

5. Остаток от деления.
Оператор - %.

var a:Number = 6%4;
trace (a);
//выдаст 2, так как 6 = 4*1 + 2.

6. Инкримент-декремент.
Оператор инкримента - ++.
Оператор декремента - --.

Оператор, увеличивающий (если инкримент) или уменьшающий (если декремент) значение переменной на 1.

Различают два вида инкримента и декремента: постфиксный и префиксный.
Постфиксный инкримент располагается после переменной, например:
c++;

Разберемся, как работает постфиксный инкримент.

var c:Number = 2;
trace (c++);
trace ( c );

Этот код экваивалентен такому:

var c:Number = 2;
trace ( c );
c = c+1;
trace ( c );

Таким образом, если вы использете постфиксный оператор как часть выражения, сначала будет возвращен результат выражения, а затем будет выполнен оператор.
Более наглядный пример:

var c:Number = 2;
trace ((c++)*2);
trace ( c );

После первого trace вы получите 4, а после второго – 3.
То-же самое применимо и к постфиксному декременту.

Теперь рассмотрим префиксный инкримент.
Оформляется он ввиде:

var c:Number = 2;
++c;

Значение с меняется на c+1. То есть данный код эквивалентен:

var c:Number = 2;
c = c+1;

Ваш вопрос не так уж трудно угадать: вам интересно, чем он отличается от постфиксного? Ну давайте напишем вот такой вот код:

var c:Number = 2;
trace (++c);
trace ( c );

Что мы видим в output? Мы видим там два числа 3. То есть префиксный инкримент, в отличие от постфиксного, выполняется до того, как происходит возвращение результата выражения. То-же самое, как это очевидно, и с префиксным декрементом.

Это основные математические операторы, теперь рассмотрим такое извращение, как сложные операторы.

Сложные операторы.
Не бойтесь, это всего-лишь их название, на самом деле они никакие не сложные. Просто они комбинированы из нескольких. Итак, примеры сложных операторов:

+=, -= , *= , /=, %=

Нет, это не смайлы %). Это операторы. А то, что они означают, легко понять на примере:

var a:Number = 2;
a += 10;
trace (a);

В ouput выведется – 12. То есть этот код эквивалентен следующему:

var a:Number = 2;
a = a + 10;
trace (a);

Такая-же ситуация и с остальными.
Зачем это нужно? Проще набрать

name_of_variable += 10;

чем писать два раза, имя переменной. К тому-же + и = это одна и та-же клавиша на клавиатуре. Вообщем Use It! Для удобства.




---------------------------------------------
продолжение следует

Это сообщение отредактировал(а) Alex Batsuev - 30.11.2005, 17:22
PM MAIL WWW ICQ YIM MSN   Вверх
AlDev
Дата 8.12.2005, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: 8
Всего: 50



Boolean операторы.
Теперь перейдем к операторам, цель которых – работать со булевыми величинами. Но для того, чтобы понять, что это такое, надо понять, что такое Boolean. Вообщем есть такая вещь – логика. Очень, можно сказать, полезная. Вообщем про какое-либо утверждение можно сказать, истино оно или ложно. То есть это как обычно условия вам ставят: да или нет. Так вот эти да и нет в программировании очень полезная и нужная вещь. Можно сказать, что это такой маленький мирок, где на вопросы нету ответа «скорее да, чем нет» и тому подобных.
Итак, переменные типа Boolean могут иметь только два значения: true или false. То есть true – это истина (ну или «да», как вам больше нравится), а false – это ложь. Для хранения значения такой переменной достаточно всего одного бита.
Итак, что можно делать с этой самой истиной?

1. Отрицание.
Отрицание производится с помощью оператора !. Пример:

var need_coffe:Boolean = false;
need_coffe = !need_coffe;
trace (need_coffe);

То есть если переменная need_coffe у нас была равна false, то она становится равной true и наоборот.
2. Логическое И.
Производится с помощью оператора and или оператора &&. Вообще никакой принципиальной разницы между мет, как их обозначать нету. Кому как удобнее. Как его применять? Ну например, нам надо узнать, можно-ли курить.

var est_spichki:Boolean = true;
var est_sigareti:Boolean = true;
var ventilator_rabotaet:Boolean = true;
var mozno_kurit:Boolean = est_spichki && est_sigareti && ventilator_rabotaet;
trace (mozno_kurit);

предпоследняя сточка эквивалентна такой:
var mozno_kurit:Boolean = est_spichki and est_sigareti and ventilator_rabotaet;

3. Логическое ИЛИ.
Производится с помощью оператора or или оператора ||. Так-же, как и логическое И. Пример:

var need_two_beer:Boolean = true;
var phrase:Boolean = two_beer || !two_beer;
trace (phrase);

вторая строчка, это то-же самое, что и

var need_two_beer:Boolean = true;
var phrase:Boolean = two_beer or !two_beer;
trace (phrase);

Некая иллюстрация на тему to be or not to be…

Теперь ещё несколько операторов, которые возвращают Boolean значения:

1. Сравнение.
Разделяют как нестрогое, так и строгое сравнение.
Нестрогое сравнение – сравнение без учета типа переменных. Ну и строго, как очевидно, это сравнение с учетом этого самого типа. Для проверки на нестрогое сравнение используют оператор ==. Иногда нестрогое сравнение производят с помощью eq. Пример такого сравнения:

var a:Number = 10;
var b:String = ‘10’;
var c:Boolean = a==b;
trace ( c );

выдаст нам true. О том, как происходит сравнение вы узнаете позже.
Итак, а в чем отличие от строго сравнения и как делать проверку на строгое равенство? Всё очень просто. Оператор строгого сравнения - ===. Пример:

var a:Number = 10;
var b:String = ‘10’;
var c:Boolean = a===b;
trace ( c );

выдаст нам flase, ибо типы переменных a и b разные.

2. проверка на неравенство.
Опять-таки бывает как строгая, так и не строгая. Нестрогая обозначается с пом-ю != , а строгая соответственно через !==. Пример:

var a:Number = 10;
var b:String = ‘10’;
var c:Boolean = a!=b;
trace ( c );

выдаст нам false. Ведь a нестрого равно b.
А если провести строгую проверку:

var a:Number = 10;
var b:String = ‘10’;
var c:Boolean = a!==b;
trace ( c );

то результат будет, как не трудно догадаться, true. Ибо типы переменных разные.

3. больше.
Обозначается через > и проверяет, больше-ли значение первой переменной значения второй переменной. Можно описывать через gt.

var a:Number = 10;
var b:Number = 20;
var c:Boolean = a>b;
trace ( c );

выдаст нам false, т.к. 10 не больше, чем 20.

4. больше или равно. Обозначается через >= или ge.Пример:

var a:Number = 10;
var b:Number = 10;
var c:Boolean = a>=b;
trace ( c );

выдаст true.

5. меньше Обозначается через < или lt. Пример:

var a:Number = 10;
var b:Number = 20;
var c:Boolean = a<b;
trace ( c );

выдаст true, ибо 10 меньше 20.

6. меньше или равно. Обозначется через <= или le. Пример:

var a:Number = 10;
var b:Number = 10;
var c:Boolean = a<=b;
trace ( c );

Выдаст true.

---------------------------
продолжение следует...
PM MAIL WWW ICQ YIM MSN   Вверх
ProgrammerBOTANIK
Дата 12.12.2005, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 706
Регистрация: 27.4.2004

Репутация: нет
Всего: 0



Ну, и что это все дает начинающему пользователю, если он не знает как обратиться к этому извне?
Надо наверное дальше объяснить? smile

P.S.
Ставь "10", а не ‘10’ - реально сбивает с толку, не знаю как других, а Флеш-на 100%
Цитата
**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 2: Syntax error.
    var b:String = ‘10’;

Total ActionScript Errors: 1  Reported Errors: 1




--------------------
Сострадание со стороны жизни выражается в смерти
PM MAIL   Вверх
Guest
Дата 5.1.2006, 17:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











AlDev, :lol: эт ты Гурского перепечатываешь ?
  Вверх
AlDev
Дата 5.1.2006, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: 8
Всего: 50



Цитата(Guest @ 5.1.2006, 22:06 Найти цитируемый пост)

AlDev, :lol: эт ты Гурского перепечатываешь ?

нет smile
чесно говоря я его даже не читал smile
PM MAIL WWW ICQ YIM MSN   Вверх
AntonioBanderaz
Дата 20.1.2006, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 18



Цитата(AlDev @ 5.1.2006, 18:38 Найти цитируемый пост)

чесно говоря я его даже не читал

Зато всем рекомендуешь.... эт так без обид...


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
Maksys
Дата 21.1.2006, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Future Splasher
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 15.6.2005
Где: Екатеринбург

Репутация: 3
Всего: 17



Гурский кста очень мне понравился сразу всю флешку как на ладони... все не документированные дыры рассказал... smile


--------------------
 С уважением, BiMaWa™©.
user posted image
user posted image
PM MAIL ICQ Skype GTalk   Вверх
stt
Дата 20.3.2007, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 26.2.2007

Репутация: 1
Всего: 1



где продолжение?
скажем работа с мувиклипом smile 
PM MAIL   Вверх
AlDev
Дата 22.3.2007, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: 8
Всего: 50



stt, работа с мувиклипом это уже Flash API =) а я про язык писал
PM MAIL WWW ICQ YIM MSN   Вверх
БуратиноВЗапое
  Дата 19.3.2009, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 17.3.2009

Репутация: нет
Всего: нет



дайте чонебудь про Namo FreeMotion 2006
непонимаю там ничего(
PM MAIL   Вверх
Alexandr507
Дата 5.3.2010, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 19.7.2009

Репутация: нет
Всего: -1



Доброго времени суток.  В университете задали  на курсовую сделать программу иллюстрирующую сортировку.  сам по себе алгоритм это простая сортировка выбором или пузырька. то есть элементарно. Акцент в программе сказали сделать на наглядный показ сортировки заданным методом.
выглядеть это должно примерно так, рандомным образом на экране появляются предположим кружочки с цифрами  от 1 до 5..   например 2,5,1,3,4 
нужно упорядочить это, и акцент нужно делать как я говорил на наглядный показ в первую очередь на анимацию,  то есть допустим всеми известная сортировка выбором, пробег по всему массиву, и выявление минимального   значения и замена его с первым элементом массива. и нужно красиво показать как единичка анимационно выходит из своей третьей позиции  и перемещается на первую а в свою очередь двойка занимает ее место. и так далее пока массив не будет полностью отсортирован.

Скачал macromedia flash 8
(к сожалению новее не нашел , хотя сказать честно не особо то и искал smile )

Теперь вопрос. Реально ли сделать такое на flash?  и что для этого почитать, желательно не тысячно страничную книжкуsmile   а что нибудь кратенькое что можно скачать в эл. виде.  

Сам изучаю C# и в целом сделать такое на нем могу, но по разным причинам пришлось отказаться от этого языка. 

Это сообщение отредактировал(а) Alexandr507 - 5.3.2010, 08:55
PM MAIL   Вверх
bars80080
Дата 5.3.2010, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор воюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12009
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 1
Всего: 315



Alexandr507, а почему вы не создали тему для своего вопроса?
PM MAIL   Вверх
Alexandr507
Дата 5.3.2010, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 19.7.2009

Репутация: нет
Всего: -1



Посчитал что темы много для моего скромного вопроса)
PM MAIL   Вверх
bars80080
Дата 5.3.2010, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор воюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12009
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 1
Всего: 315



но о людях, которые будут читать кучу постов, прежде чем дойдут до вашего и поймут, что они зря потратили время, вы не подумали?

это правило форума: один топик - один вопрос



но таки я вспомнил эту книжку. что-то вроде Macromedia Flash 8 и Action Script 2, авторы Гурский и Гурский (вроде два брата).
там по коду ровно столько, чтобы можно было пользоваться, а вот методика, как делать всякие анимашки расписаны довольно подробно. движения, трансформации, ускорения, повороты, движение по траекториям. поищите эту книгу, будет полезно
PM MAIL   Вверх
Alexandr507
Дата 5.3.2010, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 19.7.2009

Репутация: нет
Всего: -1



bars80080, вероятно вы правы, за литературу благодарю, осталось теперь найти
PM MAIL   Вверх
bars80080
Дата 5.3.2010, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор воюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12009
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 1
Всего: 315



я имел ввиду эту:

user posted image

а тут можно и на шару ссылку достать 
PM MAIL   Вверх
Google
  Дата 22.5.2019, 14:09 (ссылка)  





  Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Flash"
AlDev
SoWa
  • Если вы хотите предложить кому-либо работу, то пишите или в личку, или оставляйте сообщения в специально предназначеном для этого форуме "Объявления о найме специалистов"
  • Один вопрос - одна тема. Не надо переходов от одного вопроса к другому.
  • Если вы хотите показать какой-нибудь ваш мульт, причём показать, а не предоставить исходник, то вам сюда
  • Вопросы по разработке интернет-приложений на Flex и вопросы по MXML пишите в раздел Flex
  • Смотрим в будущее. ActionScript 3 обсуждается в форуме ActionScript 3
  • Новости из мира Flash.
  • New! [code=ascript][/code] - подсветка ActionScript + wikipedia help

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, AlDev, SoWa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | ActionScript 1,2 | Следующая тема »


 




[ Время генерации скрипта: 0.1522 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.