mPEC Forum

บทเรียน => Flash Physics => Topic started by: sujint on March 13, 2006, 03:26:35 PM



Title: ตัวอย่าง นาฬิกาจับเวลา
Post by: sujint on March 13, 2006, 03:26:35 PM
ตัวอย่าง นาฬิกาจับเวลา ให้ลองทำเองดู ไม่ใช่ให้ดูเฉย ๆ นะ ;D

(http://mpec.sc.mahidol.ac.th/forumimages/stopwatch.gif) (http://mpec.sc.mahidol.ac.th/forums/Downloads/FlashAnimations/stopwatch.swf)
http://mpec.sc.mahidol.ac.th/forums/Downloads/FlashAnimations/stopwatch.swf


Title: Re: ตัวอย่าง นาฬิกาจับเวลา
Post by: phys_pucca on April 09, 2006, 09:29:23 AM
ผมก็ทำได้ครับ แต่ไม่มีตังซื้อกล้อง digital เลยต้องวาดเอง
อาจจะไม่สวย แต่ก็ใช้งานได้ดี

 ;Dมี functions มากกว่าของ อ.สุจินต์ด้วย >:A  คลิ๊กที่รูปเพื่อลองใช้ดู  ;D

(http://mpec.sc.mahidol.ac.th/forumimages/digitalclock.jpg) (http://mpec.sc.mahidol.ac.th/forums/Downloads/FlashAnimations/digitalclock.swf)


Title: Re: ตัวอย่าง นาฬิกาจับเวลา
Post by: ปิยพงษ์ - Head Admin on April 09, 2006, 09:41:36 AM
...
 ;Dมี functions มากกว่าของ อ.สุจินต์ด้วย >:A คลิ๊กที่รูปเพื่อลองใช้ดู ;D

...

1. มีฟังก์ชันมากกว่าตรงไหน หาไม่เจอ
2. แล้วปุ่ม pause นี่ มันหยุดแสดง แต่เวลามันยังนับต่อนะ ???
3. การแสดงตัวเลขไม่ต่อเนื่องเหมือนของอ.สุจินต์


Title: Re: ตัวอย่าง นาฬิกาจับเวลา
Post by: phys_pucca on April 09, 2006, 10:01:33 AM
...
 ;Dมี functions มากกว่าของ อ.สุจินต์ด้วย >:A  คลิ๊กที่รูปเพื่อลองใช้ดู  ;D

...

1. มีฟังก์ชันมากกว่าตรงไหน หาไม่เจอ 
2. แล้วปุ่ม pause นี่ มันหยุดแสดง แต่เวลามันยังนับต่อนะ  ???
3. การแสดงตัวเลขไม่ต่อเนื่องเหมือนของอ.สุจินต์


1. ของผม pause แล้วเวลายังเดินต่อ แล้วสามารถกด play ใหม่เพื่อ ดูเวลาที่ยังเดินอยู่

2. ตั้งใจให้เป็นอย่างนั้นครับ ถ้าอยากให้หยุดแล้ว ไม่นับเวลาต่อ ให้ กด stop แล้วถ้าอยากให้มันจับต่อ โดยเริ่มจากเวลา
ที่หยุดไว้ ก็กด play ใหม่  ;D

3. อันนี้ไม่เข้าใจคำถามครับว่า ต่อเนื่องยังงัย ???  ](*,)


Title: Re: ตัวอย่าง นาฬิกาจับเวลา
Post by: ปิยพงษ์ - Head Admin on April 09, 2006, 10:14:31 AM
..
3. อันนี้ไม่เข้าใจคำถามครับว่า ต่อเนื่องยังงัย ??? ](*,)

ตัวเลขแสดงเวลาที่เป็นส่วนร้อยของวินาทีค้างอยู่ที่ค่าหนึ่งนาน แล้วก็กระโดดไปตัวเลขมากกว่าหลายตัวไปเลย :(


Title: Re: ตัวอย่าง นาฬิกาจับเวลา
Post by: phys_pucca on April 09, 2006, 01:23:31 PM
จริงๆด้วยครับอาจารย์  ](*,) ขอบคุณครับ >:A อย่างนี้ต้องไปแก้ซะแล้ว
เสร็จแล้วจะเอามาให้ใหม่


Title: Re: ตัวอย่าง นาฬิกาจับเวลา
Post by: phys_pucca on April 10, 2006, 08:12:28 AM
แก้แล้วครับ ;D

คราวนี้ code ที่เขียนง่ายกว่าเดิมอีก มีการใช้งานเพิ่มอีกอย่างคือ
สามารถจับเวลาพร้อมกันสองอย่าง (เริ่มพร้อมกันแต่หยุดไม่พร้อมกัน)
โดยการกด play ปกติ หาก อันแรกหยุดก็ให้กด pause และเมื่ออันที่สองหยุด
ก็กด stop หากต้องการดูเวลาที่อันที่สองหยุดก็ให้กด play ;D

