ใช้พิกัดโลก
(หรือตามที่คุณวางไว้ลอยทุกอย่าง)
พิกัดโลกเป็นสิ่งที่คุณทำงานโดยทั่วไปและมีเหตุผลมากมาย มันเป็นวิธีที่ง่ายและใช้งานง่ายที่สุดในการเป็นตัวแทนตำแหน่งของคุณในโลกและเป็นวิธีเดียวที่จะเปรียบเทียบตำแหน่งของสองหน่วยงานใด ๆ ในโลกเดียวกัน
คุณไม่ได้อะไรนอกจากทำงานโดยให้เขาถูกติดตามภายในแต่ละบล็อก ข้อดีอย่างหนึ่งก็คือคุณจะได้ทราบว่าเขาบล็อกอะไรอยู่ แต่คุณสามารถคำนวณมันด้วยพิกัดโลกได้แล้ว
ส่วนที่เหลือของคำตอบนี้จะอธิบายถึงวิธีการคำนวณบล็อกโลกที่ผู้เล่นอยู่บนพื้นฐานของพิกัดโลกของเขา
ฉันจะเขียนข้อมูลโค้ดเช่นถ้าคุณมี 2D เวกเตอร์ชั้นชื่อVector2
- ชนิดของเวกเตอร์ที่คุณพบในเรขาคณิตไม่ได้เป็นรายการประเภทที่นำเสนอโดยVector
java.util
หากคุณไม่มีคลาส Vector ทางเรขาคณิตคุณควรหาแบบออนไลน์หรือเขียนด้วยตัวเอง
คลาส Vector2 จะมีX
เขตข้อมูลและY
เขตข้อมูลซึ่งเป็นตัวเลขสาธารณะ (ไม่สำคัญว่าจะเป็นประเภทตัวเลขใดที่นี่)
// Current player X,Y position in the world
Player.Position.X, Player.Position.Y
// An array of map blocks with consistent width and height
Block[x][y] blocks = World.GetBlocks();
// We'll wing it with an example global width/height for all blocks
Block.GetWidth() == 100;
Block.GetHeight() == 100;
// To ensure we're on the same page:
// blocks[0][0] should be at position (0,0) in the world.
// blocks[2][5] should be at position (200,500) due to the width/height of a block.
// Also:
// Assuming (0,0) is in the top-left of the game world, the origin of a block
// is its top-left point. That means the point (200,500) is at the top-left of
// blocks[2][5] (as oppose to, say, its center).
public Vector2 GetPlayersBlockPosition() {
Vector2 blockPosition = new Vector2();
blockPosition.X = (int)(Player.Position.X / Block.GetWidth());
blockPosition.Y = (int)(Player.Position.Y / Block.GetHeight());
return blockPosition;
}
public Block GetPlayersBlock() {
Vector2 bp = GetPlayersBlockPosition();
return blocks[bp.X, bp.Y];
}
Block block = GetPlayersBlock();
2 ฟังก์ชั่น> ระเบียบทั้งหมดของการติดตามภายในบล็อกและการถ่ายโอนระหว่างบล็อก