Наши Урок по созданию браузерной игры № 3

Статус
В этой теме нельзя размещать новые ответы.

Grandex

Новичок
Репутация
0 / 58
Извините за долгое отсутствие уроков, очень мало свободного времени остаеться, но ничего. Приступаем к нашему третьему уроку. В этом уроке мы сделаем II часть регистрации, а именно — создание персонажа. Я сильно не заморачивался и сделал по простому, вот такой результат у нас получиться (картинка).
И еще одно, так как флешки, которые мы будем создавать, читают только utf-8 кодировку, то нам нужно немного изменить нашу БД.


Код:
DROP DATABASE testgame; /* Если данная БД уже создана, то удаляем ее */     
CREATE DATABASE testgame DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; /* Создаем БД со стандартной кодировкой  utf-8(для того что б поддерживался русский язык)*/     
USE testgame; /* используем данную БД */     

/* таблица персонажа */     
CREATE TABLE `users` (     
              id_user    bigint(20) unsigned NOT NULL auto_increment, /* уникальный номер, который не повторяеться и с каждым новым пользователем увеличиваеться на 1 */     
              email    CHAR(64), /* текстовый тип (64 символа) */     
              pass  CHAR(32), /* текстовый тип (32 символа) */     
              name  CHAR(32), /* текстовый тип (32 символа) */     
              life  INT DEFAULT 50, /* числовой тип, по умолчанию равен 50 */     
              atk  INT DEFAULT 7, /* числовой тип, по умолчанию равен 7 */     
              def  INT DEFAULT 5, /* числовой тип, по умолчанию равен 5 */     
              lov  INT DEFAULT 7, /* числовой тип, по умолчанию равен 7 */     
              lvl  INT DEFAULT 1, /* числовой тип, по умолчанию равен 1 */     
              exp  INT DEFAULT 0, /* числовой тип, по умолчанию равен 0 */     
              ip CHAR(15), /* текстовый тип (15 символов) */
             PRIMARY KEY  (`id_user`)  /* Показываем что уникальным номером у нас являеться id_user */     
) ENGINE=MyISAM DEFAULT CHARSET=utf8; /* Обозначаем тип таблицы MyISAM. Таблицы типа MyISAM показывают хорошие результаты при выборках SELECT. Для более подробного изучения читайте Самоучитель по MySQL 5 */     

/* таблица аватара */     
CREATE TABLE `avatar` (     
id_ava  bigint(20) unsigned NOT NULL auto_increment, /* уникальный номер, который не повторяеться и с каждым новым пользователем увеличиваеться на 1 */     
gander  INT(2), /* Пол игрока, цыфровой тип(2 цыфра) */     
vid  CHAR(32), /* Вид игрока,  цыфровой тип(2 цыфры)*/     
path  CHAR(32), /* Путь к папке с рисунками персонажа, текстовый тип(32 символа) */     
PRIMARY KEY (`id_ava`) /* Показываем что уникальным номером у нас являеться id_ava */     
) TYPE=MyISAM;            

/* таблица чата */     
CREATE TABLE `chat` (     
id_msg  bigint(20) unsigned NOT NULL auto_increment, /* уникальный номер, который не повторяеться и с каждым новым пользователем увеличиваеться на 1 */     
msg  CHAR(255), /* текстовый тип(255 символов) */     
time_msg    CHAR(5), /* текстовый тип(5 символов) */     
wrt_user    CHAR(32), /* текстовый тип(32 символов) */     
who  CHAR(32), /* текстовый тип(32 символов) */     
PRIMARY KEY (`id_msg`) /* Показываем что уникальным номером у нас являеться id_msg */     
) TYPE=MyISAM;            

/* таблица инвентаря */     
CREATE TABLE `inventar` (     
id_inv  bigint(20) unsigned NOT NULL auto_increment, /* уникальный номер, который не повторяеться и с каждым новым пользователем увеличиваеться на 1 */     
name_object    CHAR(64),     
atk_up  INT(2),     
def_up  INT(2),     
lov_up  INT(2),     
life_up  INT(4),     
PRIMARY KEY (`id_inv`) /* Показываем что уникальным номером у нас являеться id_msg */     
) TYPE=MyISAM;            

/* таблица квеста */     
CREATE TABLE `quest` (     
id_quest    bigint(20) unsigned NOT NULL auto_increment,     
cont_quest  CHAR(32),     
kill_quest  INT DEFAULT 0,     
PRIMARY KEY (`id_quest`)     
) TYPE=MyISAM;            