(http://mpec.sc.mahidol.ac.th/forumimages/digitalclock.jpg) (http://mpec.sc.mahidol.ac.th/forums/Downloads/FlashAnimations/digitalmodi.swf)


Title: Re: ตัวอย่าง นาฬิกาจับเวลา
Post by: เกียรติศักดิ์ on May 17, 2006, 12:40:51 PM
นาฬิกาของอาจารย์สุจินต์และของ phys_pucca อันใหม่มีข้อดีที่กลายมาเป็นข้อด้อยครับ และเป็นข้อด้อยที่ทำให้ความเป็นนาฬิกาจับเวลาหายไป นั่นก็คือ แม้ว่าตัวเลขจะแสดงได้อย่างต่อเนื่อง แต่ว่าอัตราการ tick นั้น น้อยกว่าอัตราจริงอย่างที่สังเกตเห็นได้ครับ (ภายในสิบห้าวินาที) ผมคาดว่า คงเพราะเนื่องมาจาก updateAfterEvent() ที่ไป lag ตัว counter ที่กำลังนับเวลาอยู่ (ใช้วิธีการนี้หรือเปล่าครับ)

นาฬิกาสีเขียวอันแรกเริ่มนั้น เดินได้ตรงดีอยู่แล้วครับ อย่างน้อยก็ไม่เห็นว่าอัตราการ tick น้อยกว่าอัตราจริงครับ (ภายในสามนาทีที่ผมอดทนนั่งดู) เป็นอันว่า หน่วยเล็กที่สุดที่นาฬิกา Flash จับแล้วเชื่อถือได้ น่าจะเป็นหน่วยวินาทีครับ (ไม่ใช่เซนติวินาที) เนื่องด้วยข้อจำกัดของ ActionScript และ Flash Player เอง :)


Title: Re: ตัวอย่าง นาฬิกาจับเวลา
Post by: phys_pucca on May 17, 2006, 01:23:28 PM
อันหลังผมใช้การตั้ง frame rate ครับเป็น 100 fps
ส่วนอันแรกผมใช้ setInterval เพื่อกำหนดเวลาในการเรียกใช้
function สร้างตัวเลขครับ ;D

ที่สำคัญผมก็ไม่เคยเชื่อมันสักเท่าไหร่หรอกครับ :'(


Title: Re: ตัวอย่าง นาฬิกาจับเวลา
Post by: เกียรติศักดิ์ on May 17, 2006, 02:12:55 PM
อ้อ เข้าใจแล้วครับ แสดงว่าข้อจำกัดที่ทำให้นาฬิกาจับเวลาตัวที่สองนั้นมีอัตราการ tick ไม่ค่อยตรงกับอันจริง คือ dependence ของอัตราการ tick ไว้กับ frame rate นั่นเอง (100 fps นั้นสูงมาก!)

ปัญหาที่นาฬิกาสีเขียวตัวแรกมี (การแสดงตัวเลขไม่่ต่อเนื่อง) เกิดจากการที่ Flash Player จะวาดสกรีนใหม่ก็ต่อเมื่อเฟรมต่อไปมาถึงตามกำหนดเวลาที่กำหนดโดย frame rate เท่านั้น ดังนั้น การสั่งให้ตัวเลขเปลี่ยนไปในแต่ละรอบของ interval นั้น จึงไม่เป็นผลจนกว่าเฟรมต่อไปจะมาถึงจริงๆ ครับ

เราสามารถสั่งให้ Flash Player เปลี่ยนตัวเลขไปทุกๆ รอบของ interval จริงๆ โดยที่ไม่ dependent กับ frame rate ได้โดยการนำเมธอด updateAfterEvent() ไปต่อท้ายคำสั่งสุดท้ายในฟังก์ชันสร้างตัวเลขที่ setInterval() ไปเรียกใช้มาทุกๆ หนึ่งเซนติวินาทีครับ

น้อง phys_pucca ลองทำอย่างว่าโดยกลับไปใช้ code ของนาฬิกาตัวแรกดู คราวนี้ มันจะ tick ตัวเลขไปอย่างต่อเนื่องทุกๆ เซนติวินาทีแล้ว (โดยที่ frame rate เป็นอะไรก็ได้) ที่น่าสนใจก็คือ อัตราการ tick จะใกล้เคียงของจริงหรือไม่ ลองตรวจสอบดูนะครับ

(ตอนแรกพี่ก็นึกว่าเราทำวิธีอย่างที่พี่เพิ่งบอกไปแล้ว แล้วพบว่าอัตราการ tick ยังช้ากว่าของจริงอยู่)


