Dünya Koordinatlarını Kullan
(Ya da koyduğunuzda, her şeyi yüzer.)
Dünya koordinatları genellikle birlikte çalıştığınız şeylerdir ve bunun birçok nedeni vardır. Bunlar, dünyadaki konumunuzu temsil etmenin en basit ve sezgisel yoludur ve aynı dünyadaki herhangi iki varlığın pozisyonlarını gerçekten karşılaştırmanın tek yoludur.
Bireysel bloklarda izlenmesini sağlayarak işten başka bir şey kazanamazsınız. Bir avantajı, hangi blokta olduğunu belirleyebilmenizdir, ancak bunu dünya koordinatlarıyla zaten hesaplayabilirsiniz.
Bu cevabın geri kalanı, bir oyuncunun içinde bulunduğu dünya bloğunu dünya koordinatlarına göre nasıl hesaplayacağının bir açıklaması olacaktır.
Kod parçacığını, 2B vektör sınıfınız varmış gibi yazacağım Vector2
- geometride bulduğunuz vektör Vector
türü, sunduğu liste türü değil java.util
. Herhangi bir geometrik Vector sınıfınız yoksa, bazılarını çevrimiçi bulmalı veya kendiniz yazmalısınız (Java için herhangi bir kaliteli geometri kitaplığı bilen var mı?)
Vector2 sınıfında , genel sayı olan bir X
alan ve Y
alan bulunur (burada hangi sayısal türün önemi yoktur).
// 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 fonksiyon> tüm blok içi izleme ve bloklar arası aktarım karmaşası