НОВЫЕ ИГРЫЛУЧШИЕ ИГРЫФОРУМ 647 Всего сообщений: 305037
+  Форум FlashPlayer.ru
|-+  Форум по flash играм
| |-+  Академия flash программирования (Модераторы: Lexei, Vetal1992)
| | |-+  Уроки по ActionScript.

Автор Тема: Уроки по ActionScript.  (Прочитано 65036 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Re: Уроки по ActionScript.
« Ответ #15 : 01 Января 2011, 20:22:43 »
ПРОСЬБА вопросы задавать в соседней теме, дабы не зафлуживать эту ))
Ссылка на тему:
http://www.flashplayer.ru/forum/index.php/topic,13143

Урок 8. Понятие пути и слушатели событий.

Путь.

Вы наверняка сталкивались много раз с понятием пути, открывая папки в вашей операционной системе и видя в адресной строке путь к текущей папке, например:
C:\Games\UnrealTournament
Или что-то подобное.
Во флэш все данные тоже построены определенным образом. Только в отличие от операционной системе, вместо слеша используется точка.
Так например наша главная временная шкала  на которой мы писали все это время наш код имеет адрес: _root
А переменная(функция, обьект) созданная на ней имеет имеет такой адрес:
_root.имяПеременной

Существуют несколько способов задания пути:
_root – путь от главной шкалы
_this – это означает, что объект надо искать в данном месте.
_parent – ссылка на объект, содержащий данный объект. Грубо говоря на уровень выше.

До сих пор мы не указывали пути, но в большинстве случаев это приходится делать. Вы могли это наблюдать, когда вызывали методы и свойства классов.
Приведу один из примеров:
var a = 0;
function myFunc() {
   var a = 1;     //Переменная вне функции и внутри функции – две разные переменные.
   trace(a);       //Выведет переменную, которая объявлена в функции.
   trace(_root.a);     //Выведет переменную вне функции.
}
myFunc();

Переменная, объявленная внутри функции, живет только во время выполнения этой функции.  При этом она перекрывает переменную на главной шкале. Тоже самое может касаться и переменных в других объектах.

Например, тот же наш класс, можно создать много объектов этого класса, но переменные внутри будут одни и те же.

Слушатели событий
Мы также будем рассматривать такие понятия как слушатели событий. Это те же функции классов, но с одним отличием.

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

Re: Уроки по ActionScript.
« Ответ #16 : 18 Января 2011, 19:56:48 »
ПРОСЬБА вопросы задавать в соседней теме, дабы не зафлуживать эту ))
Ссылка на тему:
http://www.flashplayer.ru/forum/index.php/topic,13143

Урок 9. Подробнее о слушателях событий.

Пожалуй, это последний урок, посвященный основам программирования на AS 2.0
В последующих уроках AS2.0 я попытаюсь составить краткий курс практики, чтобы научится пользоваться нашими знаниями и видеть их результат. Там вы будете писать уже сами, а я немного вас направлю и помогу.

Слушатели событий я условно разделю на три вида.
1. Использующие непосредственно событие.
2. Использующие объект для регистрации событий
3. Обработчик внутри MovieClip и Button.

1. Самый простой пример обработчика первого типа выглядит так:
ИмяОбъекта.ИмяОбработчика = function(){ // Заметьте, мы не пишем имя функции.
   

Все имена обработчиков начинаются со слова on, поэтому если вы видите такое слово, то перед вами обработчик. Наша главная временная шкала(_root) тоже объект, поэтому у нее тоже есть обработчики. Давайте посмотрим как они используются, пишем на главной шкале:
_root.onEnterFrame = function(){
   trace("Работает!!!");
}

onEnterFrame – обработчик, который вызывается как только обновился кадр.

# Обновление кадров считается по fps – frame per second. Дословно с английского означает
# кадры в секунду. Если у вас fps стоит на 24, то данный код в скобках выполнится 24  раза.

Вот другой пример:
_root.onMouseDown = function(){
   trace("Работает!!!");
}
 Этот обработчик вызывается при нажатие мыши.

2. Не все объекты способны принимать обработчик напрямую, поэтому они регистрируют обработчик объекта. Делается почти также как и в первом случае.

var obj: Object = new Object; // Создаем объект
obj.onKeyDown = function(){//Пишем необходимый нам обработчик аналогично первому случаю.
   trace("Работает!!!");
}
Key.addListener(obj);//Передаем наш созданный объект.

Данный код вызывается при нажатие клавиши клавиатуры onKeyDown.

На вопрос, для какого класса каким обработчиком надо пользоваться, используйте справку.

Справка:

Есть справка в самом флэш, есть справка на сайте адоба(английский):
http://help.adobe.com/en_US/AS2LCR/Flash_10.0/help.html?content=Part2_AS2_LangRef_1.html
Я же советую пока использовать эту, она больше подходит для уроков:
http://flash.demiart.ru/as_help/as_help_ru.rar
Она на русском и с полным описанием(правда пару классов там нет, но они вам наврятле понадобятся в ближайшее время).

Итак, вот описание основных встроенных классов и для чего их используют:
1. Array – класс массива, что такое массив мы уже обсуждали.
2. Button – этот класс служит для создания кнопок.
3. Date – позволяет работать с временем.
4. Key – класс служит для работы с клавиатурой.
5. Math – содержит математические функции. Одна из которых - великий рандом =)
6. Mouse – работа с мышкой.
7. MovieClip – наиболее часто используемый класс, можно сказать, что наша временная шкала – это объект класса MovieClip.
8. Классы Number(число), String(строка), Boolean(булева величина).
9. Sound – работа со звуками.
10. Stage – работа со сценой.
11. TextField – текстовые поля.

