Воскресенье, 02 Октября 2022, 16:01

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Форум игроделов » Движки для разработки игр и сложные системы разработки » Движки для браузерных игр » Как создать такое игровое поле?
Как создать такое игровое поле?
SektoidДата: Пятница, 08 Июля 2011, 14:47 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Вобщем я хочу чтоб моя игра имела вид 2д бегалки как бои в z-war или time-zero, но не только бои, а весь процесс беганья по карте.
Тоесть игровое поле делиться на клетки(или гексы, но пока-что пусть будут клетки). На каждой клетке может находиться только 1 юзер.
Главная особенность - можно модифицировать игровое поле. Тоесть выкопать окоп на одной клетке, и став на него, например, добавиться 3 уворота. Или построить укрепление, на которое нельзя наступить. Спрятавшись за него можно укрыться от пуль. Вобщем чтоб можно было менять параметры каждой клетки, если есть соответствующий навык.
Я еще только учу пхп\мускул\ас3, поэтому помогите плз happy

Вот как я думаю это сделать:
Допустим у нас есть поле 5на5 клеток.
Создаем массив, в котором 5 массивов. Тоесть массив [5][5]. Это будут значения каждого сектора на нашем поле. Изначально каждое значение в массивах равно 1. Это значит, что все клетки сейчас равны "земля". Еще может быть значение 2(окоп) и 3 (укрепление).
Делаем в базе данных таблицу sector_id, в которой содержится информация типа:
Тип клетки: проходимость, пропускание пуль, прочность, возможность строить, бонус при нахождении на клетке, картинка клетки
1 = 1,1,0,1,0, ground.png
2 = 1,1,30,0,3 trench.png
3 = 0,0,50,0,0 wall.png
У игрока при нажатии на сектор появляеться меню, в котором можно его изменить (вырыть окоп или построить укрепление). Он выбирает построить укрепление.
Отсылаеться запрос в БД, в котором содержаться координаты клетки в нашем массиве и запрос на изменение их значений на 3 (потому что строим укрепление).
Образно выражаясь:
if (массивы клеток [х][у] = 1,1) //тоесть если клетка равняеться "земля",
{SET массивы клеток to [3][3];}
else {$error1 = 1 ;}

Итак графическая часть будет в флеше.
Он считывает из базы данных наш массив [5][5]. Потом он считывает таблицу sector_id и прорисовывает каждую клетку в соответствии её значению.

Вот так я придумал. Это все схематически, но надеюсь вы поняли.
Скажите плз это рационально? Или можно как-то реализовать это проще?
Посоветуйте что-то плз.
И второй вопрос: как сделать так, чтоб все манипуляции с БД выполнялись на сервере, а не клиенте. Потому что кулхацкеры просто заменят
if (массивы клеток [х][у] = 1,1)
{SET массивы клеток to [3][3];}
else {$error1 = 1 ;}
на
SET массивы клеток to [3][3]; и не будут париться.


Сообщение отредактировал Sektoid - Пятница, 08 Июля 2011, 15:04
ilya7834Дата: Пятница, 08 Июля 2011, 15:10 | Сообщение # 2
Работаю на Irrlicht Engine
Сейчас нет на сайте
Quote (Sektoid)
Создаем массив, в котором 5 массивов

wacko
Quote (Sektoid)
Скажите плз это рационально? Или можно как-то реализовать это проще?

Рационально или нет сказать трудно, но выполнимо это точно. smile


На синем небе
Попробуй-ка разглядеть
Синюю звезду
ArhangelДата: Пятница, 08 Июля 2011, 15:13 | Сообщение # 3
участник
Сейчас нет на сайте
Quote (Sektoid)
чтоб все манипуляции с БД выполнялись на сервере, а не клиенте

Ну в php все манипуляции с бд и так на стороне сервера происходят.


