Четверг, 18 Апреля 2024, 09:13

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Форум игроделов » Движки для разработки игр и сложные системы разработки » Движки для браузерных игр » Реалтайм стратегия. Ресурсы и действия.
Реалтайм стратегия. Ресурсы и действия.
gmmmmДата: Пятница, 03 Августа 2012, 13:33 | Сообщение # 21
почетный гость
Сейчас нет на сайте
Php код всегда выполняется не зависимо от javascript-клиента.
Делайте ajax-ом лучше при событии клик.

Пример передачи методом пост.
Code
$.post("somefile.php", { some: "1"},
   function(data){
    alert ("Нам сказал сервер: " + data);
   }


Можно еще
Code
$.get("test.php", { name: "Vasya", age: "27" } );
или через джсон


пусто!)

Сообщение отредактировал gmmmm - Пятница, 03 Августа 2012, 13:39
IndevДата: Пятница, 03 Августа 2012, 13:50 | Сообщение # 22
частый гость
Сейчас нет на сайте
А если мне надо просто записать значение в бд, без обновления?

Добавлено (03.08.2012, 13:50)
---------------------------------------------
И в каком формате хранить время до конца действия в базе?


Завел аккаунт в Твиттере, буду постить сообщения о разработке игры. Подписывайтесь)
gmmmmДата: Пятница, 03 Августа 2012, 13:54 | Сообщение # 23
почетный гость
Сейчас нет на сайте
Quote (Indev)
А если мне надо просто записать значение в бд, без обновления?

Тебе нужно сделать php-код при нажатии на js-кнопку?

Держи:
Твой файл код:
Code
<script type=text/javascript>  
  $(document).ready(function(){  
  $(".tutorial_start").click(function(){  
  $.post("somefile.php", { some: "1"},  
    function(data){  
     alert ("Нам сказал сервер: " + data);  
    }
  });  
  });  
  </script>


Файл somefile.php

Code
<?php
if (isset($_POST['some']))
   {
/* еще твой пхп-код */
      include ("bd.php");   //Файл в котором выполняется подключение к бд;  
      $result = mysql_query("UPDATE tutorial SET task = '1.2' WHERE id='$id'",$db);  
      $result = mysql_query("UPDATE action SET action = '1' WHERE id='$id'",$db);  
      $result = mysql_query("UPDATE action SET action_time = '15' WHERE id='$id'",$db);  
echo "код работает, ajax вернул ответ";
   }
?>


пусто!)
IndevДата: Пятница, 03 Августа 2012, 14:01 | Сообщение # 24
частый гость
Сейчас нет на сайте
Нам сказал сервер:

��� ��������, ajax ������ ����


Завел аккаунт в Твиттере, буду постить сообщения о разработке игры. Подписывайтесь)
gmmmmДата: Пятница, 03 Августа 2012, 14:04 | Сообщение # 25
почетный гость
Сейчас нет на сайте
Ибо кодировку я не устанавливал.
Code
header("Content-Type: text/html; charset=utf-8");

Поставь в php файл, где бд. И где js наверное тоже


пусто!)

Сообщение отредактировал gmmmm - Пятница, 03 Августа 2012, 14:05
IndevДата: Пятница, 03 Августа 2012, 14:14 | Сообщение # 26
частый гость
Сейчас нет на сайте
Не получается, но факт в том, что пхп код не выполняется...

Завел аккаунт в Твиттере, буду постить сообщения о разработке игры. Подписывайтесь)
gmmmmДата: Пятница, 03 Августа 2012, 14:19 | Сообщение # 27
почетный гость
Сейчас нет на сайте
Quote (Indev)
Не получается, но факт в том, что пхп код не выполняется...

А как он должен выполняться?
Я тебе показал, как можно делать аякс-запросы по клику на кнопку. Ты сделал запрос - ответ
Quote (Indev)
Нам сказал сервер:

��� ��������, ajax ������ ����


Далее редактируй somefile.php. Можешь указать переменные в js $.post если таковые необходимы и должны быть направлены в php-файл.


пусто!)
IndevДата: Пятница, 03 Августа 2012, 14:24 | Сообщение # 28
частый гость
Сейчас нет на сайте
Может проще сделать выполнение PHP просто по нажатию кнопки? (Не используя JS)

Завел аккаунт в Твиттере, буду постить сообщения о разработке игры. Подписывайтесь)
lvovandДата: Пятница, 03 Августа 2012, 14:31 | Сообщение # 29
старожил
Сейчас нет на сайте
Indev, ну и чем это проще, будешь тогда страницу обновлять постоянно