Для каждого класса в справке расписаны его обработчики и как их использовать. Помните, обработчик начинается со слова on, так их проще найти.
Есть еще и другие классы, но их я оставляю вам, они вам наверно понадобятся только в будущем.

3. Третий вид скорее маленькое исключение. Наверняка создавая Кнопку или Мувиклип, вы нажимали на них и видели, что там тоже можно писать код.  Так вот, там тоже можно писать обработчики, в кнопках для кнопок, а в клипах – для мувиклипов.

Код может располагатся только внутри обработчиков, в отличие от временной шкалы и выглядит он так:
Для кнопок:
on(Обработчик){//в скобках пишется обработчик без слова on(например Press)

}
Для клипов:
onClipEvent(Обработчик){// Обработчик для клипа опять же без слова on

}

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

Задание:
Откройте справку и попробуйте написать сами следующие обработчики:
Класс           Обработчик
Key              onKeyUp
Mouse          onMouseDown, onMouseUp, onMouseWheel
MovieClip    onLoad, onPress, onEnterFrame
TextField      onChanged
Button           onPress, onRelease
« Последнее редактирование: 18 Января 2011, 19:58:49 от Elentarion »

Оффлайн sws750 Мужской

Re: Уроки по ActionScript.
« Ответ #17 : 22 Января 2011, 08:27:13 »
спасибо за труды :-)

Re: Уроки по ActionScript.
« Ответ #18 : 22 Января 2011, 17:32:35 »
Буду рад, если хоть кому-то да помогли. =)

Оффлайн sws750 Мужской

Re: Уроки по ActionScript.
« Ответ #19 : 27 Января 2011, 11:23:21 »
Ну мне точно помогли :-)
Тут в кратце прочитал, и уже какие то результаты появились  :-) и интересней читать много листовые варианты.

Оффлайн sws750 Мужской

Re: Уроки по ActionScript.
« Ответ #20 : 17 Февраля 2011, 00:28:00 »
все привет, чето сижу туплю какой час. мыслей уже нету.
подскажите плиз?
хачу что б выводилось в столбик.
Почему не работает? ведь namex у меня стринг.

var nam:Array = ["Ser","Den","Anna"];
/////////////////////////////////////////
function hi(namex,y)
{
this.createTextField(namex, 0, 0, y, 400, 100);
namex.text = "Текст" + namex;
}
/////////////////////////////////////////
for (i=0,j=0;i<nam.length;i++,j+=50)
{
hi(nam,j);
}

ввожу нам[и] почему то пропало в англиском.
hi(nam,j);
« Последнее редактирование: 17 Февраля 2011, 00:31:35 от sws750 »

Re: Уроки по ActionScript.
« Ответ #21 : 18 Февраля 2011, 00:25:30 »
0. [ i ] и [/ i]- это теги, для оформления текста. Потому и пропадают.
1. Если ты создаешь новое текстовое поле на одной глубине со старым, то старое поле исчезает. Касается всех объектов. Быстрый способ их уничтожить кстати, проверял.

2. namex.text = "Текст" + namex;
Тут флэш думает, что ты обращаешься к своей текстовой переменной namex, а не к текстовому полю с именем namex. Куда он девает строку text честно пока не понял.

3. Правильный вариант - перезаписывать в переменную свой текстовый объект:
namex = this.createTextField(namex, y, 0, y, 400, 100);
var nam:Array = ["Ser","Den","Anna"];
/////////////////////////////////////////
function hi(namex,y){
namex = this.createTextField(namex, y, 0, y, 400, 100);
namex.text = "Текст " + namex._name;
}
/////////////////////////////////////////
for (i=0,j=0;i<nam.length;i++,j+=50){
hi(nam[i],j);
}
« Последнее редактирование: 18 Февраля 2011, 00:29:53 от Elentarion »

Оффлайн sws750 Мужской

Re: Уроки по ActionScript.
« Ответ #22 : 18 Февраля 2011, 00:43:05 »
1. Если ты создаешь новое текстовое поле на одной глубине со старым, то старое поле исчезает. Касается всех объектов. Быстрый способ их уничтожить кстати, проверял.

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

В общем я хачу что б столбик вывелисть данные
- привет люся
- привет вася
- привет петя