Бесплатный хостинг для начинающих игроделов.
Представляю начинающим игроделам браузерных игр бесплатный хостинг, с вашим доменном или своим поддоменом
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. "Титаник" - проффесионалами...
То что я пишу большей частью ИМХО.
Помог? ставь +
lvovandДата: Пятница, 08 Июля 2011, 15:16 | Сообщение # 4
старожил
Сейчас нет на сайте
двумерный массив, 5х5 вполне рационально,
само собой все действия на сервере, отправил запрос на отработку -> получил ответ
клиент только отсылает и отображает данные


Разработка и продвижение сайтов. Дизайн
SektoidДата: Пятница, 08 Июля 2011, 15:20 | Сообщение # 5
почетный гость
Сейчас нет на сайте
Ну вот и нубские вопросы пошли biggrin :
Допустим в моем game.php есть такой код:

if (массивы клеток [х][у] = 1,1)
{SET массивы клеток to [3][3];}
else {$error1 = 1 ;}

Юзер заходит на game.php
он сможет подменить этот код таким?
SET массивы клеток to [3][3];


Сообщение отредактировал Sektoid - Пятница, 08 Июля 2011, 15:25
TimKruzДата: Пятница, 08 Июля 2011, 15:26 | Сообщение # 6
старожил
Сейчас нет на сайте
Ну например, у тебя укрепление имеет 50 очков прочности. В неё выстрелили, должно убавиться 1 очко. Где ты сохранишь эти данные? В массивах только тип, а в базе только общие (стартовые) сведения. Т.е. так можно реализовать только статичные клетки, они не могут изменять своих свойств.
Для простых игр подобного плана, бывает достаточно одного байта для описания всех свойств клетки, а дальше их можно вкл/выкл. Т.е. каждый бит задаёт какое-то одно свойство объекта/клетки карты. Но у тебя, я вижу, много данных... Можно поступить так: отпустить несколько байт каждой ячейки в двумерном массиве, и в одном байте будут указываться простые свойства (проходимость, простреливаемость, разрушаемость, нанесение ущерба персонажам и т.п.), а в остальных байтах - числовые данные (прочность, бонус, и т.п.). Можно будет обращаться всё время к массиву, но если нужно создать или восстановить тип клетки - обращаться к базе данных. Т.е. текстура указывается в базе для типов, также как и стартовые значения; стартовые значения переносятся в массив и там обрабатываются... Ну и т.д.
Если база - файл, неудобно будет её всё время читать, вот я к чему. А занимать лишними данными ОП тоже невыгодно...
А вообще-то, проще будет сделать по-другому: тип поверхности - земля, вода, песок, и т.п., а окопы, укрепления, лес, и т.п. - это уже объекты, которые хранятся в отдельном массиве и выводятся поверх земли. Т.е. у земли и т.п. только простые свойства, а объекты уже имеют прочность, бонусы и т.п.
Я вот только одного не понял.
Quote (Sektoid)
Создаем массив, в котором 5 массивов. Тоесть массив [5][5].

В твоём языке программирования нет, что ли, двумерных массивов? surprised Двумерным компактнее и проще будет. В нормальных языках N-мерные массивы создаются...
Кстати, есть в твоём ЯП (на котором идёт разработка игры) объекты? С ними было бы проще.
P.S. Для больших карт придётся выгружать/подгружать все эти клетки из базы и сортировать их (смещать). Сложновато и затратно на ресурсы, но именно так и делают в современных играх, если я ничего не путаю.
Quote (Sektoid)
или гексы

Я вообще не понимаю, как можно сделать карту из шестиугольников... wacko Да и зачем?.. Ходить по такой карте сложнее будет, чем по квадратной.


lvovandДата: Пятница, 08 Июля 2011, 15:33 | Сообщение # 7
старожил
Сейчас нет на сайте
юзер не может поменять код в game.php (если не взломает сайт конечно),
а то что приходит на скрипт от юзера должно в обязательном порядке на правильность проверяться


Разработка и продвижение сайтов. Дизайн
SektoidДата: Пятница, 08 Июля 2011, 15:43 | Сообщение # 8
почетный гость
Сейчас нет на сайте
Quote (TimKruz)
двумерных массивов

