ปัญหาบ่อน้ำ (Draw Order) II
posted on 09 Jan 2008 10:52 by xnanoob in Tutorials
สวัสดีค่า
จากวันก่อนก้องงๆ กับลำดับการวาดภาพในสองมิติ
ครั้งก่อนโน้น ใช้การวาดสองครั้ง แต่การเรียกใช้ method draw สองครั้งนั้นคงไม่ค่อยมีสไตล์เท่าไหร่
ก้อได้รับความช่วยเหลือจากคุณ "boheman" มาอะงิ ต้องขอขอบคุณมา ณ ที่นี้ด้วย
ใน XNA มี method Draw ที่ overload ตั้งหลายอันให้ใช้นะค่ะ
คุณ boheman แนะนำให้ใช้ LayerDepth เข้ามาช่วยก้ออโอเคเลย.. ทำให้ในการวาดรูปเรียกใช้ method draw เพียงครั้งเดียว (คือเรียกใช้ SpriteBatch.Draw ครั้งเดียวแระ)
LayerDepth ก้อแบบว่าใน photoshop ที่รูปเราเป็น layerๆ อะ หรือไม่ก้อนึกแบบที่อ.ปิ้งแผ่นใสตอนสอนหนังสือที่วางๆ หน้าห้องเรียน
แต่ก่อนอื่นในการใช้นั้นต้องกำหนดใน SpriteBatch.Begin ให้เป็นแบบข้างล่างนะ เพื่อกำหนดให้มันทำงานได้
ไม่งั้นไม่รู้เหมือนกันว่าทำไมไม่มีผลกระทบของการแสดงแบบ layer
กำหนดใน Spritebatch.Begin ก่อนนะ
กำหนดให้ ประตูมี layer ที่ 0.6 อันนี้ก้อกำหนดเอาเอง ค่าอยู่ระหว่าง 0 ถึง 1 นะ
- ก้อแบบว่า 0.99 ก้อวาดหลังสุด
- 0.01 ก้อวาดก่อน ไรแบบเนี้ย
ตัวอย่างการเช็ค คือ ในตัวอย่างนี้ประตูมีพิกัดในแกน Y อยู่ที่ 372
ถ้ามันมากกว่าก้อเช็ค ให้ LayerDepth เป็น 0.7 คือวาดหลัง

รูป A.) ทีน่าไปหลบหลังประตู (ประตูวาดหลัง) และ B.) ทีน่าวาดหลัง
จบแระค่ะ บายค่ะ ... เฮือก

โคสะนา : เปิด อบรม เรียน สอน การเขียนโปรแกรมด้วยภาษา PHP+MySQL ในรูปแบบของ OOP สนใจติดต่อ
http://www.asiamediasoft.net นะค่ะ
จากวันก่อนก้องงๆ กับลำดับการวาดภาพในสองมิติ
ครั้งก่อนโน้น ใช้การวาดสองครั้ง แต่การเรียกใช้ method draw สองครั้งนั้นคงไม่ค่อยมีสไตล์เท่าไหร่
ก้อได้รับความช่วยเหลือจากคุณ "boheman" มาอะงิ ต้องขอขอบคุณมา ณ ที่นี้ด้วย
ใน XNA มี method Draw ที่ overload ตั้งหลายอันให้ใช้นะค่ะ
คุณ boheman แนะนำให้ใช้ LayerDepth เข้ามาช่วยก้ออโอเคเลย.. ทำให้ในการวาดรูปเรียกใช้ method draw เพียงครั้งเดียว (คือเรียกใช้ SpriteBatch.Draw ครั้งเดียวแระ)
LayerDepth ก้อแบบว่าใน photoshop ที่รูปเราเป็น layerๆ อะ หรือไม่ก้อนึกแบบที่อ.ปิ้งแผ่นใสตอนสอนหนังสือที่วางๆ หน้าห้องเรียน
แต่ก่อนอื่นในการใช้นั้นต้องกำหนดใน SpriteBatch.Begin ให้เป็นแบบข้างล่างนะ เพื่อกำหนดให้มันทำงานได้
ไม่งั้นไม่รู้เหมือนกันว่าทำไมไม่มีผลกระทบของการแสดงแบบ layer
|
spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.FrontToBack, SaveStateMode.None); |
|
spriteBatch.Draw(Door, new Vector2(500, 300),null, Color.White, 0, Vector2.Zero, 1, SpriteEffects.None, 0.6f); |
- ก้อแบบว่า 0.99 ก้อวาดหลังสุด
- 0.01 ก้อวาดก่อน ไรแบบเนี้ย
| if (Position.Y+Img.Height > 372){
LayerDepth = 0.7f; } |
ถ้ามันมากกว่าก้อเช็ค ให้ LayerDepth เป็น 0.7 คือวาดหลัง

รูป A.) ทีน่าไปหลบหลังประตู (ประตูวาดหลัง) และ B.) ทีน่าวาดหลัง
จบแระค่ะ บายค่ะ ... เฮือก

โคสะนา : เปิด อบรม เรียน สอน การเขียนโปรแกรมด้วยภาษา PHP+MySQL ในรูปแบบของ OOP สนใจติดต่อ
http://www.asiamediasoft.net นะค่ะ
Tags: draw order, spritebatch, xna, xnanoob1 Comments








แต่ยังไม่รู้เลยว่าจะได้ใช้เมื่อไร...T^T
#1 By robocon on 2008-01-09 12:09