如果声明hack,是否有更好的方法来写这个?

nul*_*ser 1 java if-statement

我正在尝试编写一个简单的侧卷轴游戏的实验性第一枪.如果玩家在某个方向上移动得太远,我会使用此代码重新定位屏幕.

有没有更好的方法来写它?我觉得我在滥用这种语言,但它很好用,我认为它可能没问题.

public void adjustFrameIfNecessary()
{
    int dx, dy;
    if ((dx = (GAME_WIDTH - GAME_WIDTH / 3) - player.x) < 0 || (dx = GAME_WIDTH / 3 - player.x) > 0 || (dx = 0) == 0);
    if ((dy = (GAME_HEIGHT - GAME_HEIGHT / 3) - player.y) < 0 || (dy = GAME_HEIGHT / 3 - player.y) > 0 || (dy = 0) == 0);

    if(dx != 0 || dy != 0)
    {
        for (Drawable shiftMe : drawables)
        {
            shiftMe.unconditionalShift(dx, dy);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

编辑

关于每个人的意见,为了使其更具可读性,我已将其改为此

public void adjustFrameIfNecessary()
{
    int dx, dy;

    assignX:
    {
        dx = (GAME_WIDTH - GAME_WIDTH / 3) - player.x;
        if(dx < 0) break assignX;
        dx = GAME_WIDTH / 3 - player.x;
        if(dx > 0) break assignX;
        dx = 0;
    }

    assignY:
    {
        dy = (GAME_HEIGHT - GAME_HEIGHT / 3) - player.y;
        if(dy < 0) break assignY;
        dy = GAME_HEIGHT / 3 - player.y;
        if(dy > 0) break assignY;
        dy = 0;
    }

    if (dx != 0 || dy != 0)
    {
        for (Drawable shiftMe : drawables)
        {
            shiftMe.unconditionalShift(dx, dy);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

这是否更好?

编辑2

public void adjustFrameIfNecessary()
{
    int dx = calculateShift(GAME_WIDTH, frameReference.x);
    int dy = calculateShift(GAME_HEIGHT, frameReference.y);

    if (dx != 0 || dy != 0)
    {
        for (Drawable shiftMe : drawables)
        {
            shiftMe.unconditionalShift(dx, dy);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为现在很清楚.感谢大家.

Rob*_*ner 5

我不确定我理解你为什么要把这些if陈述放在首位.您应该在初始化时简单地分配变量.

dx = (GAME_WIDTH - GAME_WIDTH / 3) - player.x)
dy = (GAME_HEIGHT - GAME_HEIGHT / 3) - player.y)
Run Code Online (Sandbox Code Playgroud)

无论你的if陈述如何,他们都会被分配到那里.如果rearches第三个条件,那么它已经零,因此没有理由为它分配.丢弃这两个if语句,而只是坚持直接变量赋值.将条件保持在for循环之上,这是您需要进行的唯一检查.