я это и имел ввиду biggrin
Quote (TimKruz)
отпустить несколько байт каждой ячейки в двумерном массиве, и в одном байте будут указываться простые свойства (проходимость, простреливаемость, разрушаемость, нанесение ущерба персонажам и т.п.), а в остальных байтах - числовые данные (прочность, бонус, и т.п.).

Вот тут недопонял wacko
Это уже 3хмерный массив?
Можешь показать на примере плз? cry
Quote (TimKruz)
А вообще-то, проще будет сделать по-другому: тип поверхности - земля, вода, песок, и т.п., а окопы, укрепления, лес, и т.п. - это уже объекты, которые хранятся в отдельном массиве и выводятся поверх земли. Т.е. у земли и т.п. только простые свойства, а объекты уже имеют прочность, бонусы и т.п.

У земли тоже будут свойства - плотность (сколько надо копать чтоб вырыть окоп. Чем больше скилл землекопа, тем быстрее копается) и т.д. Так что смысла разделять их нету, потому что фактически земля это такой же обьект как укрепление. Только у неё не будет некоторых свойств, которые есть у укрепления, и наоборот.
Quote (lvovand)
а то что приходит на скрипт от юзера должно в обязательном порядке на правильность проверяться

как?


Сообщение отредактировал Sektoid - Пятница, 08 Июля 2011, 15:48
DemeronДата: Пятница, 08 Июля 2011, 15:49 | Сообщение # 9
User created in C++
Сейчас нет на сайте
Хм... Я бы на C++ сделал что-то типо такого:

Создал новую структуру:
struct KLETKA
{
int pro4nost; //тут будет храниться прочность клетки
int uvorot; //тут будет шанс уворота от пули
int type1,type2; //тут будет храниться тип 1,1 (земля) или 3,3 (окоп или что там у тебя)
int user; //номер воина стоящего тут (ведь только 1 может стоять здесь, правильно?)
};

Потом создаю массив:
KLETKA pole_boya[y][x]; // где "KLETKA" - нас класс, "pole_boya" - название переменной, "x" -ширина, "y" - высота

И работать с массивом. Предворительно можно создать пару функций для перемещения, попадания пуль и рытья окопов. Надеюсь принцип ты понял. Если есть вопросы - обращайся!
webstrict666Дата: Пятница, 08 Июля 2011, 20:27 | Сообщение # 10
постоянный участник
Сейчас нет на сайте
happy довольно интересный вопрос и имеет множество способов решения smile
то что тут рассказывают это конечно прелесть smile но давай подумаем над уровнем ваших знаний?
самый простой способ :
JS PHP MYSQL

дам вам кусочек от JS (map.js)
Code


