วิธีการแก้ปัญหาเวลาเพี้ยนที่เกิดจากเครื่องผู้ใช้ by

30
Nov
0

flex-time

โดยปกติแล้วเราใช้ new Date().getTime() เพื่อให้ได้เวลาปัจจุบันเพื่อไปเทียบในการแสดงผลเวลาต่างๆ ที่ใช้ในเกม แต่บางทีก็จะเกิดปัญหาขึ้นเนื่องงจากเครื่องผู้ใช้นั้นตั้งเวลาไม่ตรงกับเวลามาตรฐาน จึงทำให้การแสดงผลผิดเพี้ยนไปอย่างมาก เราจึงต้องทำการเอาเวลาจาก Server มาช่วยในการคำนวนเวลาปัจจุบันด้วย ดังนี้


public var timeDiff:Number = 0; //สร้างตัวแปรมาเก็บค่าความต่างจากเวลาปัจจุบัน
public function init():void{
timeDiff = current_server_time*1000-(new Date().getTime()); //ให้ current_server_time เป็นเวลาปัจจุบันที่ส่งมาจาก Server แล้วนำมาลบกับเวลาปัจจุบันของเครื่องผู้ใช้เพื่อเก็บเวลาที่ต่างกัน
}

ดังนั้นเราก็จะมีตัวแปรที่เก็บเวลาต่างกันของเวลาผู้ใช้และเวลาของ Server และนำไปใช้ ตัวอย่างเช่น


public var offerTimer:Timer = new Timer(1000); //ตัว Timer นับถอยหลังหมดเวลาของโปรโมชั่น
public function checkOfferTime(time:Number):void{ //ฟังก์ชั่นคิดเวลาที่เหลือของโปรโมชั่น
var nowDate:Date = new Date(); //เวลาปัจจุบัน
var endOffer:Date = new Date(time*1000); //เวลาที่จะหมด รับค่ามาเวลาถูกเรียก
var remainTime:Number = (endOffer.getTime()-(nowDate.getTime()+timeDiff))/1000; //เวลาที่เหลือของโปรโมชั่นก็จะเท่ากับ เวลาหมดลบด้วยเวลาปัจจุบันบวกด้วยความต่างของเวลาที่เราได้ทำการเก็บไว้ในตอนแรก
if(remainTime>0){ //ถ้าเวลายังเหลือ
offerTimer.repeatCount = remainTime; //ให้เวลาเหลือ (เป็นวินาที) เท่ากับจำนวนรอบนับถอยหลัง
offerTimer.reset(); //รีเซ็ท Timer
offerTimer.start(); //และสั่งเริ่มนับ
}
}

เท่านี้เวลาที่จะแสดงให้เห็นในเครื่องผู้ใช้ทุกเครื่องจะเท่ากันแล้วล่ะครัย

Timer (setTimeout) ใน Javascript by

28
Jan
2

ฝากไว้เล็กๆเกียวกับ Javascript

ว่าด้วยเรื่อง function เกี่ยวกับการสั่ง function แต่ไม่สั่งทันทีต่ให้มิ้งเวลาไปอีกพักก่อนจะเริ่มทำงาน ซึ่งมีประโยชน์ในการทำ animation และ การหน่วงจังหวะ

ตัวอย่าง โค้ด

var timer1 =setTimeout(function() { alert(“Test”); }, 1000);

var timer1 =setTimeout(run, 1000);

var timer1 =setTimeout(“alert(’1′)”, 1000);

parameter แรกจะใส่้ได้สองแบบ คือเป็น string ภาษา javascript และอีกแบบจะใส่ function ลงไปตรงๆ

ส่วน parameter ที่สองจะเป็นเรื่องเวลาที่จะให้หน่วงไว้ก่อนจะเริ่มทำงาน โดยหน่วยจะเป็น 1/1000 วินาที (1000 คือ 1 วินาที)

ส่วนหากจะยกเลิกการทำงานที่สั่งไว้กับ setTimeout ข้างต้น ทำได้ด้วย

clearTimeout(timer1)

ผ่านทาง H ow to cancel/kill window.setTimeout before it happens on the client? – Stack Overflow.

 เราชนะรอบ 4 | ยืมเงิน 3000 ด่วน | แอพกู้เงิน | แอพเงินด่วน | สินเชื่อออนไลน์อนุมัติทันที | Site Map | กู้เงินก้อน | กระเป๋าตัง | thisshop และ ยืมเงินฉุกเฉิน 5000 ด่วน