-1

作成中のゲーム用にサーバーでタイマーを設定しようとしていますが、「オブジェクト以外のメンバー関数 stop() の呼び出し」エラーが発生し続けます。

時間を開始するには、次の ajax 呼び出しを行います

$.post('game.php', {
    action: 'start'
}, function(res) {
},'json');

ゲームが終了したら、次の ajax 呼び出しを行ってタイマーを停止しようとします

$.post('game.php', {
    action: 'stop'
}, function(res) {
},'json');

game.phpコードは

$action = $_POST['action'];

switch($action) {
case 'start':
    $gameTime = new timer();
    $gameTime->start();
    break;
case 'stop':
    $gameTime->stop();
    break;
}

class Timer {

   var $classname = "Timer";
   var $start     = 0;
   var $stop      = 0;
   var $elapsed   = 0;

   # Constructor
   function Timer( $start = true ) {
      if ( $start )
         $this->start();
   }

   # Start counting time
   function start() {
      $this->start = $this->_gettime();
   }

   # Stop counting time
   function stop() {
      $this->stop    = $this->_gettime();
      $this->elapsed = $this->_compute();
   }

   # Get Elapsed Time
   function elapsed() {
      if ( !$elapsed )
         $this->stop();

      return $this->elapsed;
   }

   # Get Elapsed Time
   function reset() {
      $this->start   = 0;
      $this->stop    = 0;
      $this->elapsed = 0;
   }

   #### PRIVATE METHODS ####

   # Get Current Time
   function _gettime() {
      $mtime = microtime();
      $mtime = explode( " ", $mtime );
      return $mtime[1] + $mtime[0];
   }

   # Compute elapsed time
   function _compute() {
      return $this->stop - $this->start;
   }
}

タイマーを停止する呼び出しを行うと、エラーが発生します。私は何が問題なのかを見つけようとしましたが、それは ajax 呼び出しを行っているためでしょうか?

これを機能させる方法を知っている人はいますか?

4

2 に答える 2

1

これ

switch($action) {
case 'start':
    $gameTime = new timer();
    $gameTime->start();
    break;
case 'stop':
                   <-----there should be  $gameTime = new timer();
    $gameTime->stop();
    break;
}

する必要があります

 switch($action) {
    case 'start':
        $gameTime = new timer();
        $gameTime->start();
        break;
    case 'stop':
     $gameTime = new timer();
        $gameTime->stop();
        break;

}

または試す

  $gameTime = new timer();
      switch($action) {
    case 'start':

        $gameTime->start();
        break;
    case 'stop':

        $gameTime->stop();
        break;

}
于 2012-12-02T15:42:43.087 に答える
0

停止ケースでは、開始ケースで行ったようにタイマーを初期化する必要があります。

于 2012-12-02T15:44:32.717 に答える