Урок по созданию браузерной игры № 3
| |
Assasin | Дата: Воскресенье, 18 Октября 2009, 18:50 | Сообщение # 1 |
web-coder
Сейчас нет на сайте
| Извините за долгое отсутствие уроков, очень мало свободного времени остаеться, но ничего. Приступаем к нашему третьему уроку. В этом уроке мы сделаем II часть регистрации, а именно — создание персонажа. Я сильно не заморачивался и сделал по простому, вот такой результат у нас получиться (картинка). И еще одно, так как флешки, которые мы будем создавать, читают только utf-8 кодировку, то нам нужно немного изменить нашу БД. Code 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, e xp_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/'); А также во всех php файлах заменить эту строку: Code <meta http-equiv="content-type" content="text/html; charset=windows-1251" /> на эту: Code <meta http-equiv="content-type" content="text/html; charset=utf-8" /> С помощью этой замены мы поменяем кодировку страниц на utf-8. Также в PSPad'e на строке меню нажмите Формат->UTF-8 и эту операцию проделайте с каждым файлом php. Теперь приступим к созданию нашей регистрации. Мы будем её делать во FlashDevelop. Запускаем его и видим начальное окно, в котором нам предлагают создать AS3, AS2, HAXE проекты. Мы будем работать с AS3, а именно с Flex'ом. Почему с ним? Потому что я начал изучение данной среды разработки и мне она понравилась . Выбираем 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. Видим у нас изменился код, все те компоненты, которые мы добавили отобразились и здесь. Нам остаеться только их правильно разместить и дать имена. Поэтому изменяем координаты компонентов как нам удобно, я изменил так: Code <?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 — путь к картинке С этим справились, теперь нам нужно указать какой по размерам будет наша флешка, для этого заменяем тег: Code <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> на Code <mx:Application layout="absolute" width="400" height="300" xmlns:mx="http://www.adobe.com/2006/mxml"> Мы задали имя слоя - absolute и указали высоту и ширину нашей будущей флешки. Теперь приступаем к написанию логической части. Вся логика будет заключаться в теге , поэтому после тега: Code <mx:Application layout="absolute" width="400" height="300" xmlns:mx="http://www.adobe.com/2006/mxml"> пишем: Code <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. У нас он будет выглядеть так: Code <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>
|
|
| |
Assasin | Дата: Воскресенье, 18 Октября 2009, 18:50 | Сообщение # 2 |
web-coder
Сейчас нет на сайте
| Он отсылает текст, который мы введем в поле "Имени чара" в php скрипт reg_comp.php, который обрабатывает полученные данные и записывает имя чара, если такое уже существует, то выводит соответствующую ошибку. Также отправляет какой аватар выбран. Полный код нашего Main.mxml: Code <?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 и пишем туда такой код: Code <?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 "<BR>"; 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, который будет обрабатывать данные, которые будут поступать с флешки: Code <?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, поэтому долго разбирался. Я б сказал что урок полный, но в нем есть одна неувязочка, которую я до сих пор не могу решить. Эта неувязка состоит в том, что когда пользователь ввел данные, они записались, но его никуда не переадресовывает. Думаю в ближайшие дни исправлю это и тогда урок будет полностью закончен. Жду вопросов, а также критику и советы Исходник - линк При копировании материала ссылка на источник обязательна!
|
|
| |
MrDmitriy65 | Дата: Вторник, 20 Октября 2009, 17:08 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Не пробовал использовать заголовок протокола HTTP "Location" (PHP)?
Сообщение отредактировал MrDmitriy65 - Вторник, 20 Октября 2009, 17:08 |
|
| |
Assasin | Дата: Вторник, 20 Октября 2009, 20:51 | Сообщение # 4 |
web-coder
Сейчас нет на сайте
| Можно и так
|
|
| |
Weiss | Дата: Четверг, 22 Октября 2009, 19:33 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| А у меня FD выдает ошибки... Running process: C:\Program Files\FlashDevelop\Tools\fdbuild\fdbuild.exe "C:\good\1\CreateChar.as3proj" -ipc 71ecde00-329b-4666-95c5-3077efa23a66 -compiler "C:\Program Files\FlashDevelop\flex" -library "C:\Program Files\FlashDevelop\Library" -cp "C:\Program Files\FlashDevelop\flex\frameworks\projects\framework\src" Using the Flex Compiler Shell. Building CreateChar mxmlc -load-config+=obj\CreateCharConfig.xml -debug=true -incremental=true -benchmark=false -o obj\CreateChar633918325770625000 INITIALIZING: ? Incremental compile of 0 java.lang.UnsupportedClassVersionError: flex2/tools/Fcsh (Unsupported major.minor version 49.0) at java.lang.ClassLoader.defineClass0(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$1(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) Exception in thread "main" Build halted with errors (fcsh). Done (1) Можите подсказать в чоч проблема?
|
|
| |
Assasin | Дата: Пятница, 23 Октября 2009, 10:10 | Сообщение # 6 |
web-coder
Сейчас нет на сайте
| Ты настраивал все как здесь написано? http://gcup.ru/forum/48-1963-1 Если да, то тогда установи JRE 6 Update 16
|
|
| |
Weiss | Дата: Пятница, 23 Октября 2009, 12:16 | Сообщение # 7 |
был не раз
Сейчас нет на сайте
| Такс скомпилилась. Но когда открываю она у меня просто пуская
|
|
| |
Assasin | Дата: Пятница, 23 Октября 2009, 14:23 | Сообщение # 8 |
web-coder
Сейчас нет на сайте
| Пришли скрин того что скомпилилось и код который ты написал.
|
|
| |
Weiss | Дата: Пятница, 23 Октября 2009, 16:11 | Сообщение # 9 |
был не раз
Сейчас нет на сайте
| Code <?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> Вот что дает Компилятор Code Running process: C:\Program Files\FlashDevelop\Tools\fdbuild\fdbuild.exe "C:\good\CreateChar.as3proj" -ipc cc22e3db-1ae9-441b-a941-a8631717502f -compiler "C:\Program Files\FlashDevelop\flex" -library "C:\Program Files\FlashDevelop\Library" -cp "C:\Program Files\FlashDevelop\flex\frameworks\projects\framework\src" Using the Flex Compiler Shell. Building CreateChar mxmlc -load-config+=obj\CreateCharConfig.xml -debug=true -incremental=true -benchmark=false -o obj\CreateChar633918959286875000 INITIALIZING: Adobe Flex Compiler SHell (fcsh) Starting new compile. Loading configuration file C:\Program Files\FlashDevelop\flex\frameworks\flex-config.xml Loading configuration file C:\good\obj\CreateCharConfig.xml obj\CreateChar633918959286875000 (670103 bytes) (fcsh)Build succeeded Done (0) Вот что браузер дает при открытитт goreg.php картинка а если открыть флеш плеером то ваше пустое окно...
Сообщение отредактировал Weiss - Пятница, 23 Октября 2009, 16:12 |
|
| |
Assasin | Дата: Пятница, 23 Октября 2009, 16:29 | Сообщение # 10 |
web-coder
Сейчас нет на сайте
| Я скомпилил все нормально, проверь правильно ли указаны пути для Флекса в Tools->Global Classpatch Вот на всякий случай выложил мою флешку
|
|
| |
kALIFE | Дата: Воскресенье, 25 Октября 2009, 02:48 | Сообщение # 11 |
был не раз
Сейчас нет на сайте
| не работает кнопки design i source view клиент последняя папка sdk тож есть вот это прикол переустановка тож не работает
|
|
| |
Assasin | Дата: Воскресенье, 25 Октября 2009, 13:23 | Сообщение # 12 |
web-coder
Сейчас нет на сайте
| А FlexDesignView установлен?
|
|
| |
kALIFE | Дата: Воскресенье, 25 Октября 2009, 13:53 | Сообщение # 13 |
был не раз
Сейчас нет на сайте
| А FlexDesignView установлен? Установлен но кнопки не работают если не установишь FlexDesignView этих кнопок вообше не будет..
|
|
| |
Assasin | Дата: Воскресенье, 25 Октября 2009, 15:12 | Сообщение # 14 |
web-coder
Сейчас нет на сайте
| Не заню, не сталкивался с такой проблемой. Вот только что по новому поставил ФД и все нормально работает.
|
|
| |
Assasin | Дата: Воскресенье, 25 Октября 2009, 15:27 | Сообщение # 15 |
web-coder
Сейчас нет на сайте
| Поспешил я, все таки ошибки есть, поэтому устанавливайте этот СДК
|
|
| |
777OLEKSEY777 | Дата: Четверг, 29 Октября 2009, 12:23 | Сообщение # 16 |
Руководитель и 3D дизайнер в IlluGameTea Studio
Сейчас нет на сайте
| FlashDevelop выдает такую ошибку:
|
|
| |
777OLEKSEY777 | Дата: Четверг, 29 Октября 2009, 18:51 | Сообщение # 17 |
Руководитель и 3D дизайнер в IlluGameTea Studio
Сейчас нет на сайте
| Или выложите кто-нибудь уже собранные флеш элементы
|
|
| |
Jekel | Дата: Вторник, 03 Ноября 2009, 17:18 | Сообщение # 18 |
уже был
Сейчас нет на сайте
| Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at D:\VertrigoServ\www\reg.php:2) in D:\VertrigoServ\www\reg.php on line 3 Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at D:\VertrigoServ\www\reg.php:2) in D:\VertrigoServ\www\reg.php on line 3 Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\VertrigoServ\www\reg.php on line 17 Invalid query: Table '123.players' doesn't exist (((( что такое?
|
|
| |
Assasin | Дата: Вторник, 03 Ноября 2009, 20:00 | Сообщение # 19 |
web-coder
Сейчас нет на сайте
| Код выложите - посмотрим. Quote (Jekel) Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\VertrigoServ\www\reg.php on line 17 Invalid query: Table '123.players' doesn't exist Вы не создали таблицу 123.players, только не пойму зачем цифры перед названием, вы ничего не изменяли в настройках БД? Или возможно в самом коде допустили ошибку.
|
|
| |
Evil2007 | Дата: Вторник, 17 Ноября 2009, 20:23 | Сообщение # 20 |
уже был
Сейчас нет на сайте
| Можете выложить не скомпилированные исходники или на емайл скинуть
|
|
| |
|