/* таблица боя */     
CREATE TABLE `battle` (     
id_btl  bigint(20) unsigned NOT NULL auto_increment,     
end_btl    CHAR(32),     
PRIMARY KEY (`id_btl`)     
) TYPE=MyISAM;            

/* Таблица врагов */     
CREATE TABLE `enemy` (     
id_enm    bigint(20) unsigned NOT NULL auto_increment,     
name_enm    CHAR(32),     
atk_enm    INT,     
life_enm    INT,     
def_enm    INT,     
lov_enm    INT,     
exp_enm     IN T,     
path_enm    CHAR(32),     
PRIMARY KEY (`id_enm`)     
) TYPE=MyISAM;            

/* Добавляем в таблицу данные о враге */     
INSERT INTO enemy (name_enm,     
atk_enm,life_enm,def_enm,lov_enm,exp_enm,path_enm)     
VALUES('Призраки','7','40','6','4','10','path/enemy/'); [/codebox]

А также во всех php файлах заменить эту строку: 

[codebox]<meta http-equiv="content-type" content="text/html; charset=windows-1251" />

на эту:

Код:
<meta http-equiv="content-type" content="text/html; charset=utf-8" />

С помощью этой замены мы поменяем кодировку страниц на utf-8. Также в PSPad'e на строке меню нажмите Формат->UTF-8 и эту операцию проделайте с каждым файлом php.
Теперь приступим к созданию нашей регистрации. Мы будем её делать во FlashDevelop. Запускаем его и видим начальное окно, в котором нам предлагают создать AS3, AS2, HAXE проекты. Мы будем работать с AS3, а именно с Flex'ом. Почему с ним? Потому что я начал изучение данной среды разработки и мне она понравилась happy . Выбираем Flex 3 Project, в поле Name вводим имя своего проекта, я назвал CreateChar. В поле Location выбираем где будет находиться наш проект, у меня это C:\Documents and Settings\Администратор\Мои документы. Поле Package не трогаем, ставим галочку внизу, для того что б создать папку для нашего проекта и жмем OK.
Справа, в окошке Project наши файлы с которыми мы будем работать картинка. Наш главный файл обозначен зеленой стрелочкой вниз. Называеться он Main.mxml, нажмите на него 2 раза ЛКМ. Теперь вы можете писать свой код для этого файла. Как вы видите в нашем фале уже есть строчки кода. Первая определяет кодировку, ее не трогайте. Вторая указывает что это приложение, а не модуль и последняя закрывает тег приложения. Как видите здесь также как и в html существуют теги, и все они начинаються с отрытия скобки < и букв mx. Перейдите во вкладку Design View картинка и можете создавать свое приложение перетаскивая компоненты в рабочую область. В папке Controls картинка Выберите и разместите в рабочую область такие компоненты:
- Button – 3 шт.
- Image – 1 шт.
- Label – 1 шт.
- RadioButton – 2 шт.
- TextInput – 1 шт.


После того как вы разместили, переходите обратно во вкладку Source View. Видим у нас изменился код, все те компоненты, которые мы добавили отобразились и здесь. Нам остаеться только их правильно разместить и дать имена. Поэтому изменяем координаты компонентов как нам удобно, я изменил так:

Код:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
        <mx:Button label="Далее" click="onCreateChar()" x="140" y="252" width="100" height="22"/>
        <mx:TextInput id="nameChar" textAlign="center" x="111" y="222" width="160" height="22"/>
        <mx:Image id="avatar" source="img/men1-1.png" x="171" y="93" width="33" height="33"/>
        <mx:RadioButton id="men" label="Мужской" groupName="gander" selected="true" click="iMen()" x="19" y="41" width="73" height="22"/>
        <mx:RadioButton id="women" label="Женский" groupName="gander" click="iWomen()" x="19" y="67" width="74" height="22"/>
        <mx:Label text="Имя" x="176" y="198" width="36" height="18"/>
        <mx:Button label="Пред." click="onLeft()" x="78" y="141" width="100" height="22"/>
        <mx:Button label="След." click="onRight()" x="200" y="141" width="100" height="22"/>
</mx:Application>

label – что будет отображаться на кнопке или возле RadioButton
click – функция которая происходит после нажатия на кнопку или RadioButton
id – имя тега
textAlign — размещение текста(слева, по-центру, справа)
source — путь к картинке

