libgdx карта с плочки вземете позицията на играча в цялата карта, за да направите миникарта

Всъщност рисувам част от моята карта с плочки, използвайки мащабиране на камерата (с OrthogonalTiledMapRenderer на основната ми камера). Камерата е центрирана върху позицията на играча (който винаги е в центъра на екрана) в свят box2d.

// Set camera postion center on player (box2d body) on every update
camera.position.set(player.getBody().getWorldCenter(), 0);

Бих искал да създам миникарта с втора камера. Прост запълнен правоъгълник с точка, която представлява позицията на играча на картата. Така че създадох нова камера:

minimapCamera = new OrthographicCamera(1280, 720); // as my main camera
minimapCamera.zoom = 6; // larger zoom
minimapCamera.position.set(-1280 * 2, 720 * 3, 0); // align bottom right corner

И се опитвам да рисувам форми:

ShapeRenderer sr = new ShapeRenderer();
sr.setAutoShapeType(true);
sr.setProjectionMatrix(minimapCamera.combined);
sr.begin(ShapeType.Filled);
sr.setColor(0.5f, 0.5f, 0.5f, 0.3f);
// minimap rectangle background
sr.rect(0, 0, minimapCamera.viewportWidth, minimapCamera.viewportHeight);
sr.setColor(1f, 0f, 0f, 0.4f);
// player circle point
sr.circle(playerPos.x, playerPos.y, 20);
sr.end();

Но как мога да изчисля позицията на играча playerPos в цялата подредена карта? И как да нарисувам само част от увеличената карта? (Не искам да рисувам цялата карта, а по-голяма секция от основната ми камера).

РЕДАКТИРАНЕ: Ако искам да използвам отново моята карта с плочки в моята миникарта, как мога да начертая само видима за играча секция в миникартата (в момента цялата карта се изобразява дори ако посоча малък размер на камерата)?


person Aure77    schedule 27.01.2015    source източник


Отговори (1)


Ако приемем, че вашата карта на плочки използва редове и колони и всяка клетка има зададена ширина и височина, можете да получите позицията на играча в масива на картата на плочките по този начин (надявам се, че нямате нищо против JavaScript):

var player={x:200,y:200};/* Or whatever position. */
var tile_width=tile_height=32;/* Or whatever dimension you're using. */

player.tile_x=Math.floor(player.x/tile_width);
player.tile_y=Math.floor(player.y/tile_height);

Това ви дава точната плочка x и y, която играчът заема в света.

person Frank    schedule 07.02.2015
comment
Мисля, че трябва да коригирате математиката, за да вземете предвид текущия прозорец за изглед, тъй като той може да не рисува/вижда цялата карта наведнъж? - person Victor Lee; 06.12.2017