【问题标题】:Isometric offset and mouse positioning等距偏移和鼠标定位
【发布时间】:2015-01-19 12:34:13
【问题描述】:



到目前为止,我正在构建一个等距框架,我已经完成了物理图块映射算法。

问题是我不希望每个图块发生冲突,因为循环遍历所有图块以检查我的鼠标是否正在选择特定图块。 我试图完成的是使用这个从鼠标获取单元格索引。

int col = (int)(((double)mouse_x / (double)tileWidth) - ((double)mouse_y / (double)tileHeight) - 0.5);
int row = (int)(((double)mouse_y / (double)tileHeight) + ((double)mouse_x / (double)tileWidth) - 0.5);

但是使用这种方法,我的 0,15 是根据鼠标的 0,0,而 0,0 是 0,15。 所以我的问题是如何通过编辑鼠标代码(可能使用偏移量)来交换它?
即使这样我也不知道如何,所以我的问题是如何。

【问题讨论】:

    标签: java 2d game-engine game-physics isometric


    【解决方案1】:

    我只是选择了简单的方法,而不是编辑首字母方程式。
    我通过以下方式修改了结果:

        int col = (int)(((double)mouse_x / (double)tileWidth) - ((double)mouse_y / (double)tileHeight) - 0.5);
        int row = (int)(((double)mouse_y / (double)tileHeight) + ((double)mouse_x / (double)tileWidth) - 0.5);
    
        row = mapHeight - row - 1;
    

    这会翻转结果,从而以非艺术方程的方式解决我的问题。

    【讨论】:

      【解决方案2】:

      从等轴测坐标到屏幕坐标:

      screenX = (isoX - isoY + isoMapMaxY) * (tileWidth / 2);
      screenY = (isoX + isoY) * (tileHeight / 2);
      

      从屏幕坐标到等轴坐标:

      isoX = ( ((screenY + scrollY) / tileHeight) + ((screenX + scrollX) - (isoMapMaxY * tileWidth/2)) / tileWidth )
      isoY = ( ((screenY + scrollY) / tileHeight) - ((screenX + scrollX) - (isoMapMaxY * tileWidth/2)) / tileWidth )
      
      isoX = (screenY / 32) + (screenX - 320) / 64
      isoY = (screenY / 32) - (screenX - 320) / 64
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-27
        • 2017-04-01
        • 1970-01-01
        相关资源
        最近更新 更多