С этим справились, теперь нам нужно указать какой по размерам будет наша флешка, для этого заменяем тег:

Код:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

на

Код:
<mx:Application layout="absolute" width="400" height="300" xmlns:mx="http://www.adobe.com/2006/mxml">

Мы задали имя слоя - absolute и указали высоту и ширину нашей будущей флешки. Теперь приступаем к написанию логической части. Вся логика будет заключаться в теге , поэтому после тега:

Код:
<mx:Application layout="absolute" width="400" height="300" xmlns:mx="http://www.adobe.com/2006/mxml">

пишем:


Код:
<mx:Script><![CDATA[
      import mx.rpc.events.ResultEvent; //при написании кода вручную, эти импорты появляються сами, первый нужен для
      import mx.controls.Alert; //определения результата, второй для вывода всплывающих окон
      import flash.net.navigateToURL; //а третий для перехода между страницами
          
      private var pic_arr_m:Array = ["img/men1-1.png", "img/men1-2.png", "img/men1-3.png", "img/men1-4.png"]; //создаем масив, который хранит путь к картинкам мужского пола
      private var pic_arr_w:Array = ["img/women2-1.png", "img/women2-2.png", "img/women2-3.png", "img/women2-4.png"]; //создаем масив, который хранит путь к картинкам женского пола
      private var i:int = 0; //числовая переменная равна 0
      [Bindable] //сам еще не знаю для чего нужна это строка, но без нее выдает ошибку
      private var gr:String = "1"; //текстовая переменная равна 1
      [Bindable]
      private var patch:String; //текстовая переменная
      /* Функция создания чара, отправляет данные которые ввел пользователь */
      private function onCreateChar():void {
       createRequest.send();
      }
      /* Функция выбора RadioButton мужского пола */
      private function iMen():void {
       avatar.load(pic_arr_m[0]); //отображает картинку, которая равна 0 в масиве, тоесть первую картинку
       gr = "1"; //переменная равна 1
       simpleLabel.text = "1-1"; //тег <mx:Text> который имеет имя simpleLabel равен "1-1"
      }
      /* Функция выбора RadioButton женского пола */
      private function iWomen():void {
       avatar.load(pic_arr_w[0]); //отображает картинку, которая равна 0 в масиве, тоесть первую картинку
       gr = "2"; //переменная равна 1
       simpleLabel.text = "2-1"; //тег <mx:Text> который имеет имя simpleLabel равен "2-1"
      }
      /* Функция нажатия кнопки "Пред." */
      private function onLeft():void {
       if (men.selected == true){ //если выбран пол "Мужской", то
        avatar.load(pic_arr_m[i]); //картинка равняеться переменной "i"
        i--; //переменная уменьшаеться на 1
        if (i == -1) { //если переменная "i" равна -1, то
         i = 3; //"i" равна 3
        }
       if (i == 0) { //если "i" равна 0, то
        simpleLabel.text = "1-1"; //тег <mx:Text> который имеет имя simpleLabel равен "1-1"
        avatar.load(pic_arr_m[0]); //будет отображать первый аватар
        patch = "img/man1-1.swf"; //путь к аватару
       }
       if (i == 1) {
        simpleLabel.text = "1-2";
        avatar.load(pic_arr_m[1]);
        patch = "img/man1-2.swf";
       }
       if (i == 2) {
        simpleLabel.text = "1-3";
        avatar.load(pic_arr_m[2]);
        patch = "img/man1-3.swf";
       }
       if (i == 3) {
        simpleLabel.text = "1-4";
        avatar.load(pic_arr_m[3]);
        patch = "img/man1-4.swf";
       }
       }
        if (women.selected == true) { //если выбран пол "Женский", то
         avatar.load(pic_arr_w[i]); //картинка равняеться переменной "i"
         i--; //переменная уменьшаеться на 1
         if (i == -1) { //если переменная "i" равна -1, то
          i = 3; //"i" равна 3
         }
       if (i == 0) {
        simpleLabel.text = "2-1";
        avatar.load(pic_arr_w[0]);
        patch = "img/woman2-1.swf";
       }
       if (i == 1) {
        simpleLabel.text = "2-2";
        avatar.load(pic_arr_w[1]);
        patch = "img/woman2-2.swf";
       }
       if (i == 2) {
        simpleLabel.text = "2-3";
        avatar.load(pic_arr_w[2]);
        patch = "img/woman2-3.swf";
       }
       if (i == 3) {
        simpleLabel.text = "2-4";
        avatar.load(pic_arr_w[3]);
        patch = "img/woman2-4.swf";
       }       
        }
      }
      /* Функция нажатия кнопки "След." */
      private function onRight():void {
       if (men.selected == true){ //если выбран пол "Мужской", то
        avatar.load(pic_arr_m[i]); //картинка равняеться переменной "i"
        i++; //переменная увеличиваеться на 1
        if (i == 4) { //если переменная "i" равна 4, то
         i = 0; //"i" равна 0
        }
       if (i == 0) {
        simpleLabel.text = "1-1";
        avatar.load(pic_arr_m[0]);
        patch = "img/man1-1.swf";
       }
       if (i == 1) {
        simpleLabel.text = "1-2";
        avatar.load(pic_arr_m[1]);
        patch = "img/man1-2.swf";
       }
       if (i == 2) {
        simpleLabel.text = "1-3";
        avatar.load(pic_arr_m[2]);
        patch = "img/man1-3.swf";
       }
       if (i == 3) {
        simpleLabel.text = "1-4";
        avatar.load(pic_arr_m[3]);
        patch = "img/man1-4.swf";
       }
       }
       if (women.selected == true) { //если выбран пол "Женский", то
        avatar.load(pic_arr_w[i]); //картинка равняеться переменной "i"
        i++; //переменная увеличиваеться на 1
        if (i == 4) { //если переменная "i" равна 4, то
         i = 0; //"i" равна 0
        }
        if (i == 0) {
        simpleLabel.text = "2-1";
        avatar.load(pic_arr_w[0]);
        patch = "img/woman2-1.swf";
       }
       if (i == 1) {
        simpleLabel.text = "2-2";
        avatar.load(pic_arr_w[1]);
        patch = "img/woman2-2.swf";
       }
       if (i == 2) {
        simpleLabel.text = "2-3";
        avatar.load(pic_arr_w[2]);
        patch = "img/woman2-3.swf";
       }
       if (i == 3) {
        simpleLabel.text = "2-4";
        avatar.load(pic_arr_w[3]);
        patch = "img/woman2-4.swf";
       }      
       }     
      }
          
      /* Функция определения результата */
      private function onResult(e:ResultEvent):void {
        if (int(e.result) > 0) { //если результат больше 0, тоесть существует, то
         //var link:URLRequest = new URLRequest("http://localhost/game.php"); //создаем ссылку
         //navigateToURL(link, "_self"); //переадресовываем по ссылке
        } else { //в другом случае, если результат не существует, то
         switch (int(String(e.result))) { //считываем данные
          case -1 : //если данные равны "-1", то выводим всплывающее окно
           Alert.show("Неудалось подключиться к базе данных. Попробуйте позже", "Ошибка!");
           break;
          case -2 : //если данные равны "-2", то выводим всплывающее окно
           Alert.show("Такое имя уже существует", "Ошибка!");
           break;
          case -3 : //если данные равны "-3", то выводим всплывающее окно
           Alert.show("Вы не ввели имя", "Ошибка!");
           break;
          case -4: //если данные равны "-4", то выводим всплывающее окно
           Alert.show("Недопустимые символы в имени", "Ошибка!");
           break;
         }
        }
      }
     ]]></mx:Script>

