Экранное покрытие

Я реализую игру с классическим экраном эффектом wraparound . Это очень просто: если игрок выходит из-под экрана, он снова появляется на противоположной стороне ( Астероиды - хороший пример).

float x = getX();
float y = getY();

float screenW = screen.getWidth();
float screenH = screen.getHeight();

if (x > screenW)
    x = 0;
else if (x < 0)
    x = screenW;

if (y > screenH)
    y = 0;
else if (y < 0)
    y = screenH;

setPosition(x,y);

Как я могу улучшить этот код, чтобы сделать его более чистым? Те несколько похожих выражений if особенно выглядят уродливо для меня.

11 голосов | спросил Kao 25 J000000Friday14 2014, 20:32:29

1 ответ


10

Текущий код не обертывается в «традиционном» смысле, например:

  • для screenW + 1, он дает 0
  • для screenW + 2, он дает 0 (вместо 1)
  • для screenW + 3, он дает 0 (вместо 2)
  • ...
  • для -1 дает screenW
  • для -2 дает screenW (вместо screenW - 1)
  • для -3 он дает screenW (вместо screenW - 2)

Если это предполагаемое поведение, тогда от этих ifs нет выхода.

В любом случае вы должны извлечь логику обертывания к функции, а не повторять ее дважды:

private float wrapAroundSharply(float coordinate, float max) {
    if (coordinate < 0) {
        return max;
    }
    if (coordinate > max) {
        return 0;
    }
    return coordinate;
}
ответил janos 25 J000000Friday14 2014, 21:42:48

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132