ваш пример - Код: ----

у меня ни чего не вывел пустота. :-(

Re: Уроки по ActionScript.
« Ответ #23 : 18 Февраля 2011, 04:37:12 »
Странно, перепроверил, код у меня работает. Проверь ковычки или еще что...

Код у тебя не работает, из-за этой строки, так как она неверна:
namex.text = "Текст" + namex;
Так как namex - имя твоей строковой переменной, а не текстового поля.

Ну вот пример:
stroka = "str";
this.createTextField(stroka,0,0,0,100,20);
stroka.text += "Этого не будет"; //Обращение не к текстовому полю, xотя имя мы можем задать с помощью stroka
str.text += "Это правильно"; //Обращение к текстовому полю

Оффлайн Vetal1992 Мужской

Re: Уроки по ActionScript.
« Ответ #24 : 18 Февраля 2011, 07:48:02 »
Можно еще так:

stroka = "str";
this.createTextField(stroka,0,0,0,100,20);
_root[stroka].text += "тексттексттекст" //так обращаемся к текстовому полю

Re: Уроки по ActionScript.
« Ответ #25 : 18 Февраля 2011, 09:47:33 »
Ага, точно. Тогда можно сделать так, заменить
namex.text = "Текст" + namex;
на следующую строку:
_root[namex].text = "Текст" + namex;

Оффлайн sws750 Мужской

Re: Уроки по ActionScript.
« Ответ #26 : 18 Февраля 2011, 18:52:26 »
Спасло положение - _root[namex] !!! я ни знал что такое бывает.
И без ууу не отображаеться, но я с ним игрался не помагало...
СПАСИБО!

   this.createTextField(namex,yyy,0,y,200,20);
   _root[namex].text = "Привет" + "_" + namex;

Оффлайн sws750 Мужской

Re: Уроки по ActionScript.
« Ответ #27 : 18 Февраля 2011, 20:46:06 »
А почему не работает? вроде ж как строка это String!!! в createTextField!

var stroka:String;
stroka = "str";
this.createTextField(stroka,0,0,0,100,20);
stroka.text += "Этого не будет"; //Обращение не к текстовому полю, xотя имя мы можем задать с помощью stroka
str.text += "Это правильно"; //Обращение к текстовому полю

Re: Уроки по ActionScript.
« Ответ #28 : 18 Февраля 2011, 21:36:45 »
Как бы попонятнее сказать.
Допустим у нас есть такой отдельный код.
var stroka:String = "str";
stroka.text = "Мой текст";
Тут ошибка, ведь в строке(класс String) нет никакой переменной text, это только строка. Это ты и пытаешься сделать.

А теперь отдельно по нашему примеру.
Смотри. Конструкция 
my_mc.createTextField(instanceName:String,  ...)
instanceName:String - то есть ты передаешь сюда строку, и она ПРЕОБРАЗУЕТСЯ В ИМЯ для текстового поля.


То есть у тебя получается две переменных.
stroka:String = "str"; - так и остается
str:TextField - это полученный экземпляр класса текстовое поле.

Соответственно обращаться к текстовому полю мы должны по имени str, а stroka - так и остается нашей текстовой переменной и никуда не девается. И переменной text у нее нет, вот ошибка у тебя и выскакивает.

Как правильно сказал Виталий, есть такая хитрость в as2 со скобками [ ]:
_root["str"].text - аналогична записи _root.str.text
_root["s"+"t"+"r"].text - аналогична записи _root.str.text

var stroka = "st";
var a = 5;
_root[stroka+"r"].text - аналогична записи _root.str.text
_root[stroka+"r"+a].text - аналогична записи _root.str5.text

« Последнее редактирование: 18 Февраля 2011, 21:50:08 от Elentarion »

Оффлайн Vetal1992 Мужской

Re: Уроки по ActionScript.
« Ответ #29 : 18 Февраля 2011, 22:34:05 »
текстовое поле - это отдельный тип данных: TextField;

ты можешь делать так:

Цитата:
var myField:TextField = this.createTextField("Тут вводится её имя",0,0,0,100,20);

myField.text="Текст";
trace(myField._name)   //Выведет: Тут вводится её имя
trace(myField.text)      //Выведет: Текст

Для каких целей тебе нужен такой код? Может мы чем помочь сможем

Добавлено через: 4 мин. 58 сек.
или же так:

Цитата:
var name:String = "str";
var myField:TextField = this.createTextField(name,0,0,0,100,20);

myField.text="Текст";
trace(myField._name)   //Выведет: Тут вводится её имя
trace(myField.text)      //Выведет: Текст

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

Цитата:
trace(_root[name])   //_level0.str

Цитата:
trace(myField)   //_level0.str
« Последнее редактирование: 18 Февраля 2011, 22:39:03 от Vetal1992 »

+  Форум FlashPlayer.ru
|-+  Форум по flash играм
| |-+  Академия flash программирования (Модераторы: Lexei, Vetal1992)
| | |-+  Уроки по ActionScript.