function travel()
   {
     
        
    var ajaxRequest;  // The variable that makes Ajax possible!
    
  try{
   // Opera 8.0+, Firefox, Safari
   ajaxRequest = new XMLHttpRequest();
  } catch (e){
   // Internet Explorer Browsers
   try{
    ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
   } catch (e) {
    try{
     ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e){
     // Something went wrong
     alert("Your browser broke!");
     return false;
    }
   }
  }
  ajaxRequest.onreadystatechange = function(){
   if(ajaxRequest.readyState == 4){
     var l = 0;
     var blanktag = "";
     for (l=0;l<500;l++)
     {
     blanktag = "div" + l;
     document.getElementById(blanktag).innerHTML="";
     }
     var playeramount = ajaxRequest.responseText.split("?");
     var netplayers = playeramount[0].split("/");
     var i = 0;
     var counter1 = 0;
     var counter2 = 1;
     var counter3 = 2;
     var counter4 = 3;
     var counter5 = 4;
     var playertag = playeramount[1];
      //alert(netplayers[0]);  
     for (i=0;i<playeramount[2];i++)
     {
      
     switch(netplayers[counter4])
     {
     case "tree":
     actionwindow[0] =  "<img src='images/" + netplayers[counter2] + ".png' onClick='lumber(" + netplayers[counter5] + ",\"" + netplayers[counter1] + "\")'>";
     //var functvars = "'" + netplayers[counter5] + "," + netplayers[counter1] + "'";
       document.getElementById(netplayers[counter1]).innerHTML=actionwindow[0];
       break;
     case "plant1":
      document.getElementById(netplayers[counter1]).innerHTML="<img src='images/" + netplayers[counter2] + ".png' onClick='harvest()'>";
       break;
     default:
       document.getElementById(netplayers[counter1]).innerHTML="<img src='images/" + netplayers[counter2] + ".png' onClick='otherplayer()'>";
     }
      
     counter1 = counter1 + 5;
     counter2 = counter2 + 5;
     counter3 = counter3 + 5;
     counter4 = counter4 + 5;
     counter5 = counter5 + 5;
     }
      
      
     }
   }
      
    //var queryString = "?direction=" + direction + "&player=" + pname;
  ajaxRequest.open("GET", "getmap.php?map=" + map + "&name=" + pid, true);
   ajaxRequest.send(null);  
   document.getElementById('statbox').innerHTML="Wood:" + wood;
   //return;  
  document.getElementById('actiontextbox').innerHTML="";
   
   }
    
    
   function traveled(direction)
   {
    
   //alert(playertag);
   var ajaxRequest;  // The variable that makes Ajax possible!
    
  try{
   // Opera 8.0+, Firefox, Safari
   ajaxRequest = new XMLHttpRequest();
  } catch (e){
   // Internet Explorer Browsers
   try{
    ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
   } catch (e) {
    try{
     ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e){
     // Something went wrong
     alert("Your browser broke!");
     return false;
    }
   }
  }
  ajaxRequest.onreadystatechange = function(){
   if(ajaxRequest.readyState == 4){
    //var test = ajaxRequest.responseText;
    //document.getElementById('title').innerHTML=ajaxRequest.responseText;
    //window.location.href = "test.php";
    //alert(ajaxRequest.responseText);
    playertag = ajaxRequest.responseText;
   }}
   var newplayertag = playertag.split("v");
   var queryString = "?pid=" + pid + "&direction=" + direction + "&playertag=" + newplayertag[1];
   //alert(queryString);  
  ajaxRequest.open("GET", "travelmap.php" + queryString, true);
   ajaxRequest.send(null);  
    
   setTimeout("travel();", 500);
    
   }
    
   function lumber(counter,tag)
   {
    //alert("test");
   //document.getElementById('actiontextbox').innerHTML="Lumbering Tree....";  
   var totallumber = lumbering * 2;
   var tohit = Math.floor(Math.random()*100) + totallumber;
   if(counter > tohit)
   {
    actionwindow[1] = "Lumbering Tree....<br>Fail!"
   document.getElementById('actiontextbox').innerHTML=actionwindow[1] ;   
   var goods = "lumberfail";
   getgoods(goods,tag);
   }
   else
   {
    actionwindow[1] = "Lumbering Tree...<br>Success!";
   document.getElementById('actiontextbox').innerHTML=actionwindow[1];
   var goods = "lumbersuccess";
   getgoods(goods,tag);
   }
    
   }
   function harvest()
   {
   document.getElementById('actiontextbox').innerHTML="Harvesting";  
   }
   function otherplayer()
   {
   document.getElementById('actiontextbox').innerHTML="Attack player";  
   }

  function getgoods(goods,tag)
   {
     
        
    var ajaxRequest;  // The variable that makes Ajax possible!
    
  try{
   // Opera 8.0+, Firefox, Safari
   ajaxRequest = new XMLHttpRequest();
  } catch (e){
   // Internet Explorer Browsers
   try{
    ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
   } catch (e) {
    try{
     ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e){
     // Something went wrong
     alert("Your browser broke!");
     return false;
    }}}
   
  ajaxRequest.onreadystatechange = function(){
   if(ajaxRequest.readyState == 4){
     if(ajaxRequest.responseText == 1)
     {
       
     }
     else
     {
     var goodsplit = ajaxRequest.responseText.split("?");
     actionwindow[2] = goodsplit[0];
     wood = parseInt(wood) + parseInt(goodsplit[1]);
     document.getElementById('statbox').innerHTML="Wood:" + wood;
     document.getElementById('actiontextbox').innerHTML=actionwindow[1] + actionwindow[2];
     }
   }}
     //alert ("goods" + goods + " name" + pid + " map" + map + "div" + tag)
    //actionwindow[1]
  ajaxRequest.open("GET", "getgoods.php?goods=" + goods + "&name=" + pid + "&map=" + map + "&div=" + tag , true);
   ajaxRequest.send(null);  
   //document.getElementById('actiontextbox').innerHTML="test this";
   //return;  
   
   }
   

