2015-03-27 2 views
1

Я делаю своего рода 2D-платформер, и я хочу анимацию взорвать, когда когда-либо происходит какая-то вещь. Я использую lwjgl для загрузки текстур, но когда я пытаюсь загрузить gif, он просто показывает первый кадр. Итак, есть ли способ сказать, чтобы показать следующий кадр или есть специальный способ, которым вы должны его загрузить?(LWJGL) Как загрузить анимированные GIFS?

ответ

1

вы можете попробовать создать буферную таким образом:

// create buffers for animated gifs 
    if (logo != null) { 
    logoBuffer = createImage(logo.getWidth(null), logo.getHeight(null)); 
    // add image observer, it will notify when next animated gif frame is ready 
    offscreen.getGraphics().drawImage(logo, 0, 0, this); 
    // in case image is not animated fill image buffer once 
    imageUpdate(logo, ImageObserver.FRAMEBITS, 0, 0, 0, 0); 
    /** 
    * When an animated gif frame is ready to be drawn the ImageObserver 
    * will call this method. 
    * 
    * The Image frame is copied into a buffer, which is then drawn. 
    * This is done to prevent image tearing on gif animations. 
    */ 
    public boolean imageUpdate(Image img, int flag, int x, int y, int width, int height) { 

     // finish with this ImageObserver 
     if (state == STATE_DONE) return false; 

     // if image frame is ready to be drawn and is currently not being painted 
     if (flag == ImageObserver.FRAMEBITS && !painting) { 
      Image buffer; 

      // select which buffer to fill 
      if (img == logo) buffer = logoBuffer; 
      else buffer = progressbarBuffer; 

      Graphics g = buffer.getGraphics(); 

      // clear background on buffer 
      g.setColor(bgColor); 
      g.fillRect(0, 0, buffer.getWidth(null), buffer.getHeight(null)); 

      // buffer background is cleared, so draw logo under progressbar 
      if (img == progressbar && logo != null) { 
       g.drawImage(logoBuffer, progressbar.getWidth(null)/2-logo.getWidth(null)/2, 
             progressbar.getHeight(null)/2-logo.getHeight(null)/2, null); 
      } 

      g.drawImage(img, 0, 0, this); 
      g.dispose(); 

      repaint(); 
     } 

     return true; 
    } 

, так как вы не опубликовать фрагмент кода, это может быть то, что вам нужно ..

Смежные вопросы