Разработка и продвижение сайтов. Дизайн
IndevДата: Пятница, 03 Августа 2012, 14:37 | Сообщение # 30
частый гость
Сейчас нет на сайте
Ладно, тут я разобрался, следующий вопрос:
есть некоторые действия, например полеты.
В бд записывается тип действия я время окончания.
На стороне клиента счетчик времени на JS, раз в минуту синхронизирующийся с бд.
Как, в каком формате хранить время окончания? (Серверное)


Завел аккаунт в Твиттере, буду постить сообщения о разработке игры. Подписывайтесь)
lvovandДата: Пятница, 03 Августа 2012, 14:44 | Сообщение # 31
старожил
Сейчас нет на сайте
INT
пиши туда значение функции time()
кол-во секунд потом же и сверяешь


Разработка и продвижение сайтов. Дизайн
IndevДата: Пятница, 03 Августа 2012, 15:29 | Сообщение # 32
частый гость
Сейчас нет на сайте
Спасибо, посоветуйте, будет ли работать схема:
Загрузка страницы --> Берем из базы время окончания --> Сверяем с текущей, преобразуем в Часы и минуты --> Отображаем в счетчике JS, начинаем обратный отсчет -->
Через минуту сверяем с бд, если отклонилось, правим. И так далее, до конца процесса.
Будет ли она работать как надо и как будет работать, если игрок вышел? Как лучше сделать?

Добавлено (03.08.2012, 15:29)
---------------------------------------------
Передаю так:

Code
<script type=text/javascript>
$(document).ready(function(){
$("button.tutorial_start").click(function(){
$("#tutorial").load("somefile.php", "x=1");
});
});
</script>


somefile.php:
Code
<?
header("Content-Type: text/html; charset=windows-1251");
include ("bd.php");
$result = mysql_query("UPDATE tutorial SET task = '1.2' WHERE id='$id'",$db);   
$result = mysql_query("UPDATE action SET action = '1' WHERE id='$id'",$db);   
$result = mysql_query("UPDATE action SET action_time = '15' WHERE id='$id'",$db);  
echo "Код работает, ajax вернул ответ";
?>


Выдает: "Код работает, ajax вернул ответ", изменения в базу не заносятся. Почему?


Завел аккаунт в Твиттере, буду постить сообщения о разработке игры. Подписывайтесь)

Сообщение отредактировал Indev - Пятница, 03 Августа 2012, 14:50
gmmmmДата: Пятница, 03 Августа 2012, 15:34 | Сообщение # 33
почетный гость
Сейчас нет на сайте
Смотри я написал пример, как такое реализовать на деле:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
Code
<?php
/* php */
$lnk = mysql_connect('хост', 'test', '123')
        or die ('Not connected : ' . mysql_error());

// сделать текущей базой данных
mysql_select_db('бд', $lnk) or die ('Can\'t use db : ' . mysql_error());
$q = mysql_query("SELECT * FROM `users` WHERE id = '1'"); //для примера возьмем id: 1
$arr = mysql_fetch_assoc($q);
?>
<script type="text/javascript">
var i = <?php echo $arr[date] . ";"; ?>

var i_2 = i + 10;
var t = setInterval(MyTimer,1000); // после этого каждые 1с будет вызываться функция MyTimer
function MyTimer()
{
  // какое-то действие, которое нужно выполнять каждые 1с.
i++;
document.getElementById( 'conteiner' ).innerHTML = i;
if (i == i_2)
   {
$.post("time.php", { time: i , id: <?php echo $arr[id]; ?> }, function(data) { alert("Нам отправил сервер: " + data); } );
i_2 += 10;
     }
}
</script>

<div id='conteiner'></div>


Мы сделали таймер и интервал для передачи данных - 10 секунд. Через 10 секунд число будет записано в бд.
Дале каждые 10 секунд идет запрос в бд.
time.php

Code
<?php
$t = isset($_POST['time']) && !empty($_POST['time']) ? $_POST['time'] : null;
$id = isset($_POST['id']) && !empty($_POST['id']) ? $_POST['id'] : null;
if ($t != null)
   {
$lnk = mysql_connect('хост', 'test', '123')
        or die ('Not connected : ' . mysql_error());

// сделать текущей базой данных
mysql_select_db('бд', $lnk) or die ('Can\'t use db : ' . mysql_error());

     $q = mysql_query("UPDATE `users` SET date = '$t' WHERE id = '$id'") or die(mysql_error());
     echo "is upping t: $t, id: $id";
   }
else
{
echo "var is not valid";
}
?>


Вот это как пример программной реализации, просто пример smile


пусто!)
IndevДата: Пятница, 03 Августа 2012, 15:50 | Сообщение # 34
частый гость
Сейчас нет на сайте
Quote (gmmmm)