Я здесь все прокоментировал, думаю вопросов не возникнет, а если возникнут, то прошу — задавайте =)
Теперь нам нужно создать обработчик, который определяет какие данные нужно отослать в php скрипт. Такой обработчик называеться HTTPService. У нас он будет выглядеть так:

Код:
 <mx:HTTPService id="createRequest" useProxy="false" method="POST" result="onResult(event)" url="reg_comp.php">
            <mx:request>
                <mx:nameChar>{nameChar.text}</mx:nameChar>
                <mx:avaIm>{simpleLabel.text}</mx:avaIm>
                <mx:gr>{gr.toString()}</mx:gr>
     <mx:patch>{patch.toString()}</mx:patch>
            </mx:request>
        </mx:HTTPService>

Он отсылает текст, который мы введем в поле "Имени чара" в php скрипт reg_comp.php, который обрабатывает полученные данные и записывает имя чара, если такое уже существует, то выводит соответствующую ошибку. Также отправляет какой аватар выбран.
Полный код нашего Main.mxml:

Код:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application layout="absolute" width="400" height="300" xmlns:mx="http://www.adobe.com/2006/mxml">
        <mx:Script><![CDATA[
      import mx.rpc.events.ResultEvent; //при написании кода вручную, эти импорты появляються сами, первый нужен для
      import mx.controls.Alert; //определения результата, второй для вывода всплывающих окон
          
      private var pic_arr_m:Array = ["img/men1-1.png", "img/men1-2.png", "img/men1-3.png", "img/men1-4.png"]; //создаем масив, который хранит путь к картинкам мужского пола
      private var pic_arr_w:Array = ["img/women2-1.png", "img/women2-2.png", "img/women2-3.png", "img/women2-4.png"]; //создаем масив, который хранит путь к картинкам женского пола
      private var i:int = 0; //числовая переменная равна 0
      [Bindable] //сам еще не знаю для чего нужна это строка, но без нее выдает ошибку
      private var gr:String = "1"; //текстовая переменная равна 1
      [Bindable]
      private var patch:String; //текстовая переменная
      /* Функция создания чара, отправляет данные которые ввел пользователь */
      private function onCreateChar():void {
       createRequest.send();
      }
      /* Функция выбора RadioButton мужского пола */
      private function iMen():void {
       avatar.load(pic_arr_m[0]); //отображает картинку, которая равна 0 в масиве, тоесть первую картинку
       gr = "1"; //переменная равна 1
       simpleLabel.text = "1-1"; //тег <mx:Text> который имеет имя simpleLabel равен "1-1"
      }
      /* Функция выбора RadioButton женского пола */
      private function iWomen():void {
       avatar.load(pic_arr_w[0]); //отображает картинку, которая равна 0 в масиве, тоесть первую картинку
       gr = "2"; //переменная равна 1
       simpleLabel.text = "2-1"; //тег <mx:Text> который имеет имя simpleLabel равен "2-1"
      }
      /* Функция нажатия кнопки "Пред." */
      private function onLeft():void {
       if (men.selected == true){ //если выбран пол "Мужской", то
        avatar.load(pic_arr_m[i]); //картинка равняеться переменной "i"
        i--; //переменная уменьшаеться на 1
        if (i == -1) { //если переменная "i" равна -1, то
         i = 3; //"i" равна 3
        }
       if (i == 0) { //если "i" равна 0, то
        simpleLabel.text = "1-1"; //тег <mx:Text> который имеет имя simpleLabel равен "1-1"
        avatar.load(pic_arr_m[0]); //будет отображать первый аватар
        patch = "img/man1-1.swf"; //путь к аватару
       }
       if (i == 1) {
        simpleLabel.text = "1-2";
        avatar.load(pic_arr_m[1]);
        patch = "img/man1-2.swf";
       }
       if (i == 2) {
        simpleLabel.text = "1-3";
        avatar.load(pic_arr_m[2]);
        patch = "img/man1-3.swf";
       }
       if (i == 3) {
        simpleLabel.text = "1-4";
        avatar.load(pic_arr_m[3]);
        patch = "img/man1-4.swf";
       }
       }
        if (women.selected == true) { //если выбран пол "Женский", то
         avatar.load(pic_arr_w[i]); //картинка равняеться переменной "i"
         i--; //переменная уменьшаеться на 1
         if (i == -1) { //если переменная "i" равна -1, то
          i = 3; //"i" равна 3
         }
       if (i == 0) {
        simpleLabel.text = "2-1";
        avatar.load(pic_arr_w[0]);
        patch = "img/woman2-1.swf";
       }
       if (i == 1) {
        simpleLabel.text = "2-2";
        avatar.load(pic_arr_w[1]);
        patch = "img/woman2-2.swf";
       }
       if (i == 2) {
        simpleLabel.text = "2-3";
        avatar.load(pic_arr_w[2]);
        patch = "img/woman2-3.swf";
       }
       if (i == 3) {
        simpleLabel.text = "2-4";
        avatar.load(pic_arr_w[3]);
        patch = "img/woman2-4.swf";
       }       
        }
      }
      /* Функция нажатия кнопки "След." */
      private function onRight():void {
       if (men.selected == true){ //если выбран пол "Мужской", то
        avatar.load(pic_arr_m[i]); //картинка равняеться переменной "i"
        i++; //переменная увеличиваеться на 1
        if (i == 4) { //если переменная "i" равна 4, то
         i = 0; //"i" равна 0
        }
       if (i == 0) {
        simpleLabel.text = "1-1";
        avatar.load(pic_arr_m[0]);
        patch = "img/man1-1.swf";
       }
       if (i == 1) {
        simpleLabel.text = "1-2";
        avatar.load(pic_arr_m[1]);
        patch = "img/man1-2.swf";
       }
       if (i == 2) {
        simpleLabel.text = "1-3";
        avatar.load(pic_arr_m[2]);
        patch = "img/man1-3.swf";
       }
       if (i == 3) {
        simpleLabel.text = "1-4";
        avatar.load(pic_arr_m[3]);
        patch = "img/man1-4.swf";
       }
       }
       if (women.selected == true) { //если выбран пол "Женский", то
        avatar.load(pic_arr_w[i]); //картинка равняеться переменной "i"
        i++; //переменная увеличиваеться на 1
        if (i == 4) { //если переменная "i" равна 4, то
         i = 0; //"i" равна 0
        }
        if (i == 0) {
        simpleLabel.text = "2-1";
        avatar.load(pic_arr_w[0]);
        patch = "img/woman2-1.swf";
       }
       if (i == 1) {
        simpleLabel.text = "2-2";
        avatar.load(pic_arr_w[1]);
        patch = "img/woman2-2.swf";
       }
       if (i == 2) {
        simpleLabel.text = "2-3";
        avatar.load(pic_arr_w[2]);
        patch = "img/woman2-3.swf";
       }
       if (i == 3) {
        simpleLabel.text = "2-4";
        avatar.load(pic_arr_w[3]);
        patch = "img/woman2-4.swf";
       }      
       }     
      }
          
      /* Функция определения результата */
      private function onResult(e:ResultEvent):void {
        if (int(e.result) > 0) { //если результат больше 0, тоесть существует, то
         //var link:URLRequest = new URLRequest("http://localhost/game.php"); //создаем ссылку
         //navigateToURL(link, "_self"); //переадресовываем по ссылке
        } else { //в другом случае, если результат не существует, то
         switch (int(String(e.result))) { //считываем данные
          case -1 : //если данные равны "-1", то выводим всплывающее окно
           Alert.show("Неудалось подключиться к базе данных. Попробуйте позже", "Ошибка!");
           break;
          case -2 : //если данные равны "-2", то выводим всплывающее окно
           Alert.show("Такое имя уже существует", "Ошибка!");
           break;
          case -3 : //если данные равны "-3", то выводим всплывающее окно
           Alert.show("Вы не ввели имя", "Ошибка!");
           break;
          case -4: //если данные равны "-4", то выводим всплывающее окно
           Alert.show("Недопустимые символы в имени", "Ошибка!");
           break;
         }
        }
      }
     ]]></mx:Script>
        <mx:HTTPService id="createRequest" useProxy="false" method="POST" result="onResult(event)" url="reg_comp.php">
            <mx:request>
                <mx:nameChar>{nameChar.text}</mx:nameChar>
                <mx:avaIm>{simpleLabel.text}</mx:avaIm>
                <mx:gr>{gr.toString()}</mx:gr>
       <mx:patch>{patch.toString()}</mx:patch>
            </mx:request>
        </mx:HTTPService>
        <mx:Label id="simpleLabel" x="168" y="64" width="36" height="18"/>
        <mx:Button label="Далее" click="onCreateChar()" x="140" y="252" width="100" height="22"/>
        <mx:TextInput id="nameChar" textAlign="center" x="111" y="222" width="160" height="22"/>
        <mx:Image id="avatar" source="img/men1-1.png" x="171" y="93" width="33" height="33"/>
        <mx:RadioButton id="men" label="Мужской" groupName="gander" selected="true" click="iMen()" x="19" y="41" width="73" height="22"/>
        <mx:RadioButton id="women" label="Женский" groupName="gander" click="iWomen()" x="19" y="67" width="74" height="22"/>
        <mx:Label text="Имя" x="176" y="198" width="36" height="18"/>
        <mx:Button label="Пред." click="onLeft()" x="78" y="141" width="100" height="22"/>
        <mx:Button label="След." click="onRight()" x="200" y="141" width="100" height="22"/>
