Java обернутые изображения? - PullRequest
1 голос
/ 03 марта 2012

У меня есть изображение, которое я рисую в java 2d, но я хочу, чтобы оно сохранялось навсегда, как только координаты выходят за рамки размера изображения. На данный момент проблема заключается в том, что, как только указанные мной координаты выходят за пределы размера изображения, они ничего не рисуют, поэтому изображение заканчивается.

Например, изображение, которое постоянно движется горизонтально и не заканчивается.

int posx = (int) ((Player.x / 20));
int posy = (int) ((Player.y / 20));
g.drawImage(SpaceBGLayer0, 0, 0, screenwidth, screenheight, posx, posy, posx+3000, posy+3000, null, null);

1 Ответ

0 голосов
/ 03 марта 2012

Чтобы обернуть изображение, вам нужно сначала проверить, нет ли какого-либо «переполнения» (то есть любых частей экрана, где требуется обтекание).Существует 4 случая: без переполнения, переполнения по оси x, переполнения по оси y, переполнения по оси x и y.

В зависимости от ситуации вам может потребоваться нарисовать дополнительные копии вашего изображения, смещенного на 3000 пикселей в x, y или в обоих.*

Я предположил, что ваша точка (posx, posy) соответствует левому нижнему углу экрана, и что screenWidth и screenHeight меньше 3000 ...

// calculate posx and posy, ensuring they lie within 0-2999:
int posx = (3000+((int)(Player.x / 20))%3000)%3000;
int posy = (3000+((int)(Player.y / 20))%3000)%3000;

// test for overflow:
boolean xOverflow = (posx+screenWidth > 3000);
boolean yOverflow = (posy+screenHeight > 3000);

// draw the image:
drawMyImage(posx,posy);
// if necessary, draw displaced copies:
if(xOverflow) drawMyImage(posx-3000,posy);
if(yOverflow) drawMyImage(posx,posy-3000);
if(xOverflow && yOverflow) drawMyImage(posx-3000,posy-3000);

...

private static void drawMyImage(int x, int y){
    int dx1 = Math.max(-x,0);
    int dy1 = Math.max(-y,0);
    int dx2 = Math.min(3000-x,screenWidth);
    int dy2 = Math.min(3000-y,screenHeight);
    int sx1 = Math.max(x,0);
    int sy1 = Math.max(y,0);
    int sx2 = Math.min(x+screenWidth,3000);
    int sy2 = Math.min(y+screenHeight,3000);
    g.drawImage(SpaceBGLayer0, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, null, null);
}

У меня естьне проверял это.Вы должны заменить все 3000 на некоторые переменные, такие как backgroundWidth и backgroundHeight ...

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