Свинг рисует по неверным координатам - PullRequest
1 голос
/ 08 марта 2011

Я строю симулятор, чтобы помочь проекту, над которым я работаю с некоторыми ребятами из Uni.Я анимирую то, что по сути является футбольным полем с двумя «игроками» (на самом деле роботами Lego).

Проблема, с которой я сталкиваюсь, состоит в том, что координаты, которые я использую для рисования, кажутся неправильными, поскольку все отрисовывается дальше(в х и у), чем я намерен.Например, чтобы нарисовать белую линию на дальней стороне поля, я делаю это:

double X_RATIO = this.getSize().width / 244;
double Y_RATIO = this.getSize().height / 122;

g.fillRect((int) (243 * X_RATIO), (int) (0 * Y_RATIO), (int) (1 * X_RATIO), (int) (122 * Y_RATIO));

Вы можете видеть, что я масштабирую там, где он нарисован, до текущего размера, поэтому я всегда могу использовать стандартный размершаг как моя система координат (здесь это 244 х 122).Однако эта линия рисуется на расстоянии не менее 10 пикселей от правой стороны панели (также снизу вверх примерно на 5 пикселей).

Сначала я думал, что это будет связано с кастингом, но я оставляю это до последней возможной секунды (только кастинг на этапе розыгрыша, где позиции должны быть в любом случае int).Кто-нибудь знает, в чем может быть проблема?Само собой разумеется, это очень расстраивает, поскольку я не могу видеть, что не так с моей математикой.

Ответы [ 2 ]

3 голосов
/ 08 марта 2011

Проверьте ваши отношения X_RATIO и Y_RATIO, так как вы использовали целочисленное деление справа. Вы можете заменить его на

double X_RATIO = this.getSize().width / 244.0;
double Y_RATIO = this.getSize().height / 122.0;

, чтобы получить правильное поведение при масштабировании.

1 голос
/ 08 марта 2011

Я думаю, что это происходит из-за способа инициализации отношений: вы делите int, поэтому результатом является int, а не double. приведите одно из значений к двойному, чтобы получить двойной результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...