</mx:Application>

После того как мы написали нашу флешку, пришло время ее создать, для этого жмем синий трехугольник на панели инструментов картинка и ждем когда FD скомпилирует нам нашу флешку. После этого заливаем нашу флешку к нам на сервер в папку htdocs. Также копируем туда эти картинки вместе с папкой:
Архив с картинками

Теперь нам нужно отобразить данную флешку в браузере, для этого создаем goreg.php и пишем туда такой код:

Код:
<?php
session_start(); //запускаем сессию

include "conf.php"; //инклюдим  conf.php
/* коннектимся к БД */
$data = mysql_connect($base_name, $base_user, $base_pass);
if(!mysql_select_db($db_name,$data)){
         print "
";
         echo mysql_error();
         die();
}
/* Узнаем ip адрес юзера */
$ip = $_SERVER['REMOTE_ADDR'];
if ($ip==$_SESSION['ip']) { //если ip равен ip записаному в сессию, то выводим флешку
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ru"     
xml:lang="ru">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="description" content="Браузерная Флеш игра BTG" />     
<meta name="keywords" content="игра, флеш, браузер, BTG, игроки." />     
<link rel="stylesheet" href="style.css" type="text/css" />
<title>Евилопия - бессплатная онлайн Flash игра</title>
</head>
<body>     
<div id="goreg">
     <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="400" height="300" id="reg" align="middle">
     <param name="allowScriptAccess" value="sameDomain" />
     <param name="allowFullScreen" value="false" />
     <param name="movie" value="CreateChar.swf" />
      <param name="quality" value="high" />
      <param name="bgcolor" value="#000000" />
      <embed src="CreateChar.swf" quality="high" bgcolor="#000000" width="400" height="300" name="reg" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" />
     </object>
</div>
</body>
</html>
<?php
}else{ //в другом случае переадресовываем на главную страницу
echo "<script>location.href='index.php';</script>";
}
?>

