二维正交假无限网格上的瓷砖选择

问题描述 投票:0回答:0

我找不到正确的偏移量来获取在模拟假网格上选择的图块。


我在中心偏移的纹理(monogame renderTarget)上绘制网格:

GRID_CENTER_X = (SCREEN_WIDTH / 2) - ((GRID_WIDTH * TILE_WIDTH) / 2) + (TILE_WIDTH / 2)

GRID_CENTER_Y = (SCREEN_HEIGHT / 2) - ((GRID_HEIGHT * TILE_HEIGHT) / 2)

然后我使用此功能移动相机:

public void Move(float SPEED_X, float SPEED_Y)
{
   CAMERA_X += (SPEED_X * 10) * DELTA_TIME;
   CAMERA_Y += (SPEED_Y * 10) * DELTA_TIME;
   
   DIST_X = CAMERA_X / SPEED_X;
   DIST_Y = CAMERA_Y  / SPEED_Y;
   //Tried to use this for the offsets.. doesnt work
   //also tried to divide camera's x & y position by tile size , not working..
}

然后我更新我在上面绘制瓷砖的网格图像:

GRID_X  = CAMERA_X + GRID_CENTER_X`;
GRID_Y  = CAMERA_Y + GRID_CENTER_Y;

if(CAMERA_X >= TILE_WIDTH * 10 || CAMERA_X <= - TILE_WIDTH * 10) CAMERA_X = 0;

if(CAMERA_Y >= TILE_HEIGHT * 10 || CAMERA_Y <= - TILE_HEIGHT * 10) CAMERA_Y = 0;

它给人一种网格无限的错觉,但我只是把它移回去 一旦到达一定距离,就会到达其前面的位置。

我用这个公式画的瓷砖(Cell2World)

TILE_X = TILE_I * TILE_WIDTH;
TILE_Y = TILE_J * TILE_HEIGHT;

当相机不移动时,瓷砖部分效果很好使用以下公式(World2Cell)

TILE_I = WORLD_X / TILE_WIDTH;
TILE_J = WORLD_Y / TILE_HEIGHT;

以下是我如何将图像放置到光标位置以进行图块选择:

CURSOR_I = CURSOR_X / TILE_WIDTH;
CURSOR_J = CURSOR_Y / TILE_HEIGHT;

CURSOR_X = CURSOR_I * TILE_WIDTH;
CURSOR_Y = CURSOR_J * TILE_HEIGHT;

这基本上是

CURSOR_X = Cell2World(World2Cell(mousePosition)).X;
CURSOR_Y = Cell2World(World2Cell(mousePosition)).Y;

我应该向 World2Cell 添加什么以包括网格/相机偏移等,将光标放在正确的位置以执行图块选择?

tile selection

c# 2d game-development monogame tile
© www.soinside.com 2019 - 2024. All rights reserved.