การพัฒนาเกม

คำถาม & คำตอบสำหรับนักพัฒนาเกมมืออาชีพและเป็นอิสระ

3
ตัวละครในเกมเคลื่อนไหวอย่างไร [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันจะทำงานร่วมกับเพื่อน ๆ ในโครงการปีสุดท้ายของเรา เกมของเราจะเป็น FPS และฉันต้องวาดภาพเคลื่อนไหวสำหรับมุมมอง FPS และตัวละครศัตรูอื่น ๆ ที่สามารถตั้งโปรแกรมได้อย่างง่ายดายเพื่อสร้างเกมที่ดี ฉันอยากจะรู้ว่าตัวละครในเกมนั้นสามารถเคลื่อนย้ายได้อย่างไร? ซอฟต์แวร์และเอ็นจิ้นประเภทใดที่ใช้กับตัวละครเหล่านี้

1
ฉันจะจัดการเสียงในเกมแบบแยกหน้าจอได้อย่างไร
ในเกมที่มีผู้เล่นหลายคนแบบแยกหน้าจอผู้เล่นมากกว่าหนึ่งคนอาจได้ยินเหตุการณ์เสียงและอาจแตกต่างจากผู้เล่นแต่ละคน ตัวอย่างเช่นผู้เล่นคนหนึ่งอาจได้ยินเสียงของรถยนต์ที่พวกเขากำลังขับรถผ่านกรองความถี่ต่ำ ผู้เล่นที่สองอาจได้ยินเสียงเครื่องยนต์ดอปเปลอร์เลื่อนขณะที่ผู้เล่นคนหนึ่งขับผ่านด้วยความเร็ว ผู้เล่นที่สามซึ่งสังเกตจากระยะไกลอาจได้ยินเสียงเครื่องยนต์ที่ไม่กรองในระดับเสียงเบา ในเกมดังกล่าววิธี "ชัดเจน" คือการเล่นเสียงทั้งหมดในครั้งเดียว ฉันสามารถใช้วิธีการใดเพื่อปรับปรุงสิ่งนี้เพื่อป้องกันเสียงเกินพิกัด / "เสียงขรม" ในขณะที่เพิ่มผู้เล่นแต่ละคนให้ได้มากที่สุด?

2
สีขาวเป็นสีฐานที่ดีที่สุดที่จะเริ่มต้นเมื่อวางแผนที่จะแรเงาภายใน Unity หรือไม่?
ฉันกำลังมองหาต้นแบบในเกมใน Unity ซึ่งจะประกอบด้วย sprite / tiles แบบ solid square ฉันคิดว่าฉันสามารถแสดงประเภทของวัตถุที่แตกต่างกันด้วยสีที่แตกต่างกันสำหรับแต่ละกระเบื้องในเกม ฉันคิดว่าฉันสามารถนำเข้าสไปรต์สี่เหลี่ยมจัตุรัสเดียวและแรเงาได้อย่างเหมาะสมใน Unity เมื่อเทียบกับสี่เหลี่ยมที่นำเข้าที่มีสีแตกต่างกันมากมาย ประสบการณ์ของฉันในการปรับเฉดสีและความอิ่มตัวของสีใน Photoshop แสดงให้เห็นว่าสีขาวไม่ใช่สีที่ง่ายต่อการเปลี่ยนแปลงเนื่องจากสิ่งที่เป็นสีขาวมักจะเป็นสีขาวอยู่เสมอ การทดสอบของฉันใน Unity แสดงให้เห็นว่าฉันสามารถเปลี่ยน "สี" ของสไปรต์เป็นสิ่งอื่นที่ไม่ใช่สีขาวและสไปรต์นั้นได้รับการแรเงาอย่างเหมาะสมแม้ว่าฉันจะคิดว่าจะได้รับประสบการณ์ Photoshop ของฉันก็ตาม เนื่องจากวัตถุสีขาวดูเหมือนจะใช้การแรเงาสีที่เหมาะสมเมื่อมีการเปลี่ยนแปลงภายใน Unity ไส้ในของฉันบอกฉันว่านี่เป็นสีเริ่มต้นที่ดีที่สุดซึ่งหมายความว่าฉันสามารถนำเข้าสไปรต์สี่เหลี่ยมจัตุรัสสีขาวเดี่ยวและปรับสีเพื่อแสดงวัตถุต่าง ๆ และวัตถุฯ สไปรท์สีขาวจริง ๆ แล้วเป็นสไปรต์สีที่ดีที่สุดในการเริ่มต้นและทำไมบางสิ่งเช่นนี้ทำงานใน Unity ซึ่งตรงข้ามกับการปรับเฉดสีและความอิ่มตัวภายใน Photoshop
10 unity  sprites  color 

2
ฉันจะวางเกมบนคาร์ทริดจ์ NES ได้อย่างไร
ฉันจะสร้างคาร์ทริดจ์ NES ได้อย่างไร มีการกวดวิชาใด ๆ ฉันต้องใส่เกมที่ทำงานในโปรแกรมจำลองและวางบนตลับ ทำอย่างไร เป็นไปได้ตั้งแต่เริ่มต้นหรือไม่ หรืออย่างน้อยฉันสามารถใช้คาร์ทริดจ์ที่มีอยู่และเขียนทับเนื้อหาที่นั่นได้หรือไม่
10 modding  roms 

1
วิธีการเรนเดอร์ภูมิประเทศขนาดใหญ่อย่างมีประสิทธิภาพได้อย่างไร
เมื่อเร็ว ๆ นี้ฉันติดปัญหาที่คิดเกี่ยวกับวิธีที่ดีที่สุดในการสร้างภูมิประเทศในเกมของฉัน ในโครงการอื่นฉันมักใช้ความสูงของแผนที่ดังนั้นงานหลักทั้งหมดจึงขึ้นอยู่กับเครื่องยนต์ที่ใช้ แต่ตอนนี้ไม่สามารถทำได้เพราะภูมิประเทศมีรูปหลายเหลี่ยมหลายล้านที่ต้องวาดอย่างแม่นยำ นอกจากนี้หลายคนไม่สามารถแยกวิเคราะห์จากเวกเตอร์ Y (เนื่องจากรูปหลายเหลี่ยมที่ซ่อนอยู่ด้านล่าง) นั่นคือแผนผังความสูงไม่เป็นประโยชน์ที่นี่ ในกรณีนี้ฉันต้องใช้วัตถุ COLLADA บางคนบอกให้ฉันแบ่งโมเดลด้วยตัวเองภายในซอฟต์แวร์อย่าง Blender แต่น่าเสียดายที่มันไม่สามารถทำได้เพราะภูมิประเทศเหล่านี้ถูกสร้างขึ้นเป็นชิ้น ๆ ในซอฟต์แวร์อื่นและโหลดหลังจากเข้าสู่เกม ดังนั้นนี่จะเป็นงานที่ยิ่งใหญ่ที่จะต้องหั่นมันด้วยตนเองทุกครั้ง ดังนั้นตั้งแต่สัปดาห์ที่ฉันได้ศึกษาเกี่ยวกับวิธีที่ฉันสามารถแก้ปัญหานี้และขั้นตอนการโหลดตาข่ายนี้ภูมิประเทศภูมิประเทศตาม frustrum กล้องบันทึกประสิทธิภาพมากที่สุดเท่าที่เป็นไปได้ ฉันพบเอกสารจำนวนมากเกี่ยวกับการสร้างตาข่ายโพรซีเดอร์และฉันคิดว่าปัญหาของฉันสามารถแก้ไขได้โดยการแมปตาข่ายเข้ากับแปด นี่คืองานที่ยิ่งใหญ่อย่างน้อยสำหรับฉันและนั่นคือเหตุผลที่ฉันมาที่นี่เพราะฉันไม่ต้องการเสี่ยงที่จะไปในเส้นทางที่ผิดโดยไม่ได้ยินจากคนที่มีประสบการณ์ กล่าวโดยย่อฉันมีจุดยอดและดัชนีนับล้านที่รวมกันเป็นภูมิประเทศ แต่ด้วยเหตุผลที่ชัดเจนว่าฉันไม่สามารถวาดมันได้ในเวลาเดียวกัน จำเป็นต้องมีขั้นตอนบางอย่าง วิธีที่ดีที่สุดในการทำเช่นนั้นคือการรักษาตาข่ายขนาดใหญ่เป็นภูมิประเทศ? มีหนังสือเฉพาะเกี่ยวกับเรื่องนั้นไหม? มีวิธีที่ดีที่สุดที่จะใช้หรือไม่ ขออภัยสำหรับข้อผิดพลาดใด ๆ ฉันเป็นสามเณรมากในพื้นที่นี้

2
การคาดการณ์แบ่งการตรวจจับการชนกัน
ก่อนที่จะใช้การคาดการณ์กับการเคลื่อนไหวของสไปรต์การชนของฉันทำงานได้อย่างสมบูรณ์ อย่างไรก็ตามหลังจากที่ใช้การคาดการณ์กับการเคลื่อนไหวของสไปรต์ของฉัน (เพื่อทำให้สิ่งต่าง ๆ เรียบ) การชนจะไม่ทำงานอีกต่อไป นี่คือสิ่งที่ทำงานก่อนการคาดการณ์: อย่างไรก็ตามหลังจากที่ฉันใช้การคาดการณ์ของฉันแล้ว ฉันถือว่านี่เป็นเพราะมันทำหน้าที่ประสานงานใหม่ที่ได้รับการผลิตโดยขั้นตอนการอนุมาน (ซึ่งตั้งอยู่ในการเรียกของฉัน) หลังจากที่ฉันใช้การคาดการณ์ของฉัน วิธีแก้ไขพฤติกรรมนี้ ฉันลองใส่การตรวจสอบการชนกันเพิ่มเติมหลังจากการคาดการณ์ - นี่ดูเหมือนจะเคลียร์ปัญหาจำนวนมาก แต่ฉันได้ตัดออกเพราะการวางตรรกะในการแสดงผลของฉันไม่เป็นไปตามคำถาม ฉันได้ลองทำสำเนาตำแหน่ง spriteX โดยคาดการณ์และวาดภาพโดยใช้สิ่งนั้นแทนที่จะเป็นแบบดั้งเดิมดังนั้นการปล่อยให้แบบดั้งเดิมยังคงอยู่เพื่อตรรกะในการรับ - นี่ดูเหมือนจะเป็นตัวเลือกที่ดีกว่า แต่ก็ยังสร้างผลแปลก ๆ เมื่อชนกับผนัง ฉันค่อนข้างแน่ใจว่านี่ไม่ใช่วิธีที่ถูกต้องในการจัดการกับเรื่องนี้ ฉันพบคำถามที่คล้ายกันสองสามข้อที่นี่ แต่คำตอบไม่ได้ช่วยฉัน นี่คือรหัสการคาดการณ์ของฉัน: public void onDrawFrame(GL10 gl) { //Set/Re-set loop back to 0 to start counting again loops=0; while(System.currentTimeMillis() > nextGameTick && loops < maxFrameskip){ …

2
ความแตกต่างระหว่าง Update และ FixedUpdate ใน Unity คืออะไรและฉันควรจะสนใจอะไร?
ฉันบอกว่าจะใช้Update()สำหรับกราฟิกและFixedUpdate()ฟิสิกส์ FixedUpdate()แต่บางครั้งปัจจัยการผลิตของฉันจะไม่ลงทะเบียนเมื่อฉันใช้ มันใช้งานได้ดีถ้าฉันใช้Update()กับทุกสิ่ง ฉันควรจะรำคาญFixedUpdate()หรือฉันกำลังทำอะไรผิดหรือเปล่า?
10 unity  c#  game-loop 

2
ฉันจะทำให้หางงูเป็นไปตามหัวได้อย่างไร
ทำตามการมอบหมายและเพิ่งเริ่มต้นกับlibGDXโดยการสร้าง Snake clone ขนาดเล็กที่ฉันพบเจอปัญหาที่ฉันอาจจะละอายใจในระยะเวลาหนึ่ง ขณะนี้ฉันมีหัวงู (สี่เหลี่ยมเรียบง่ายในขั้นตอนนี้) เคลื่อนที่ไปทั่วผืนผ้าใบของเกม วิธีที่ตรงไปตรงมาที่สุดในการสร้างส่วนที่เหลือของงูนั้นคือการมีหัวของตัวเองเป็น Java Collections LinkedList รายการของ SnakeElements ซึ่งจะลดขนาด / ตามขนาดของสิ่งที่ผู้เล่นทำ มีรายการ SnakeElements นี้ตามหัว แต่ได้พิสูจน์แล้วว่าไม่น่ารำคาญ ฟังก์ชั่นปัจจุบันการทำเช่นนี้มีดังต่อไปนี้และถูกเรียกว่าทุกครั้งที่หัวหน้าอัพเดตตำแหน่ง: private void moveTail (float x, float y, int direction) { float tmpx, tmpy; int tmpdirection; int offset_x, offset_y; for (SnakeSegment snse : tail) { offset_x = 0; offset_y = …
10 java  libgdx 

1
การค้นหาความเร็วที่ถูกต้องสำหรับ AI เพื่อให้บรรลุเป้าหมาย
ฉันมีเรือที่เดินทางด้วยความเร็วสูงสุดmaxSpeedและสามารถเปลี่ยนrotationSpeedองศาต่อวินาที เรือเคลื่อนที่ไปในทิศทางที่หันหน้าไปทางเสมอซึ่งหมายความว่ายิ่งแล่นเรือเร็วเท่าไหร่รัศมีการเลี้ยวยิ่งใหญ่ขึ้นเท่านั้น ฉันรู้ตำแหน่งของฉันการหมุนและตำแหน่งของเป้าหมาย สิ่งที่ฉันอยากรู้คือเป้าหมายอยู่ในรัศมีวงเลี้ยวของฉันด้วยความเร็วนี้หรือดีกว่าความเร็วสูงสุดที่ฉันสามารถเคลื่อนที่ได้คืออะไรเพื่อที่จะเลี้ยวไปยังเป้าหมายโดยไม่วนรอบอย่างต่อเนื่อง มีวิธีที่มีประสิทธิภาพ (ish) การทำเช่นนี้? นี่คือสิ่งที่ฉันคิดอยู่จนถึงตอนนี้: เพราะฉันรู้ว่าฉันเดินทางไปไกลแค่ไหนต่อขั้นตอนและเท่าไหร่ที่ฉันหมุนไปตามขั้นตอนเท่าไหร่ฉันจึงสามารถรู้ได้ว่าฉันจะอยู่ที่ไหนในสองเฟรม ตำแหน่งปัจจุบันของฉันคือ p1 ตำแหน่งถัดไปของฉันคือ p2 จากนั้น p3 ฉันสามารถหาเส้นแบ่งครึ่งตั้งฉากของ (p1, p2) และ (p2, p3) จุดตัดของพวกเขาจะให้ศูนย์กลางของวงกลมแก่ฉัน ฉันสามารถทดสอบว่าเป้าหมายอยู่ในวงกลมนั้นหรือไม่ ฉันไม่แน่ใจว่าสิ่งนี้จะทำงานในแบบ 3 มิติ (ฉันไม่แน่ใจว่าจะคำนวณทรงกลมด้วยอินพุตของฉัน) โซลูชันนี้ไม่ได้ช่วยอะไรมากนักในการค้นหาความเร็วที่เหมาะสมสำหรับการเดินทางฉันจะต้องลองสองสามครั้งด้วยความเร็วที่แตกต่างกันเพื่อค้นหาความเร็วที่เหมาะสม ทุกคนสามารถปลดปล่อยแสงให้กับทางออกที่ดีกว่าได้หรือไม่?

3
เหตุใดการจัดการหน่วยความจำแบบกำหนดเองจึงจำเป็นสำหรับสินทรัพย์
ทรัพยากรที่เกี่ยวข้องกับการเขียนโปรแกรมเกมโดยเฉพาะอย่างยิ่งเกม 3D โลกเปิดพูดคุยเกี่ยวกับวิธีที่คุณต้องขนถ่ายและโหลดสินทรัพย์ไปยังและจากดิสก์หน่วยความจำระบบและหน่วยความจำวิดีโออย่างต่อเนื่อง ฉันสามารถเข้าใจสิ่งนี้ได้บนคอนโซลเนื่องจากพวกเขามีโครงร่างการจัดการหน่วยความจำที่ง่ายมากที่ไม่สามารถจัดการกับการล้นที่อาจเกิดขึ้นได้ อย่างไรก็ตามบนพีซีสถานการณ์แตกต่างกันมาก มีหน่วยความจำเสมือนที่จัดทำโดยระบบปฏิบัติการสำหรับหน่วยความจำระบบและไดรเวอร์กราฟิกจัดการการสลับไปมาจาก CPU ไปยัง GPU เหตุใดจึงไม่เพียงพอที่จะโหลดทุกอย่างพร้อมกันและต้องจัดการกับการดึงข้อมูลล่วงหน้าและอาจทำให้แน่ใจว่าไม่มีการปิดกั้นในขณะที่มีการสลับสินทรัพย์ที่ต้องการ mallocนี้ไม่ได้บอกว่าทุกอย่างจะถูกจัดสรรอย่างไร้เดียงสาใช้สิ่งที่ต้องการ ทุกอย่างจะถูกเก็บไว้อย่างต่อเนื่องและแคชสอดคล้องกัน มันง่ายกว่าที่จะทำให้การเข้าถึงหน่วยความจำของคุณมีประสิทธิภาพถ้าคุณไม่ต้องกังวลกับการสลับหน้าเข้าและออกด้วยตนเอง ... UPDATE: หลังจากอ่านบิตลงในการถ่ายโอนบัฟเฟอร์แบบอะซิงโครนัสฉันได้รับแนวคิดว่าวิธีที่ไดรเวอร์กราฟิกสามารถเพจหน่วยความจำเข้าและออกโดยอัตโนมัตินั้นไม่ดี สิ่งนี้ถือเป็นจริงสำหรับทรัพยากรของ CPU หรือไม่; คือมันจะดีกว่าที่จะจัดการด้วยตนเองเสมอเมื่อทรัพยากรที่กำหนดจะถูกโหลดและยกเลิกการโหลดแม้ในที่ที่มีหน่วยความจำเสมือน?

4
เป็นเธรดแยกต่างหากสำหรับการบังคับเกมลูปสำหรับเกมแบบง่ายหรือไม่?
ฉันยังใหม่ต่อการพัฒนาเกม เพื่อเรียนรู้ฉันกำลังสร้างเกมนี้บนแพลตฟอร์ม Android คุณสามารถดูวิดีโอการเล่นเกมได้ที่ลิงค์ด้านบน มันเป็นเกมที่ง่าย ฉันได้อ่านบทความจำนวนมากเกี่ยวกับการเริ่มต้นกับการพัฒนาเกมเกือบทุกเรื่องที่แนะนำให้ใช้ลูปเกมในเธรดแยกต่างหากซึ่งเหมาะสมสำหรับเกมอื่น ๆ อย่างไรก็ตามสำหรับเกมนี้ฉันต้องเริ่มแยกเธรดหรือไม่

3
Multitexturing เป็นเพียงแค่“ ใช้มากกว่าหนึ่งพื้นผิว” หรือไม่?
นี่อาจดูงี่เง่า แต่มันทำให้ฉันรำคาญ จากสิ่งที่ฉันเข้าใจการใช้multitexturingนั้นใช้มากกว่า 1 texture ต่อ shader เท่านั้น ดังนั้นแทนที่จะสร้าง 1 พื้นผิวฉันสร้าง 2 อย่างขึ้นไปซึ่งก็คือ ... ค่อนข้างชัดเจน! ทำไมมีคำพิเศษสำหรับสิ่งนั้น มีมากกว่านั้นเพียงแค่ "ใช้มากกว่า 1 พื้นผิว"? ฉันพลาดอะไรไปรึเปล่า?

1
ฉันจะมั่นใจได้ว่ามุมมองสมมาตรใน Roguelike ได้อย่างไร
ฉันกำลังทำงานกับ Roguelike และสำหรับฉันฉันได้สร้างอัลกอริทึมการติดตามเรย์ / การคัดเลือกนักแสดงมุมมอง (FoV) ซึ่งประกอบด้วยการพล็อตเส้น Bresenham ทุกจุดในวงกลมที่เป็นของแข็ง มันเป็นสิ่งประดิษฐ์ฟรี (และมีประสิทธิภาพพอสมควร) แต่มันขาดความต้องการที่สำคัญของฉัน: สมมาตร (ถ้าคุณเห็นสัตว์ประหลาดมันจะต้องสามารถเห็นคุณได้ด้วย) นี่คือตัวอย่างของพฤติกรรมที่ไม่สมมาตรของรหัสของฉัน ในภาพด้านซ้ายฉันยืนอยู่ที่มุมหนึ่ง (บล็อก 'X' สีแดง = กำแพง) ฉันเห็นกระเบื้องด้านบนขวา อย่างไรก็ตามหากฉันย้ายไปที่หนึ่งในกระเบื้องเหล่านั้น (ภาพขวา) ฉันจะไม่เห็นไทล์ที่มาจากอีกต่อไป ฉันคิดว่าฉันอาจจะอยู่ในรูปแบบของเขตข้อมูลที่อนุญาตแต่เนื่องจากบทความ Roguebasin แนะนำว่าอนุญาตให้มีความสมมาตร มีทางเลือกอื่นในการทำให้สมมาตรไหม?

2
เลนส์แก้วหักเหแสง
ฉันมีพื้นหกเหลี่ยมไม่สิ้นสุดสร้างโดย tessellating จุดตารางในคู่ shader tessellation: โปรดทราบว่านี่เป็นโครงลวดแบบเรียบ - "เงา" เป็นเคล็ดลับแสง: ตอนนี้ฉันต้องการทำให้แก้วนี้ดูหนาและหักเหได้ แต่ไม่แน่ใจว่าจะดำเนินการต่อไปได้อย่างไร สิ่งแรกที่อยู่ในใจคือ ตั้งค่าชุดที่ประกอบด้วย "ความหนา" ที่ร้องขอของบล็อก เมื่อคำนวณแสงให้ใช้กฎของสเนลล์เพื่อคำนวณความยาวเส้นทางแสงที่รังสีจะผ่านบล็อกเลขฐานสิบหกหากจริง ๆ แล้วมันมีความหนาเท่ากับชุด "ความหนา" กล่าวและรวมอัลฟากับความยาวนั้น ที่จะให้ความโปร่งใส แต่ไม่ได้จัดการกับสิ่งต่าง ๆ เช่นการสะท้อนภายใน / TIR ฯลฯ ฉันยังไม่ได้ลองเลยดังนั้นฉันจึงไม่แน่ใจว่าผลลัพธ์ภาพจะเป็นอย่างไร ในที่สุดสำหรับระดับนี้ฉันพยายามทำให้แก้วนั้นมีลักษณะเป็นพื้นหกเหลี่ยมที่ใช้ใน Tron: Legacy ระหว่างการต่อสู้แผ่นดิสก์ ( ดูภาพนี้เป็นตัวอย่าง ) ข้อเสนอแนะ?
10 shaders  glsl 

3
ฉันจะทำให้ความละเอียดของเกม 2D เป็นอิสระได้อย่างไร
ฉันกำลังเล่นเกม 2D อย่างง่าย ฉันทำรุ่นโทรศัพท์มือถือเสร็จแล้ว อย่างไรก็ตามเจ้านายของฉันต้องการให้เกมทำงานบน RT ของเขา ฉันกำลังทำ "การแปลง" แต่ปุ่มของฉันอยู่ในตำแหน่งที่ไม่ถูกต้องเพราะฉันกำหนดขนาดหน้าจออย่างหนักเช่นนี้: texture = game.Content.Load<Texture2D>("StartScreen"); mainFrame = new Rectangle(0, 0, game.GraphicsDevice.Viewport.Width, game.GraphicsDevice.Viewport.Height); // button definitions startbrect = new Rectangle(300, 258, 88, 88); startbtext = game.Content.Load<Texture2D>("bplay"); ในตัวอย่างmainframeนี้ใช้ได้ แต่startbrectไม่ใช่เพราะฉันกำหนดขนาดเพื่อให้ตรงกับหน้าจอของ Windows Phone ฉันจะจัดการการออกแบบที่ตอบสนองได้อย่างไรเมื่อหน้าจอโทรศัพท์ Windows 8 ทุกรุ่นแตกต่างกันอย่างไร มีสูตรหรือมาโครในการคำนวณในแต่ละครั้งที่มีขนาดที่เหมาะสมหรือไม่
10 c#  2d  resolution 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.