среда, 31 октября 2007 г.

Я.ру

Теперь у меня есть персональная страница на Я.ру — Alexsas!

Это новый сервис Яндекса, который сейчас проходит ограниченное тестирование и регистрация в нём пока доступна только по приглашениям.

воскресенье, 21 октября 2007 г.

Урок as3: Знакомство с XML – продолжение.

На чем мы остановились? Ах да… мы вывели наш xml в Output
Ну что ж продолжим.
Сейчас мы будем работать только с 19-ой строчкой, где у нас trace – весь остальной код будет без изменений.

Давайте в trace напишем вот такую конструкцию:

trace(xmlData.kniga);

и снова контрол-энтер. Смотрите, что получилось – в Output вышли все ноды kniga.

Теперь давайте посмотрим на вот это trace(xmlData.kniga.name)
Я думаю, что смысл понятен. Мы научились добираться до нодов.

Едем дальше.
Вы наверное заметили, что ноды name и author имеют в себе текст.
Как же добраться до него?
Очень даже просто: trace(xmlData.kniga.name.text())
Попробуйте…
Удивлены? Да. Результат немного не тот который вы ожидали:

МауглиМаленький принцСталкер

Весь наш текст нодов прилип друг к другу. Все правильно флэшовый парсер (страшное слово) не встретил ни одно символа Enter и написал все в строчку. Мы с этим справимся, но чуть позже.

Давайте взглянем лучше вот, что: trace(xmlData.kniga.name.text()[0]);
Интересно, не правда ли? Вышло имя первой книги.
Соответственно, что имя второй мы можем узнать, если вместо нолика напишем единичку.

На заметку: порядковые номера элементов в массиве начинаются не с 1 а с 0. То есть первый элемент будет [0], второй – [1] и так далее.

Пришло пора вмешаться в основной код нашего класса, а именно функции, сейчас она выглядит так:


function LoadXML(event:Event):void {
xmlData = new XML(event.target.data);
trace(xmlData);
}


В AS3 появился класс XMLList – сейчас я покажу как он работает.
Есть еще одна удивительная штука это цикл for each он переберает не названия элементов а их значения… продемонструю.

Для начала давайте создадим список наших названий книг.

function LoadXML(event:Event):void {
xmlData = new XML(event.target.data);
var nameList:XMLList = xmlData.kniga.name;
trace(nameList);
}


Круто, да?
А теперь с помощью for each переберем все данные в этом списке:

function LoadXML(event:Event):void {
xmlData = new XML(event.target.data);
var nameList:XMLList = xmlData.kniga.name;
for each (var nameEl:XML in nameList) {
trace (nameEl);
}


Жмем контрол-энетр. О чудо!!! Полнейшая крутизна!
Что еще мы можем?
О! Наши возможности безграничны.
Но, давайте поговорим о детях. Помните, был такой разговор в первом уроке?
Что у НОДОВ могут быть (или не быть) дети. Припоминайте.

Так вот, чтобы узнать, сколько у НОДа деток – существует свойство children();
(держите перед глазами свой XML – так будет легче понимать, о чем речь)

Создаем XML-список всех детей НОДА kniga:

var knigaChildren:XMLList = xmlData.kniga.children();
А теперь переберем всю информацию содержащуюся в каждом их этих детей.
Вот как станет выглядеть наша функция… Проверьте.

function LoadXML(event:Event):void {
xmlData = new XML(event.target.data);
var knigaChildren:XMLList = xmlData.kniga.children();
for each (var knigaInfo:XML in knigaChildren) {
trace(knigaInfo);
}


Все зашибись. И радости нет предела.
Если хотите посмотреть все имена нодов, то вот: trace(knigaInfo.name());

На сегодня, все... ждем продолжения и незабываем...

четверг, 18 октября 2007 г.

Урок AS3: Знакомимся с XML

Знакомимся с XML.

Сегодня будем знакомиться с XML и работой с ним в ActionScript 3.0 (далее AS3).
Зачем нам XML? Ответ прост – это удобный обмен данными между сервером и клиентом – раз. Это удобный обмен данными вообще – два. И это просто удобно – три.
XML уже используется повсюду и везде, давайте и мы не будем отставать.

Что такое XML?
Ну, чтобы совсем понятно было - это почти HTML только попроще.
Принцип XML весьма прост: Открываем тэг, пишем текст, закрываем тэг. И все.
Вот пример:



Тэги здесь в отличии от HTML могут быть любыми какими только пожелаете.



Еще тэги могут иметь атрибуты. А атрибуты должны иметь значения.



Открытый и закрытый тэги – вместе образуют НОД. В общем-то из нодов и состоит XML.
Давайте еще один пример рассмотрим:



У каждого нода могут быть дети, а может их и не быть.
У первого нода «polka» три «ребенка» - ноды “kniga”.
У нодов “kniga” по два «ребенка» - «name» и «author».
А эти два нода никаких детей не имеют. Зато в себе имеют какую-то информацию. Но об этом позже.

Запомните: ноды должны иметь начало polka и обязательно иметь конец /polka.

Теперь давайте от теории перейдем к практике.
Создайте у себя где-нибудь папку с вот таким, например именем: My_First_XML (программисты пробелами не пользуються! :-)

Теперь открываем всеми самый любимый и стабильный продукт Била Гейтса - Блокнот.

Туда с помощью нехитрого приема «набора ручками» вставляем нашу «полку»:



И сохраняем под именем polka.xml в нашу свежую папку.
Мы создали xml-файл.
Теперь запускаем многоуважаемый Flash CS3. Жмем NEW и выбираем Fash File (ActionScript 3.0)
Сразу же сохраняем вот под таким каким-нибудь именем: my_xml.fla
Идем в Properties и в Document class пишем имя нашего будущего класса, который будет грузить XML.

И имя ему мы дадим: xml_loader.

Опять жмем NEW и выбираем ActionScript file.
И сохраняем его туда же под этим незамысловатым именем: xml_loader.

Вот теперь начнется самое интересное.
Будем писать класс.

Начинаеться все как обычно для AS3 со слова:

package {

}

Что мы и вбиваем в наш xml_loader
Далее нам надо подгрузить те классы, которые как мы думаем, будут участвовать у нас в процессе. А это вот такой не слабый набор:

package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.ErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.xml.XMLDocument;

}

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

Теперь нам надо обозначить наш класс.

Для этого мы добавляем строчку: public class xml_loader extends Sprite {
Но просто пустой класс нам не нужен, поэтому мы еще добавим конструктор. Тобишь функцию с таким же названием как и класс: public function xml_loader() {
И весь код нашей программки будет выглядеть теперь так:

package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.ErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.xml.XMLDocument;

public class xml_loader extends Sprite {

public function xml_loader() {

}
}
}
}

Сохранитесь и нажмите контрол-энтер.
Ничего не произошло?
Посмотрите в окошке Output тоже – ничего? Значит мы правильно все сделали.
А на самом деле мы еще ничего полезного не сделали. Но у нас есть класс.

Что же теперь приступим к более полезным вещам.
AS3 строго типизированный язык, причем объектно-ориентированный и это очень важно.
Создаем обьект xmlLoader как загрущик урла. (хе-хе)

var xmlLoader:URLLoader = new URLLoader();

Теперь наша переменная xmlLoader может в себя что-либо грузить.
Еще надо создать обьект для нашего XML, чтобы его туда положить:

var xmlData:XML = new XML();
Теперь к нашему xmlLoader надо «подключить слушателя», который нам даст знать, что XML загружен:

xmlLoader.addEventListener(Event.COMPLETE, LoadXML);

Event.COMPLETE – это событие которое ждет слушатель. (в данном случае это удачная загрузка)
LoadXML – это имя функции, которая вызовется, после того как слушатель услышит требуемое событие.

В общем если файл загрузиться то сработает. Нет. На нет и суда нет.
Далее.

xmlLoader.load(new URLRequest("polka.xml"));

Этой строчкой мы говорим нашему xmlLoader грузить файл polka.xml
(так как наш swf и наш xml лежат в одной папке, то никаких путей и адресов указывать ненадо)

И вот собственно функция LoadXML

function LoadXML(event:Event):void {
xmlData = new XML(event.target.data);
trace(xmlData);
}

Я немного расшифрую.
LoadXML(event:Event) - В эту нашу функцию передается событие, вызвавшее функцию. Простите за тавтологию, но это так.
xmlData = new XML(event.target.data) - В объект xmlData передается новый загруженный XML.

Любое событие вызвано каким-то объектом и этот объект можно узнать вот так: event.target.
А данные, которые содержит этот объект можно узнать так: event.target.data.

Ну и выводим:
trace(xmlData);

Общий код документа выглядит так:

package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.ErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.xml.XMLDocument;

public class xml_loader extends Sprite {

public function xml_loader() {

var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML();
xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
xmlLoader.load(new URLRequest("polka.xml"));
function LoadXML(event:Event):void {
xmlData = new XML(event.target.data);
trace(xmlData);
}
}
}
}

Сохраняем и жмем контрол-энтер.
Ура!!!!

Наш xml появился в Output.
На сегодня это все.
В следующей статейке я поведаю как с этим добром обходиться.
Удачи и встретимся на пляже.

среда, 17 октября 2007 г.

Урок AS3: Рисуем шедевральную абстракцию