Что ли бо коментировать я не буду) для подробностей пишите мне в аську smile

Добавлено (08.07.2011, 20:27)
---------------------------------------------
зы комнентить тут не буду так как это часть курса smile карта полностью будет визуальной.


http://GAMESKROL.RU
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально !
lvovandДата: Пятница, 08 Июля 2011, 21:33 | Сообщение # 11
старожил
Сейчас нет на сайте
уж лучше тогда jQuery или prototype либо другой фреймворк подключить, если уж аякс начали затрагивать, иначе знатный мазохизм будет

Разработка и продвижение сайтов. Дизайн
webstrict666Дата: Пятница, 08 Июля 2011, 21:43 | Сообщение # 12
постоянный участник
Сейчас нет на сайте
я же и сказал
Quote (webstrict666)
давай подумаем над уровнем ваших знаний?

если человек не знает как орагнизовать такую карту) то зачем затрагивать jq smile пусть Js покурит)
Если на то пошло то вэбсокеты и socket.io на поддержки HTML5


http://GAMESKROL.RU
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально !
SektoidДата: Среда, 03 Августа 2011, 14:24 | Сообщение # 13
почетный гость
Сейчас нет на сайте
Quote (Demeron)
Хм... Я бы на C++ сделал что-то типо такого:

Создал новую структуру:
struct KLETKA
{
int pro4nost; //тут будет храниться прочность клетки
int uvorot; //тут будет шанс уворота от пули
int type1,type2; //тут будет храниться тип 1,1 (земля) или 3,3 (окоп или что там у тебя)
int user; //номер воина стоящего тут (ведь только 1 может стоять здесь, правильно?)
};

Потом создаю массив:
KLETKA pole_boya[y][x]; // где "KLETKA" - нас класс, "pole_boya" - название переменной, "x" -ширина, "y" - высота

И работать с массивом. Предворительно можно создать пару функций для перемещения, попадания пуль и рытья окопов. Надеюсь принцип ты понял. Если есть вопросы - обращайся!


Вот это нравиться, щас буду пытаться.

Добавлено (03.08.2011, 14:24)
---------------------------------------------
Вобщем сделал что-то такое:

Code
<?php
class Sector {
var $type;
var $id_x;
var $id_y;
}

//Допустим у меня есть сектор 4-7
$x=4;
$y=7;
$sector [$x][$y]= new Sector;
$sector [$x][$y]->id_x = $x;
$sector [$x][$y]->id_y = $y;

$type='grass';
$sector [$x][$y]->type = $type;
?>


Как мне теперь передать это в JavaScript?
Допустим вот кусок кода js:

Code
<script type="text/javascript">
var map = [['0','0','0','0','0','1','0','0','1','1'],
                    ['0','0','0','0','0','1','0','1','1','1'],
                    ['1','0','0','0','0','1','0','1','1','1'],
                    ['1','1','0','0','0','1','0','0','1','1'],
                    ['1','1','1','0','0','1','0','0','0','0'],
                    ['0','1','0','0','0','1','1','1','0','0'],
                    ['0','0','1','0','0','0','1','1','0','1'],
                    ['0','0','1','1','1','1','0','0','1','1'],
                    ['0','0','0','1','1','1','0','0','1','1'],
                    ['0','0','0','1','1','1','0','0','1','1']];