Title: Re: ตัวอย่าง นาฬิกาจับเวลา
Post by: phys_pucca on May 17, 2006, 03:33:24 PM
อันที่ 2 นั้นหากใช้ตอนที่ขยายใหญ่ ผมคิดว่าโปรแกรมจะประมวลผลไม่ทันครับ
ผมลองจับเวลาดูพบว่าผิดพลาดไปมาก ในโปรแกรมผมได้ 30 s แต่นาฬิกาจริงได้
35 s แต่หาก download มาเปิดกับ flash player ในเครื่องก็จะแม่นยำในนัยสำคัญที่เชื่อถือได้ครับ
คือผมลองใช้โปรแกรมครั้งแรกจะได้ 1 minute 30.04 s นาฬิกาจริงได้ 1 minute 30.14 s
ครั้งที่สองจะได้ 1 minute 30.07 s นาฬิกาจริงได้ 1 minute 30.18 s ซึ่งส่วนต่าง
เกิดขึ้น 0.1 s อยู่ในค่าที่พอจะยอมรับได้ครับเพราะเวลาเราทำการทดลองนั้นเรามักจะเขียน
ความคลาดเคลื่อนในการจับเวลา 0.1 - 0.2 s อยู่แล้ว

ส่วนอันแรกที่เวลาเชื่อได้เพราะผมสั่งให้รับค่าเวลาจากเครื่อง ไม่ขึ้นกับการประมวลผลใดๆ ของโปรแกรม
จึงทำให้ได้เวลาจริงๆ ตอนที่โปรแกรมทำงาน ไม่ว่าจะขยายรูปให้ใหญ่หรือไม่ก็ตาม >:A >:A >:A

ผมลองใช้ updateAfterEvent() แล้ว ปรากฏว่าไม่มีอะไรเปลี่ยแปลงครับ


ขอบคุณครับที่ช่วยแนะนำ วันหลังมีอะไรที่จะขอความช่วยเหลือ
ผมจะรบกวนอีกนะครับ
 >:A >:A >:A >:A


Title: Re: ตัวอย่าง นาฬิกาจับเวลา
Post by: เกียรติศักดิ์ on May 17, 2006, 03:55:05 PM
อันที่ 2 นั้นหากใช้ตอนที่ขยายใหญ่ ผมคิดว่าโปรแกรมจะประมวลผลไม่ทันครับ
ผมลองจับเวลาดูพบว่าผิดพลาดไปมาก ในโปรแกรมผมได้ 30 s แต่นาฬิกาจริงได้
35 s แต่หาก download มาเปิดกับ flash player ในเครื่องก็จะแม่นยำในนัยสำคัญที่เชื่อถือได้ครับ
คือผมลองใช้โปรแกรมครั้งแรกจะได้ 1 minute 30.04 s นาฬิกาจริงได้ 1 minute 30.14 s
ครั้งที่สองจะได้ 1 minute 30.07 s นาฬิกาจริงได้ 1 minute 30.18 s ซึ่งส่วนต่าง
เกิดขึ้น 0.1 s อยู่ในค่าที่พอจะยอมรับได้ครับเพราะเวลาเราทำการทดลองนั้นเรามักจะเขียน
ความคลาดเคลื่อนในการจับเวลา 0.1 - 0.2 s อยู่แล้ว

ส่วนอันแรกที่เวลาเชื่อได้เพราะผมสั่งให้รับค่าเวลาจากเครื่อง ไม่ขึ้นกับการประมวลผลใดๆ ของโปรแกรม
จึงทำให้ได้เวลาจริงๆ ตอนที่โปรแกรมทำงาน ไม่ว่าจะขยายรูปให้ใหญ่หรือไม่ก็ตาม >:A >:A >:A

อ้อ ครับๆ :)

ผมลองใช้ updateAfterEvent() แล้ว ปรากฏว่าไม่มีอะไรเปลี่ยแปลงครับ

ไม่เปลี่ยนแปลงเนื่องจากการทำงานโดยรับค่ามาจากเครื่องนั่นเอง ตอนแรกนึกว่าตัวโปรแกรมเป็นตัวจับเวลาเองน่ะครับ

ขอบคุณครับที่ช่วยแนะนำ วันหลังมีอะไรที่จะขอความช่วยเหลือ
ผมจะรบกวนอีกนะครับ
 >:A >:A >:A >:A

ครับผม :)


Title: Re: ตัวอย่าง นาฬิกาจับเวลา
Post by: Putthinun on May 13, 2008, 11:19:02 AM
โอ้ อยากทำบ้างจังเลย

แต่ทำไม่เป็นค่ะ


 :2funny: ;D ;D ;D ;D


Title: Re: ตัวอย่าง นาฬิกาจับเวลา
Post by: มะตูม Kitabodin on December 13, 2014, 09:26:23 PM
ทำใน flashยังไงอะครับ(CSอะไรอะครับ)