2011-12-09 84 views
0

我有一款游戏,当玩家点击播放按钮时倒计时开始,游戏在计数达到零时开始,问题是计算来自计算机/计算机的时间,它们与计算机的秒差导致玩家在不同的时间开始玩电脑。游戏按服务器时间开始倒计时

是否有可能通过服务器时间倒计时倒数来保持玩家同步,这样每个人都在同一时间开始?

代码在ActionScript3.0的和Flash CS5.5 writen 提供的代码目前剩余电流分钟锇秒的,所以如果他们30秒留在当前分钟在我的数据库countsdown 30秒 时间1倒计时在60场比赛之间60秒。 任何帮助将超过提前apreciated 感谢 戴夫

var timer4:Timer = new Timer(1000); 
timer4.addEventListener(TimerEvent.TIMER, tick4); 
timer4.start(); 
function tick4(e:TimerEvent):void{ 
var request:URLRequest = new URLRequest("timerma2.php"); 
request.method = URLRequestMethod.GET; 

var loader:URLLoader = new URLLoader(); 
loader.dataFormat = URLLoaderDataFormat.VARIABLES; 
loader.addEventListener(Event.COMPLETE, completeHandlert); 

loader.load(request); 
function completeHandlert(e:Event) { 
var time1 = e.target.data.time1; 
var pattern = e.target.data.pattern; 
var frames = e.target.data.frames; 

var currentYear:Number = new Date().fullYear; 
var targetDate:Date = new Date(currentYear, 11, 50); 

addEventListener(Event.ENTER_FRAME, loop); 

function loop(e:Event):void{ 

    var now:Date = new Date(); 

var timeLeft:Number = targetDate.getTime() - now.getTime(); 

var sec:Number = Math.floor(timeLeft/1000); 
var min:Number = Math.floor(sec/60); 


sec = sec % 60; 
min = min % time1; 

mintxt.text = (min < 10) ? "0"+min.toString() : min.toString(); 
sectxt.text = (sec < 10) ? "0"+sec.toString() : sec.toString(); 

if (min == 0 && sec == 0){ 
    theframe(); 

    function theframe(){ 


     if (frames == 4){ 

    gotoAndStop (4); 


     timer4.removeEventListener(TimerEvent.TIMER, tick4); 
    removeEventListener(TimerEvent.TIMER, loop); 


    } 

回答

1

在同步所有的一切,最好的办法是使用套接字你的游戏连接到服务器,并让它倒计时传递给所有连接球员......

+0

鉴于问题中提到的前提,这是解决此问题的唯一正确方法。对某些服务器端解析(即:PHP)的请求将需要一秒多的时间,所以最终只剩下估计时间。真正同步用户的唯一方法是通过套接字将它们连接到主服务器。 – joncys