Всё как всегда.
Создаем новый fla документ. Сохраняем его под произвольным именем.
Создаем новый as документ. Сохраняем его под именем Test.as и пишем туда код:

package {
import flash.display.MovieClip;

public class Test extends MovieClip {
public function Test() {

var bgColor:int = 0xff0000;
var size:int = 400;
var count:int = 300;
graphics.beginFill(bgColor);
for( var i:int=0; i<=count; i++){
graphics.lineTo( Math.floor(size*Math.random()), Math.floor(size*Math.random()));
}
graphics.endFill();
}
}
}

В итоге получаеться вот, что:

пятница, 12 октября 2007 г.

Живой PDF






На сайте ByteArray.org я нашол интересную информацию о Alive PDF
Данный API позволит полноценно создавать PDF файлы прямо из flash.
Пример кода:


// create starting document
var myPDFEncoder:PDF = new PDF ( Orientation.PORTRAIT, Unit.MM, Size.A4 );
// add a new page
myPDFEncoder.addPage();
// this will add a snapshot of the canvas Sprite in the PDF with a JPG Compression
// compression level is set to 100 here
myPDFEncoder.addImage (canvas, null , true, ImageFormat.JPG, 100);
// save the pdf
myPDFEncoder.savePDF ( Method.REMOTE, 'http://localhost/pdf/create.php', Download.ATTACHMENT, 'myPDF.pdf' );

Там же вы можете попробовать как это реализовано.
Помоему супер.

Скачать можно тут.

четверг, 11 октября 2007 г.

Лучшие зарубежные ресурсы посвященные Flash

- Flash Kit

- Best Flash Animation Sites

- Hotscripts

- Open Source Flash

- Actionscript

- Flash Advisor

- Flash MX

- Ultrashock

- Kirupa

- gotoAndLearn

- http://www.thefwa.com

- http://www.sephiroth.it/

- http://www.riaforge.org/

- http://www.media-box.net

- http://www.actionscripthero.com/adventures

- http://www.flashden.net

- http://www.designineurope.eu

- http://www.toufee.com

- http://www.flashmagazine.com

Рисуем Круглешок и Квадратик

В этом примере я покажу как программно рисовать.
Запускаем Flash CS3.
Создаем новый Flash file (AS3 ).
Сразу же его сохраняем ну например под именем Draw.fla
Тут же идем снова в меню File и создаем ActionScript file опять сразу сохраняем в эту же папку под именем example.as.

Пишем следующий код:


package {
import flash.display.MovieClip;
public class example extends MovieClip{
public var mc1:MovieClip = new MovieClip();
public var mc2:MovieClip = new MovieClip();
public function example() {
//
mc1.graphics.lineStyle(1);
mc1.graphics.beginFill(0xff0000);
mc1.graphics.drawCircle(100,100,50);
addChild(mc1);
//
mc2.graphics.lineStyle(1);
mc2.graphics.beginFill(0xffff00);
mc2.graphics.drawRect(100,100,150,100);
addChild(mc2);
}
}
}
Сохраняем. Возвращаемся в draw.fla и Document class прописываем example
Жмем ctrl+enter и радуемся красному кружочку и желтому прямоугольничку.

Теперь давайте разберем все по полочкам:
public class example extends MovieClip{
public function example() {
Эти две строчки в классе: обьявление класса, и обьявление конструктора класса. Запомните, что имя класса и имя конструктора (первой функции в вашем классе) и имя файла класса должны быть одинаковыми. Это закон. Иначе будет ошибка.
Далее:

public var mc1:MovieClip = new MovieClip();
public var mc2:MovieClip = new MovieClip();
Обьявляем наши переменные, как мувиклип, тем самым они примут все свойства мувиклипа на себя. Обьявлять переменные нужно до конструктора класса. Тогда эти переменные будут доступны для всех функций в пределах класса. А мы их обьявили еще и публичными, это дасть возможность нам увидеть их и из других классов.

Далее мы рисуем наш кружок:

mc1.graphics.lineStyle(1);
mc1.graphics.beginFill(0xff0000);
mc1.graphics.drawCircle(100,100,50);
И прямоугольничек:

mc2.graphics.lineStyle(1);
mc2.graphics.beginFill(0xffff00);
mc2.graphics.drawRect(100,100,150,100);
И незабываем про addChild(); эта функция добавляет наши созданные объекты в список отображаемых объектов.

Вот и все. Целью этого примера было показать графический движок AS3 и метод работы с добавлением объектов .

Удачи. И встретимся на пляже!

Советы изучающим ActionScript 3.0

Мой коллега, в блоге My First AS3 Application опубликовал статью Советы изучающим ActionScript 3.0, советы хорошие но для начинающих непонятные. Даже я не все понял.
Но это неотменяет полезность этой статьи.