Суббота, 23 Ноября 2024, 05:50

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Урок по созданию браузерной игры № 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 урок подошел к концу, сожалею что долго не писал, так как не было интернета dry
Код как видите я комментировал не весь, так как в предыдущих уроках описыал об этом, надеюсь вы не забыли. Так же если возникнут вопросы — задавайте.

Данные картинки разархивируйте в папку img - картинки

При копировании материала ссылка на источник обязательна!

Сообщение отредактировал Assasin - Понедельник, 02 Ноября 2009, 19:09
Master_ChiefДата: Понедельник, 02 Ноября 2009, 17:46 | Сообщение # 2
Shoot Space creator
Сейчас нет на сайте
Assasin, раз уж затронулась тема ссылки, то стоило указать что запросы к базе с моего движка smile

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 и ошибки не будет smile
АвряДата: Понедельник, 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. В чем мб проблема ?

  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг