You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Chunk坐标计算等距网格中单个Tile的坐标

等距Tile坐标转换解决方案

核心参数定义

先明确基础配置(根据你的实际Tile尺寸调整):

CHUNK_TILES_X = 16  # 每个Chunk横向Tile数量
CHUNK_TILES_Y = 32  # 每个Chunk纵向Tile数量
TILE_WIDTH = 64     # 单个等距Tile像素宽度
TILE_HEIGHT = 32    # 单个等距Tile像素高度
HALF_TILE_W = TILE_WIDTH // 2
HALF_TILE_H = TILE_HEIGHT // 2

单个Tile世界坐标计算

直接通过全局Tile坐标转等距的核心公式实现,无冗余计算,性能最优:

def get_tile_world_pos(cx, cy, tx, ty):
    # 计算全局Tile坐标:Chunk坐标转全局起始Tile + Chunk内Tile索引
    global_gx = cx * CHUNK_TILES_X + tx
    global_gy = cy * CHUNK_TILES_Y + ty
    
    # 等距坐标核心转换(纯数值计算,无屏幕旋转)
    world_x = (global_gx - global_gy) * HALF_TILE_W
    world_y = (global_gx + global_gy) * HALF_TILE_H
    
    return world_x, world_y

基于Chunk原点的偏移实现(复用现有Chunk原点代码)

如果你已经有计算Chunk左上角原点的逻辑,可通过Tile相对偏移叠加实现:

# 假设你已实现的Chunk原点计算函数
def get_chunk_origin(cx, cy):
    global_start_gx = cx * CHUNK_TILES_X
    global_start_gy = cy * CHUNK_TILES_Y
    return (global_start_gx - global_start_gy) * HALF_TILE_W, \
           (global_start_gx + global_start_gy) * HALF_TILE_H

def get_tile_world_pos(cx, cy, tx, ty):
    chunk_origin_x, chunk_origin_y = get_chunk_origin(cx, cy)
    
    # 计算Tile相对于Chunk原点的等距偏移
    tile_offset_x = (tx - ty) * HALF_TILE_W
    tile_offset_y = (tx + ty) * HALF_TILE_H
    
    return chunk_origin_x + tile_offset_x, chunk_origin_y + tile_offset_y

逻辑说明

  • 等距坐标的本质是将直角网格坐标(gx, gy)通过线性变换映射到世界空间,核心公式( (gx-gy)*半宽, (gx+gy)*半高 )完全避免了屏幕旋转这类高损耗操作。
  • 你的Chunk系统是直角网格,因此只需将Chunk坐标转换为全局Tile起始坐标,叠加Chunk内Tile索引后直接代入公式即可。
  • 如果你的Chunk原点定义不是对应Chunk内Tile(0,0)的坐标,只需在偏移计算中加入固定修正值即可适配。

内容的提问来源于stack exchange,提问作者Reece Harris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 01:52:06