//Это был массив, в котором потом в зависимости от числа будет определятся номер значения картинки из следущего массива:
   
             var tiles = [
                 'media/images/grass.jpg',
                 'media/images/water.jpg'
             ];
</script>

Вопрос: как мне засунуть в первый массив значения 0 и 1 в зависимости от $sector [$x][$y]->type = $type из пхп кода? Надо чтоб JS считал эти данные и засунул в массив значения - если grass, то 0, а если water, то 1?


Сообщение отредактировал Sektoid - Среда, 03 Августа 2011, 00:31
ZelebobaДата: Среда, 03 Августа 2011, 15:54 | Сообщение # 14
постоянный участник
Сейчас нет на сайте
Из PHP в JS удобно передавать данные в формате JSON, для этого в PHP есть функция json_encode() Она преобразует массив в данные формата JSON
SektoidДата: Пятница, 05 Августа 2011, 01:16 | Сообщение # 15
почетный гость
Сейчас нет на сайте
Code


<?php
class User {
var $user_sector_x;
var $user_sector_y;
var $user_ava;
}

$query = "SELECT * FROM ".TABLES_USERS." WHERE map_user='map1'";
$result = mysql_query ($query); //Выбираем игроков, которые на этой карте

$query_count = "SELECT COUNT(map_user) AS nc FROM ".TABLES_USERS." WHERE map_user='map1'";
$result_count = mysql_query ($query_count);
$check_count = mysql_fetch_array($result_count);
//Пощитали сколько игроков на карте чтобы создать в джаваскрипте массив

echo "<script type='text/javascript'>
var users_avas=new Array (".$check_count['nc'].");
</script>"; //Создаем массив в JS с аватарами. Его длинна равна количеству игроков на map1

for ($c=0; $c=$check_count['nc']; $c++){
$check_id_user = "".($check['id_user']).""; //Записываем в переменную id пользователя
$check_user_sector_x = "".$check['user_sector_x'].""; //Записываем в переменную его кординату х
$check_user_sector_y = "".$check['user_sector_y'].""; //Записываем в переменную его кординату у
$user [''.$check_id_user.''] = new User; //Создаем обьект класса User, номер которого = id юзера
$user [''.$check_id_user.'']->user_sector_x = ''.$check_user_sector_x.''; //Забиваем туда его координату х
$user [''.$check_id_user.'']->user_sector_y = ''.$check_user_sector_y.''; //Забиваем туда его координату у
$query_ava_vid = "SELECT vid FROM avatar where id_ava='".$check_id_user."'"; //Считываем аву с БД
$user [''.$check_id_user.'']->user_ava = ''.$query_ava_vid.''; //Забиваем туда его аву

echo "<script type='text/javascript'>users_avas[".$check_id_user."]='".($user [''.$check_id_user.'']->user_ava)."';</script>";
//Теперь есть массив юсерс_авас[номер юсера] = ава юсера.
}
?>

Но при загрузке страницы хром выдает опаньки.
Искал ошибки - не смог найти. Может кто найдет что не так плзззз?
ЗЫ: код писал сам, так что понимаю что он может выглядеть ужасно, но прокоментировал вроде что надо.


Сообщение отредактировал Sektoid - Пятница, 05 Августа 2011, 01:47
guerreroДата: Пятница, 05 Августа 2011, 09:25 | Сообщение # 16
был не раз
Сейчас нет на сайте
У вас совершенно не рабочий код!
Вы тянете из базы помимо аватарки, еще и кординаты игрока, но непонятно как их используете.

Я так понимаю, что вам нужно все данные о персонаже передать в js?
Я бы сделал следующим образом:
1) Вместо массива использовал хеш;
2) Структура хеша следующего типа:
var users_avas = {'user_id': { 'ava':'sprtire.gif', 'sector_x':'0', 'sector_y':'0'}}
Тогда при обращении по users_avas['user_id']['ava'] получим аву игрок, естественно, вместо user_id должно быть числовое представление id игрока.

