5
อัลกอริทึมการปูกระเบื้องแผนที่
แผนที่ ฉันกำลังสร้าง RPG แบบเรียงต่อกันพร้อมจาวาสคริปต์โดยใช้ความสูงของเสียง perlin จากนั้นกำหนดประเภทของไทล์ตามความสูงของเสียง แผนที่จะมีลักษณะดังนี้ (ในมุมมองย่อแผนที่) ฉันมีอัลกอริทึมที่ค่อนข้างง่ายซึ่งแยกค่าสีจากแต่ละพิกเซลของภาพและแปลงเป็นจำนวนเต็ม (0-5) ขึ้นอยู่กับตำแหน่งระหว่าง (0-255) ซึ่งสอดคล้องกับไทล์ในพจนานุกรมกระเบื้อง อาร์เรย์ 200x200 นี้จะถูกส่งไปยังไคลเอนต์ จากนั้นเอ็นจิ้นจะกำหนดไทล์จากค่าในอาเรย์แล้วนำไปวางบนผืนผ้าใบ ดังนั้นฉันจึงจบลงด้วยโลกที่น่าสนใจที่มีคุณสมบัติการมองที่เหมือนจริง: ภูเขาทะเล ฯลฯ ตอนนี้สิ่งต่อไปที่ฉันอยากทำคือใช้อัลกอริธึมผสมบางชนิดที่จะทำให้แผ่นกระเบื้องกลมกลืนกับเพื่อนบ้านได้อย่างกลมกลืนหากเพื่อนบ้านไม่ได้เป็นแบบเดียวกัน แผนที่ตัวอย่างด้านบนคือสิ่งที่ผู้เล่นเห็นในแผนที่ย่อ บนหน้าจอพวกเขาเห็นเวอร์ชันที่แสดงผลของส่วนที่ทำเครื่องหมายโดยสี่เหลี่ยมสีขาว ตำแหน่งที่ไทล์ถูกเรนเดอร์ด้วยรูปภาพแทนที่จะเป็นพิกเซลสีเดียว นี่คือตัวอย่างของสิ่งที่ผู้ใช้จะเห็นในแผนที่ แต่มันไม่ใช่ตำแหน่งเดียวกับวิวพอร์ตด้านบนแสดง! มันอยู่ในมุมมองนี้ที่ฉันต้องการให้การเปลี่ยนแปลงเกิดขึ้น อัลกอริทึม ฉันคิดอัลกอริธึมง่ายๆที่จะสำรวจแผนที่ภายในวิวพอร์ตและแสดงภาพอื่นที่ด้านบนสุดของแต่ละไทล์โดยให้เป็นภาพถัดจากไทล์ประเภทอื่น (ไม่เปลี่ยนแผนที่เพียงแสดงภาพพิเศษบางส่วน) แนวคิดของอัลกอริทึมคือแสดงโปรไฟล์เพื่อนบ้านของกระเบื้องปัจจุบัน: นี่เป็นสถานการณ์ตัวอย่างของสิ่งที่เอ็นจิ้นอาจต้องเรนเดอร์โดยไทล์ปัจจุบันจะถูกทำเครื่องหมายด้วย X อาร์เรย์ 3x3 ถูกสร้างขึ้นและอ่านค่ารอบ ๆ ดังนั้นตัวอย่างนี้อาร์เรย์จะมีลักษณะเช่นนี้ [ [1,2,2] [1,2,2] [1,1,2] ]; ความคิดของฉันคือการหาชุดของกรณีสำหรับการกำหนดค่าไทล์ที่เป็นไปได้ ในระดับที่ง่ายมาก: if(profile[0][1] != profile[1][1]){ //draw a …