Урок по созданию браузерной игры № 6
|
|
Assasin | Дата: Понедельник, 02 Ноября 2009, 16:34 | Сообщение # 1 |
web-coder
Сейчас нет на сайте
| В этом уроке я опишу как создать профиль для чара, а также как просмотреть характеристика любого игрока. Для начала создадим меню. Открываем FlashDevelop и создаем новый mxml файл и называем его menu.mxml. Записываем в него такие строчки: Code <?xml version="1.0" encoding="utf-8"?> <mx:Application layout="absolute" width="392" height="22" xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:Script><![CDATA[ import flash.net.URLRequest; import mx.managers.PopUpManager; /* Функция для отображения всплывающего окна, в котором находиться информация о вашем чаре */ public function prof():void { var popup:profil = profil(PopUpManager.createPopUp(this, profil, false)); popup.x = 250; popup.y = 100; popup.title = "Профиль"; } /* Функция которая переадресовывает на php скрипт? Который обрабатывает выход игрока */ private function logout():void { var logoutLink:URLRequest = new URLRequest("logout.php"); navigateToURL(logoutLink, "_self"); } ]]></mx:Script> <mx:Button click="prof()" label="Профиль" x="0" y="0" width="80" height="22"/> <mx:Button label="Инвентарь" x="80" y="0" width="90" height="22"/> <mx:Button label="Журнал квестов" x="170" y="0" width="123" height="22"/> <mx:Button click="logout()" label="Выход" x="292" y="0" width="100" height="22"/> </mx:Application> Изменим немного файл GameWindow.mxml, а именно заменим строку в которой мы загружаем флешку с менюшкой на эту: Code <mx:SWFLoader source="menu.swf" x="200" y="0" width="400" height="22"/> В ней я только подкоректировал расположение менюшки. Приступаем к написанию всплывающего окна в которм отображаються данные игрока. Создаем файл profil.mxml и записываем в него следующее: Code <?xml version="1.0" encoding="utf-8"?> <mx:TitleWindow showCloseButton="true" layout="absolute" width="250" height="300" close="handleClose(event)" creationComplete="profileComplete()" xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:Script><![CDATA[ import mx.managers.PopUpManager; import mx.events.CloseEvent; import mx.rpc.events.ResultEvent; private var dataXML:XML = new XML; //данные из XML файла /* Функция для отправки данных в скрипт */ public function profileComplete():void { profileChar.send(); } /* Отображения данных */ public function onResult(e:ResultEvent):void { //обработка результатов и ошибок dataXML = XML(e.result); avatar_img.load(String(dataXML.avatar[0])); nameChar.text = dataXML.name[0]; atk.text = dataXML.atk[0]; def.text = dataXML.def[0]; lov.text = dataXML.lov[0]; life.text = dataXML.life[0]; lvl.text = dataXML.lvl[0]; exp.text = dataXML.exp[0]; } /* Функция закрытия всплывающего окна */ private function handleClose(evt:CloseEvent):void { PopUpManager.removePopUp(this);
} ]]></mx:Script> <mx:HTTPService id="profileChar" useProxy="false" method="POST" result="onResult(event)" resultFormat="xml" url="profil.php"/> <mx:Label id="nameChar" text="1" x="86" y="11" width="53" height="18"/> <mx:Label id="atk" text="2" x="149" y="41" width="53" height="18"/> <mx:Label id="def" text="3" x="149" y="57" width="53" height="18"/> <mx:Label id="lov" text="4" x="149" y="75" width="53" height="18"/> <mx:Label id="life" text="5" x="150" y="93" width="53" height="18"/> <mx:Label id="lvl" text="6" x="22" y="29" width="53" height="18"/> <mx:Label id="exp" text="7" x="149" y="111" width="53" height="18"/> <mx:Image id="avatar_img" x="11" y="54" width="120" height="200"/> </mx:TitleWindow> Теперь приступим к созданию файла, который будет отображать характеристики вашего персонажа. Как видно из предыдущего кода данный файл будет называться profil.php: Code <?php session_start();
include "conf.php";
$data = mysql_connect($base_name, $base_user, $base_pass); mysql_select_db($db_name);
$query = mysql_query("SELECT * FROM users WHERE name='".$_SESSION['name']."'"); $row = mysql_fetch_array($query); ### Запускаем XML и выводим характеристика юзера ### echo "<?xml version='1.0'?>"; echo "<char>";
echo '<name>'.$row['name'].'</name>';
$query2 = mysql_query("SELECT * FROM avatar WHERE id_ava='".$row['id_user']."'"); $row2 = mysql_fetch_array($query2);
echo '<avatar>img/'.$row2['vid'].'.png</avatar>'; echo '<atk>'.$row['atk'].'</atk>'; echo '<def>'.$row['def'].'</def>'; echo '<lov>'.$row['lov'].'</lov>'; echo '<life>'.$row['life'].'</life>'; echo '<lvl>'.$row['lvl'].'</lvl>'; echo '<exp>'.$row['exp'].'</exp>';
echo '</char>'; ?> Теперь делаем php скрипт, который обрабатывает выход игрока, назовем его logout.php: Code <?php session_start();
include "conf.php";
$data = mysql_connect($base_name, $base_user, $base_pass); if(!$data){ echo "<BR>"; echo mysql_error(); die(); } /* Ставим игроку в таблице users в столбце online цыфру 0, что означает что игрок оффлайн */ mysql_select_db($db_name); mysql_query("UPDATE users SET online='0' WHERE email='".$_SESSION['user']."'"); /* Уничтожаем все сессии игрока */ if (isset($_SESSION['user']) || isset ($_SESSION['ip']) || isset($_SESSION['name'])){ unset($_SESSION['user']); unset($_SESSION['ip']); unset($_SESSION['name']); } /* Переадресовываем на главную */ echo "<script>location.href='index.php';</script>"; ?> И последнее что нам осталось сделать это вывод информации о любом пользователя если нажать на значек (і) в чате возле имени игрока. Назовем данный скрипт info.php, я сильно не мудрил и сделал в виде простой таблицы, вы можете оформить как захотите: Code <?php include "conf.php";
$data = mysql_connect($base_name, $base_user, $base_pass); mysql_select_db($db_name); /* Описание ошибки */ $error = "<title>Ошибка!</title> <body bgcolor=EBEDEC> <font color=red><b>Ошибка:</b></font><br>Персонаж с таким логином или ID не найден!"; /* Проверяем существует ли переменная nameChar и id который будет равняться ей */ if (isset($_POST['nameChar']) && !empty($_POST['nameChar'])){ $login = mysql_escape_string($_POST['nameChar']); $where = " WHERE users.name='".addslashes($login)."'"; } elseif (is_numeric($_SERVER['QUERY_STRING'])) { $id = mysql_escape_string($_SERVER['QUERY_STRING']); $where = " WHERE users.id_user=".addslashes($id); } else // в другом случае выводим ошибку { die($error); } /* Выделяем игрока */ $query = mysql_query("SELECT * FROM users".$where."");
$info = mysql_fetch_array($query); $row = mysql_fetch_array(mysql_query("SELECT * FROM avatar WHERE id_ava='".$info['id_user']."'")); //узнаем аватарку игрока ?> <html> <head> <title>Информация о персонаже - <?=$info['name']?></title> <body> <table align="center" border="0" width="243" height="280" cellspacing="0" cellpadding="0" bgcolor="#BFBFBF" bordercolor="#666699"> <tr> <td> <table width="243"> <tr> <td align="center"><b><?=$info['name']?><b></td> </tr> </table> </td> </tr> <tr> <td> <table> <tr> <td align="center"><?=$info['lvl']?></td> </tr> <tr> <td width="153" height="200" rowspan="5"><img src="img/<?=$row['vid']?>.png"></td> <td width="90" align="center">Атака: <?=$info['atk']?></td> </tr> <tr> <td width="90" align="center">Защита: <?=$info['def']?></td> </tr> <tr> <td width="90" align="center">Ловкость: <?=$info['lov']?></td> </tr> <tr> <td width="90" align="center">Жизни: <?=$info['life']?></td> </tr> <tr> <td width="90" align="center" valign="top">Опыт: <?=$info['exp']?></td> </tr> </table> </td> </tr> </table> </head> </body> </html> Вот и 6 урок подошел к концу, сожалею что долго не писал, так как не было интернета Код как видите я комментировал не весь, так как в предыдущих уроках описыал об этом, надеюсь вы не забыли. Так же если возникнут вопросы — задавайте. Данные картинки разархивируйте в папку img - картинки При копировании материала ссылка на источник обязательна!
Сообщение отредактировал Assasin - Понедельник, 02 Ноября 2009, 19:09 |
|
| |
Master_Chief | Дата: Понедельник, 02 Ноября 2009, 17:46 | Сообщение # 2 |
Shoot Space creator
Сейчас нет на сайте
| Assasin, раз уж затронулась тема ссылки, то стоило указать что запросы к базе с моего движка
|
|
| |
Morgan | Дата: Суббота, 21 Ноября 2009, 16:41 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Все норм)) Вот только проблемма с картинками. Не отображаются
|
|
| |
Assasin | Дата: Суббота, 21 Ноября 2009, 21:37 | Сообщение # 4 |
web-coder
Сейчас нет на сайте
| Возможно путь картинок не правельный, должен быть htdocs/img/название_картинки.png
|
|
| |
Morgan | Дата: Воскресенье, 22 Ноября 2009, 00:36 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| В каком иенно файле указывается путь к картинкам?
|
|
| |
Assasin | Дата: Воскресенье, 22 Ноября 2009, 19:06 | Сообщение # 6 |
web-coder
Сейчас нет на сайте
| В profil.php, вот тут: Code echo '<avatar>img/'.$row2['vid'].'.png</avatar>';
|
|
| |
Morgan | Дата: Пятница, 27 Ноября 2009, 16:14 | Сообщение # 7 |
был не раз
Сейчас нет на сайте
| Так если я укажу путь к конкретной картинки то только ведь она будет отображаться. А как они тогда меняться будут? В место этого '<avatar>img/'.$row2['vid'].'.png</avatar>'; вот это htdocs/img/название_картинки.png вставить?
|
|
| |
Assasin | Дата: Суббота, 28 Ноября 2009, 20:43 | Сообщение # 8 |
web-coder
Сейчас нет на сайте
| $row2['vid'] - это массив, который равен картинке игрока, береться с БД по имени игрока. А имя мы сохранили в сессию.
|
|
| |
kinsja | Дата: Четверг, 24 Декабря 2009, 09:07 | Сообщение # 9 |
был не раз
Сейчас нет на сайте
| FD показывает ошибку в этой строке var popup:profil = profil(PopUpManager.createPopUp(this, profil, false)); какая тут ошибка?
|
|
| |
Assasin | Дата: Четверг, 24 Декабря 2009, 13:15 | Сообщение # 10 |
web-coder
Сейчас нет на сайте
| Создайте сначала файл profil.mxml и ошибки не будет
|
|
| |
Авря | Дата: Понедельник, 04 Января 2010, 11:01 | Сообщение # 11 |
был не раз
Сейчас нет на сайте
| У меня проблема: почему когда нажимаю в чате на (i), меня перекидывает всегда на инфу 1го персонажа.
|
|
| |
Assasin | Дата: Понедельник, 04 Января 2010, 15:37 | Сообщение # 12 |
web-coder
Сейчас нет на сайте
| Замените строки в вашем файле chat.php на эти: Code <?php include "conf.php";
$data = mysql_connect($base_name, $base_user, $base_pass); mysql_select_db($db_name);
$query = mysql_query("SELECT * FROM chat");
while($line = mysql_fetch_array($query)){ $query2 = mysql_query("SELECT id_user FROM users WHERE name='".$line['wrt_user']."'"); $row = mysql_fetch_array($query2); echo "[".$line['time_msg']. "] <b>".$line['wrt_user']."</b><a href='info.php?".$row['id_user']."' target='_blank'>(i)</a>: ".$line['msg']."<br>"; } ?> И все будет работать.
|
|
| |
Авря | Дата: Понедельник, 04 Января 2010, 15:47 | Сообщение # 13 |
был не раз
Сейчас нет на сайте
| Quote (Assasin) Замените строки в вашем файле chat.php на эти: И все будет работать. спасибо) работает!
|
|
| |
Dark_Max | Дата: Понедельник, 11 Января 2010, 19:50 | Сообщение # 14 |
уже был
Сейчас нет на сайте
| не могу понять в чем причина, у меня ни одна флешка не показывается. ни регистрация вторая, ни игровое окно.
|
|
| |
wtbg | Дата: Вторник, 12 Января 2010, 03:12 | Сообщение # 15 |
был не раз
Сейчас нет на сайте
| Quote (Dark_Max) не могу понять в чем причина, у меня ни одна флешка не показывается. ни регистрация вторая, ни игровое окно. ты случаем названия флешек не менял? если менял, то в php файле, который отвечают за отображение флешки, необходимо поменять имя флешки в двух местах: <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>
Сообщение отредактировал wtbg - Вторник, 12 Января 2010, 03:17 |
|
| |
vohakisa | Дата: Вторник, 13 Апреля 2010, 10:59 | Сообщение # 16 |
был не раз
Сейчас нет на сайте
| При нажатии на кнопку "Профиль" в игровом окне, выскакивает всплывающее окно с характеристиками персонажа. Но после релога она больше не работает. Это у меня одного так или ещё у кого-то такие проблемы?
Сообщение отредактировал vohakisa - Вторник, 13 Апреля 2010, 17:03 |
|
| |
foxyboy | Дата: Суббота, 19 Июня 2010, 21:32 | Сообщение # 17 |
был не раз
Сейчас нет на сайте
| Assasin, привет)) все супер флешки работают но во всплывающем окне-профиле не отображается аватарка и лейблы с наазваниями параметров (левел, жини и т.д.), ник отображается)), а в info.php наоборот не отображаются данные, а лейблы есть, но аватарка все равно не фурычит)) Добавлено (19.06.2010, 21:29) --------------------------------------------- Так аву во всплывающем починил)) просто для пробы несколько раз регался, а второй этап регистрации не проходил(goreg.php) поэтому пошло смещение id тоесть допустим юзер под id 8 а его ава под id 3)) кстать нужно поставить защиту для такого случая: если юзер прошел reg.php но не прошел goreg.php то стирать его из бд)) Добавлено (19.06.2010, 21:32) --------------------------------------------- да еще если несколько раз нажать в меню по "профиль" то открывается много дубликатов всплывающего окна)) не подскажешь код который при открытии нового окна закрывал предыдущее??
|
|
| |
Assasin | Дата: Суббота, 19 Июня 2010, 22:36 | Сообщение # 18 |
web-coder
Сейчас нет на сайте
| foxyboy, почитай, начиная от этого поста клик
|
|
| |
foxyboy | Дата: Воскресенье, 20 Июня 2010, 12:34 | Сообщение # 19 |
был не раз
Сейчас нет на сайте
| Assasin, ага спасиб)) а то я по наивности собирался читать его в конце))
|
|
| |
aster32 | Дата: Среда, 07 Июля 2010, 00:02 | Сообщение # 20 |
был не раз
Сейчас нет на сайте
| здарвствуйте, такая проблема: при нажатии на кнопку про инфо персонажа (i) выскакивает следующая белибирда: кодировка стоит в PSPad стоит UTF-8. В чем мб проблема ?
|
|
| |