我正在尝试编写一个简单的侧卷轴游戏的实验性第一枪.如果玩家在某个方向上移动得太远,我会使用此代码重新定位屏幕.
有没有更好的方法来写它?我觉得我在滥用这种语言,但它很好用,我认为它可能没问题.
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)
我认为现在很清楚.感谢大家.
我不确定我理解你为什么要把这些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循环之上,这是您需要进行的唯一检查.
| 归档时间: |
|
| 查看次数: |
322 次 |
| 最近记录: |