Я пишу игру как java-апплет, используя библиотеки Java2D вместе с классом BufferedImage. Игра подтормаживает (2-3 секунды) при первом отрисовке изображения. Все файлы BufferImage загружаются до начала игры с помощью этого метода:
bufferedImage = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
try {
URL url = new URL(a.getCodeBase(), "images//smoke5frames.png");
bufferedImage = ImageIO.read(url);
} catch (IOException e) { e.printStackTrace(); }
mSmoke = bufferedImage;
Чтобы нарисовать изображение, я использую этот метод:
public void draw(Graphics2D g) {
g.drawImage(mTextures[iCurrentFrame], mAffineTransform, null); }
Рассматриваемые изображения представляют собой SheetedSprites, обычно вырезаемые из листа спрайтов с использованием:
for each frame in animation...
myBufferedImage.getSubimage(i * iFrameWidth, 0, iFrameWidth, iHeight);
Это делается во время игры, когда сущность создается. Удаление этой строки не решило проблему, поэтому я предполагаю (возможно, плохо), что getSubimage() недостаточно дорог, чтобы вызвать проблему.
Я мог бы зациклить каждый кадр анимации и нарисовать их все для быстрого исправления, но я хотел бы больше понять проблему и почему это происходит.
Суть в том, что после того, как SheetedSprite был отрисован один раз, вы можете обновить страницу, и проблема больше не возникнет. Игра работает идеально гладко после того, как все было нарисовано до этого. Это имеет место как в IE, так и в Chrome (я не пробовал в других браузерах). В качестве примечания: проблема никогда не возникает в средстве просмотра апплетов Eclipse.
Я думаю, что изображения каким-то образом кэшируются браузером, хотя на самом деле я в тупике. Я также не пробовал загружать/рисовать изображения с другим набором графических библиотек (Slick2D, LWJGL и т. д.). Спасибо за любые предложения!
draw(G2D)
и как получается графический объект? На самом деле нет, вычеркните именно этот вопрос, предоставьте ответ как SSCCE. - person Andrew Thompson   schedule 21.03.2012