Вопрос

Итак, у меня есть изображение плитки tile.png, и я пытаюсь создать мозаичную карту по всему окну. Я строю это как апплет. Так выглядит мой метод рисования, но он не эффективен. Когда я запускаю апплет, это занимает около 2 секунд, и весь экран закрашивается слева направо с изображением, а не все отображается сразу. Кроме того, все это выглядит как один большой tile.png, а не как 40 маленьких экземпляров tile.png

public void paint(Graphics g)
{
    Image tile=getImg("tile.png");
    int width=this.getWidth();
    int height=this.getHeight();

    int x;
    int y;
    for (x=0; x<= width; x++)
    {
        for (y=0; y<= height; y++)
        {
            g.drawImage(tile, x, y, this);
        }
    }
}

Кстати, файл tile.png имеет размер 10 x 10 пикселей, это фактическое изображение:

tile.png http://img12.imageshack.us/img12/1368/ tile.png

Редактировать: используя приведенный ниже код и улучшив изображение плитки, я исправил это. Вот мой новый тайл img на случай, если он кому-нибудь поможет:

 tile-new.png

Это было полезно?

Решение

    for (x=0; x<= width / tileWidth; x++)
    {
            for (y=0; y<= height / tileHeight ; y++)
            {
                    g.drawImage(tile, x * tileWidth, y * tileHeight, this);
            }
    }

Вам необходимо сместить ширину / высоту плитки.

Другие советы

Как примечание, вы, вероятно, захотите начать проверку " области обрезки " в какой-то момент и не рисуя вещи за пределами этого региона. Ваш код настроен очень хорошо для этого.

Еще одна вещь, которую вы можете сделать, чтобы ускорить ее, - это "Двойной буфер". Создайте компонент размером с вашу карту, вызовите getGraphics () для этого компонента, сделайте все свои рисунки для этого нового графического объекта, затем просто нарисуйте свой компонент к реальному объекту Graphics, переданному в ваш метод рисования.

Хорошая вещь в этом заключается в том, что вы можете нарисовать всю карту до того, как вы когда-либо нажмете на оператор рисования, а затем мгновенно вытолкнуть ее.

Google Double Buffering на Java для получения дополнительной информации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top