Реалтайм стратегия. Ресурсы и действия.
| |
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"; } ?>
Вот это как пример программной реализации, просто пример
пусто!)
|
|
| |
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; } } Поясните В частности все, что после "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) --------------------------------------------- В Дата завершения действия?Добавлено (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 |
|
| |
|