function MyTimer()
{
// какое-то действие, которое нужно выполнять каждые 1с.
i++;
document.getElementById( 'conteiner' ).innerHTML = i;
if (i == i_2)
{
$.post("time.php", { time: i , id: <?php echo $arr[id]; ?> }, function(data) { alert("Нам отправил сервер: " + data); } );
i_2 += 10;
}
}

Поясните sad В частности все, что после "i++;"
Quote (gmmmm)

$t = isset($_POST['time']) && !empty($_POST['time']) ? $_POST['time'] : null;
$id = isset($_POST['id']) && !empty($_POST['id']) ? $_POST['id'] : null;

И тут пожалуйста...

Добавлено (03.08.2012, 15:48)
---------------------------------------------
В

Code
$arr[date]
Дата завершения действия?

Добавлено (03.08.2012, 15:50)
---------------------------------------------
Что хранят переменные i и i_2


Завел аккаунт в Твиттере, буду постить сообщения о разработке игры. Подписывайтесь)

Сообщение отредактировал Indev - Пятница, 03 Августа 2012, 15:45
gmmmmДата: Пятница, 03 Августа 2012, 15:55 | Сообщение # 35
почетный гость
Сейчас нет на сайте
Quote (Indev)
document.getElementById( 'conteiner' ).innerHTML = i;

Это По элементу конейнер (<div id='conteiner'></div>) innerHtml (дословно передаем в html) = числу переменной i. Короче выводим на экран данный из переменной в контейнер div.
Если i == i_2 то передаем методом ajax в файл time.php данные: id игрока и время таймера.
Увеличиваем i_2 на 10 пунктов.
Quote (Indev)
Quote (gmmmm)

$t = isset($_POST['time']) && !empty($_POST['time']) ? $_POST['time'] : null;
$id = isset($_POST['id']) && !empty($_POST['id']) ? $_POST['id'] : null;

И тут пожалуйста...


Это тернарный оператор, я люблю его юзать.

Описание тернарного оператора по спойлером.

Можно заменить test.php на
Code
<?php    
    if (isset($_POST['id']) && isset($_POST['time']))
      {    
$id = $_POST['id'];
$t = $_POST['time'];
    $lnk = mysql_connect('хост', 'test', '123')    
           or die ('Not connected : ' . mysql_error());    
       
    // сделать текущей базой данных    
    mysql_select_db('бд', $lnk) or die ('Can\'t use db : ' . mysql_error());    
       
        $q = mysql_query("UPDATE `users` SET date = '$t' WHERE id = '$id'") or die(mysql_error());    
        echo "is upping t: $t, id: $id";    
      }    
    else
    {    
    echo "var is not valid";    
    }    
    ?>


UP:

i хранит значение из базы времени, которое мы записали в бд ранее.
i_2 увеличенное i на 10, т.е. условно через следующие 10 секунд мы залезем в бд (if (i == i_2)) и увеличим на i_2 += 10;

Up2:

В
$arr[date]
В арр2 сохраняется время, которое было сохранено с прошлого раза. (сохраняем каждые 10сек.)


пусто!)

Сообщение отредактировал gmmmm - Пятница, 03 Августа 2012, 15:59
IndevДата: Пятница, 03 Августа 2012, 16:03 | Сообщение # 36
частый гость
Сейчас нет на сайте
Так.
i - время завершения действия.
i_2 - время следующей синхронизации
t - интервал в таймере.
Зачем передавать t?

Добавлено (03.08.2012, 16:03)
---------------------------------------------
$arr[date] - время последнего обращения на синхронизацию?


Завел аккаунт в Твиттере, буду постить сообщения о разработке игры. Подписывайтесь)

Сообщение отредактировал Indev - Пятница, 03 Августа 2012, 16:01
gmmmmДата: Пятница, 03 Августа 2012, 16:04 | Сообщение # 37
почетный гость
Сейчас нет на сайте
Quote (Indev)
Так.
i - время завершения действия.
i_2 - ??
t - интервал в таймере.
Зачем передавать t?

Мой код не по вашей конструкции, описанной выше.
Мой код чисто пример таймера и записи в бд через 10 секунд:

i - переменная, хранящая время таймера.
i_2 - переменная таймера следующего обращения в бд

t - это переменная для записи в бд вообще из другого (!) файла, к которому обращаемся через аякс. Она хранит переданное кол-во таймера.


пусто!)
IndevДата: Пятница, 03 Августа 2012, 17:50 | Сообщение # 38
частый гость
Сейчас нет на сайте
Все, понял. Огромное Вам спасибо!

Завел аккаунт в Твиттере, буду постить сообщения о разработке игры. Подписывайтесь)

Сообщение отредактировал Indev - Суббота, 04 Августа 2012, 12:56
Форум игроделов » Движки для разработки игр и сложные системы разработки » Движки для браузерных игр » Реалтайм стратегия. Ресурсы и действия.
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

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