在等待用户输入时停止

时间:2013-05-18 18:28:16

标签: php javascript jquery ajax

我正在制作游戏。在游戏中,玩家和敌人存储在对象中。 每个对象都具有以下属性:

$player->health
$player->attack  (this is a value, as in attack power)

然后是处理战斗的php函数:

function fight($player, $enemy) {...}

它使用attack($player, $enemy)castSpell($player,$enemy)等功能。

现在,问题在于:游戏在圆形系统上运行,玩家和敌人各自轮到他们。我想要的是每次轮到玩家时,脚本会等到用户点击,然后根据按下的按钮调用一个函数。

我正在考虑使用Javascript setTimeout然后在用户点击时停止它,但因为我使用的所有对象和函数都在php中。

我怎么能这样做?

3 个答案:

答案 0 :(得分:3)

您不能在PHP脚本中等待用户输入:PHP脚本运行,生成输出(通常是HTML页面),然后退出。然后将输出发送到用户的浏览器,在那里他们可以阅读并与之交互。

您描述的交互将需要使用AJAX,以便初始页面被呈现并发送到浏览器,然后JS中的onclick处理程序或类似程序将导致对PHP脚本的额外调用根据点击的事件应该发生什么。您需要保留您的对象,例如在各种PHP调用之间使用$_SESSION

所有AJAX真正意味着PHP脚本返回一小段数据,而不是整页。所以点击“施放治疗法术”可能会请求“/ ajax_fight_action.php?player=1&action=cast_spell&spell_name=healing”,它会返回(echo)一个XML或JSON字符串,让你的JS知道新的健康状况玩家。

答案 1 :(得分:1)

要检测玩家回合的结束,请将事件处理程序绑定到按钮。在此处理程序中,通过ajax将转弯详细信息发送到服务器。服务器会做它的事情,然后返回它需要的任何东西。然后,“成功”方法需要相应地更新页面并触发下一轮的开始,重复该过程。

你可能最终得到这样的javascript(使用JQuery作为跨浏览器事件处理和ajax怪癖可能有点噩梦)。

$('.button').click(function()) {
  // here do what ever is appropriate to disable the buttons, so the player to wait until the game is ready for his next turn

  $.ajax({ 
    url: serverUrl,
    type: 'post',
    data: $(this).attr('id'), // assumes the id of each button is the name of the action
    success: function(result) {
       // update the client based on the data returned by the server (result)

       // do whatever the game requires to start the next turn (e.g. re-enabling the buttons)
    }
  });
});

PHP可能不是最好的服务器端语言,因为它抛出了许多问题,因为脚本只能在请求的生命周期中存活(即转弯)。您需要弄清楚如何在服务器上保持状态从一个转弯到下一个转弯。对于单人游戏,您可以将其全部塞进会话变量中,但对于多人(或多会话)游戏,您可能会发现自己沿着数据库路线走下去。一种允许你的脚本延长寿命的语言(例如python)可能会让你的生活变得更轻松

答案 2 :(得分:-1)

使用php的sleep函数将指定的时间停止脚本,如sleep(4)将停止脚本4秒