Если мы попробуем перейти по адресу http://localhost/goreg.php нас перекинет на главную страницу, так и должно быть, если мы пройдем регистрацию, то окажемся на нашей страничке с флешкой.
Теперь приступим к написанию нашего файла reg_comp.php, который будет обрабатывать данные, которые будут поступать с флешки:

Код:
<?php
session_start(); //запускаем сессию

include "conf.php"; //инклюдим  conf.php

$nameChar = trim($_POST['nameChar']); /* переменная равна данным которые пришли от флешки, а именно — имя чара */
$vid = $_POST['avaIm']; /* получаем номер аватарки */
$gander = $_POST['gr']; /* узнаем какой пол выбран */
$patch = $_POST['patch']; /* получаем путь к аватаркам */
/* Проверяем заполнено ли поле имени, если нет, то выводим ошибку */
if ($nameChar == '') {
      echo "-3";
      exit;
}
/* Проверяем что б имя состояло только с английских букв */
if (!preg_match("/^[a-zA-Z]+$/",$nameChar)) {
      echo "-4";
      exit;
}
/* Подключаемся к БД, если не удалось, то выводим ошибку */
$data = mysql_connect($base_name, $base_user, $base_pass);
if(!$data){
         echo "-1";
         exit;
}
/* Проверяем есть ли юзер с данным именем, если есть, то выводим ошибку */
mysql_select_db($db_name);
$query = "SELECT * FROM users WHERE name='".$nameChar."'";
$result = mysql_query($query);
$num_results = mysql_num_rows($result);
if ($num_results > 0) {
     echo "-2";
     exit;
}
/* Записываем имя чара */
$result = mysql_query("UPDATE users SET name='".$nameChar."' WHERE email='".$_SESSION['user']."'");
/* Записываем данные аватарки в таблицу avatar */
$ava = mysql_query("INSERT INTO avatar (gander, vid, path) VALUES ('".$gander."', '".$vid."', '".$patch."')");
?>

Урок писался неделю, так как я только начал изучение Flex, поэтому долго разбирался. Я б сказал что урок полный, но в нем есть одна неувязочка, которую я до сих пор не могу решить. Эта неувязка состоит в том, что когда пользователь ввел данные, они записались, но его никуда не переадресовывает. Думаю в ближайшие дни исправлю это и тогда урок будет полностью закончен.
Жду вопросов, а также критику и советы.

Исходник- Линк

Автор статьи: Assasin

ссылка на источник
 
Статус
В этой теме нельзя размещать новые ответы.

Похожие темы

Сверху