Я пишу игру в виде 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 Viewlet Applet.
Мое лучшее предположение - то, что изображения каким-то образом кэшируются браузером, хотя на самом деле я в тупике.Я не пробовал загружать / рисовать изображения с другим набором графических библиотек (Slick2D, LWJGL и т. Д.).Спасибо за любые предложения!