我正在处理一个Java game
,我需要计算鼠标在世界空间中的坐标,同时改变游戏窗口的resolution
。我现在使用下面的代码来执行计算:
Game.s2wX = (int)(((mouseX - (Window.REAL_WIDTH() / 2 - Window.SCALED_WIDTH() / 2)) / s) - (-x - width/2 + (Window.SCALED_WIDTH() / s) / 2));
Game.s2wY = (int)(((mouseY - (Window.REAL_HEIGHT() / 2 - Window.SCALED_HEIGHT() / 2)) / s) - (-y - height / 2 + (Window.SCALED_HEIGHT() / s) / 2));
游戏在屏幕上居中绘制,使用以下代码:
g.drawImage(image,
Window.REAL_WIDTH()/2-Window.SCALED_WIDTH()/2,
Window.REAL_HEIGHT()/2-Window.SCALED_HEIGHT()/2,
Window.SCALED_WIDTH(), Window.SCALED_HEIGHT(),null);
我怀疑resolution changes
时,s2wX
和s2wY
变量中的鼠标坐标计算不正确。有人能帮助我了解如何正确计算鼠标在世界空间中的坐标,同时适应分辨率的变化吗?
它在720 x480窗口和全屏上工作得非常好,因为它指向0,0到左上角。但是当我试图增加分辨率时,我有一个偏移。红色标记指向鼠标光标。
更新:@HassanUsman指出了缩放因子,它几乎完成了,但有一些小问题:
double scalingFactorX = (double) Window.SCALED_WIDTH() / Window.REAL_WIDTH();
double scalingFactorY = (double) Window.SCALED_HEIGHT() / Window.REAL_HEIGHT();
Game.s2wX = (int)(Window.SCALED_WIDTH() +(mouseX/s)+scalingFactorX - (-x - width/2 + (Window.REAL_WIDTH() /s)/2));
Game.s2wY = (int)(Window.SCALED_HEIGHT()+(mouseY/s)+scalingFactorY - (-y - height/2 + (Window.REAL_HEIGHT()/s)/2));
1条答案
按热度按时间rta7y2nd1#
试试这个:
更新代码:
在这段代码中,我根据分辨率变化时的世界空间来调整鼠标坐标。