gpt4 book ai didi

Java 当我将参数传递给此方法时,在执行该方法中的任何代码之前,它被错误地除以我的常量之一

转载 作者:行者123 更新时间:2023-11-29 05:55:57 28 4
gpt4 key购买 nike

我有一个类,它是一个非常简单的游戏内关卡编辑器,适用于由 Sprites 下的平铺图像组成的 2D 游戏。我正在调试的代码的目的是根据用户点击的位置更新 StringBuffer 中的字符,以更改在点击位置显示的图 block 。

正在修改的字符串缓冲区被程序用作 map ,以标识应在哪个图 block 上绘制哪些图像。 Buffer 中使用的每个 char 值将代表 1 个图 block ,char 的值决定在那里显示哪个图像。为此,我定义了一个常量整数(public static final int TILE_SIZE)为 40。我的图 block 都是大小为 40 x 40 像素的正方形,所以这个常量用于帮助计算任何需要根据图像的调整宽度和高度。

问题是这样的:每当用户点击屏幕时,传递给更新我的 StringBuffer 的方法的鼠标的 x 和 y 值在该方法中的任何代码执行之前被除以 40。

相关代码如下:

    private void modifyGeometry(int x, int y, char tile){
//Levels are 20x20 grids
int xIndex=x;//The value of the index we will read based on x
int yIndex=y;//The value of the index we will read based on y

if(x<21*TILE_SIZE && y<21*TILE_SIZE){//For safety reasons, check that the x and y aren't somehow greater than the screen

xIndex=xIndex/TILE_SIZE;//Factor x down to which tile in the row it is on

yIndex=yIndex/TILE_SIZE;//Factor y down to which tile in the column it is on

if(xIndex>19){//We will need to reduce the value of x if its factor based on the TILE_SIZE is greater than 19 (a row is 0-19)
int storetemp=xIndex/20;
xIndex=xIndex-(20*storetemp);//Because xIndex is an int, xIndex/20*20 does not come out to xIndex, but instead only the first digit of xIndex (0-9)
}

if(y>19){
int storetemp=yIndex/20;
yIndex=yIndex-(20*storetemp);
}
}

int index=xIndex+yIndex;
this.geometry.setCharAt(index, tile);//This will set the character corresponding to the point the player clicked to the tile selected
}

...

private class MouseInput extends MouseAdapter{
public void mouseClicked(MouseEvent e){
if(layer==0){
modifyGeometry(e.getX(),e.getY(),currentTile);
}

我在 Eclipse 的调试器中使用了一些断点来确定 e.getX() 和 e.getY() 正在获得正确的坐标(我对此毫不怀疑),但在 int xIndex=x 之前, x 和 y 均已除以常数 (40)。在传递变量和接收变量的方法之间,我编写的任何方法都不会被调用。

最佳答案

非常非常怀疑这里发生了什么神奇的事情。选项:

  • 你的诊断是错误的
  • 您实际上并没有运行您认为正在运行的代码,例如由于构建已过时
  • 如果您正在使用 AOP 或其他修改字节码的东西,可能会产生影响

我会添加一些日志记录而不是依赖调试器。例如:

private class MouseInput extends MouseAdapter{
public void mouseClicked(MouseEvent e){
if(layer==0){
int x = e.getX();
int y = e.getY();
log.info("About to modify geometry; x=" + x + "; y=" + y);
modifyGeometry(x, y, currentTile);
}
}
}

和:

private void modifyGeometry(int x, int y, char tile) {
log.info("Within modifyGeometry; x=" + x + "; y="+ y);
...
}

我会惊讶发现那些日志行显示不同的值。

我还要补充一点,关于进一步除以 20 的业务非常令人困惑,并建议实际上您应该能够显着简化您的设计。

关于Java 当我将参数传递给此方法时,在执行该方法中的任何代码之前,它被错误地除以我的常量之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12125211/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com