Собственно код:
Code

<?php
$arr_buffer = array();
$buffer = '';

define('TABLES_USERS','users');

$db_id = @mysql_connect('localhost', 'root', '');
@mysql_select_db('test2', $db_id);

//Выбираем игроков, которые на этой карте, их координаты и авы    
$query = "SELECT u.id_user, u.user_sector_x, u.user_sector_y,
        av.vid    
      FROM ".TABLES_USERS." AS u, avatar AS av
      WHERE u.map_user='map1' AND av.id_ava=u.id_user";    
         
$res = mysql_query( $query );

while ($row = mysql_fetch_object( $res ) ){
    $arr_buffer[] = "
    '{$row->id_user}' :    
     {
     'ava':'{$row->vid}',
     'sector_x':'{$row->user_sector_x}',
     'sector_y':'{$row->user_sector_y}'
     }";
    }

$buffer = implode(',', $arr_buffer);
       
echo '
<script type="text/javascript">
var users_avas = {'.$buffer.'};
var buff = "";
       
//перебираем хеш и выводим данные
for(var k in users_avas){
    buff += "<p>user_id - " + k + "<br />";
    buff += "ava - " + users_avas[k][\'ava\'] + "<br />";
    buff += "sector_x - " + users_avas[k][\'sector_x\'] + "<br />";
    buff += "sector_y - " + users_avas[k][\'sector_y\'] + "<br />";
    buff += "</p>";
}

document.write(buff);    
</script>
';
?>


Результат работы скрипта:


Сообщение отредактировал guerrero - Пятница, 05 Августа 2011, 09:32
SektoidДата: Пятница, 23 Сентября 2011, 04:01 | Сообщение # 17
почетный гость
Сейчас нет на сайте
Quote (guerrero)
У вас совершенно не рабочий код!
Вы тянете из базы помимо аватарки, еще и кординаты игрока, но непонятно как их используете.


Ну он стал нерабочим когда я аватары начал загружать. А если убрать с него загрузку аватаров, то все работает smile Тоесть координаты и местонахождение игрока определяет нормально. А вот аватары принесли с собой опаньки dry
А JS я не вылаживал, потому что ошибка где-то в php, и она связана с аватарами.
Спасибо за помощь respect

Добавлено (23.09.2011, 04:01)
---------------------------------------------
Вобщем теперь возникла потребность юзать ajax. Персонажа мы грузим, обьекты тоже. Надо отображать всех персонажей и отслеживать их перемещение не перезагружая страницу. Погуглил, почитал. Все конечно хорошо, но я не нашел нормальных примеров.
Приведите плз пару примеров использования ajax. Что должно быть на стороне сервера, а что на стороне клиента?
Ато реально читаю - вроде понятно, но хз что с этим делать теперь. А как посмотрю на пример - сразу все понятно)


Сообщение отредактировал Sektoid - Пятница, 23 Сентября 2011, 04:16
AssasinДата: Пятница, 23 Сентября 2011, 09:47 | Сообщение # 18
web-coder
Сейчас нет на сайте
Юзай node.js+socket.io+php+mysql, а то если будешь использовать ajax для отображения игроков на карте, боюсь твой сервер рухнет при 10 игроках.
SektoidДата: Суббота, 24 Сентября 2011, 02:00 | Сообщение # 19
почетный гость
Сейчас нет на сайте
Ок, спс. Пошел курить нод, потом возьмусь за socket.io
Может накидаете немного ссылок или примеров пока-что плз?))
Блин, придется виртуалку ставить dry
AssasinДата: Суббота, 24 Сентября 2011, 12:13 | Сообщение # 20
web-coder
Сейчас нет на сайте
линк
линк2
Форум игроделов » Движки для разработки игр и сложные системы разработки » Движки для браузерных игр » Как создать такое игровое поле?
  • Страница 1 из 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Поиск:

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