在Java中对图像序列进行动画处理 [英] Animating a Sequence of Images in java

查看:142
本文介绍了在Java中对图像序列进行动画处理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对不起,我的英语不好

大家好,我正在使用Java开发2D游戏,并且当要对图像序列进行动画处理时,只会加载最后一个图像&我不知道为什么我的代码看起来很逻辑这样,当我按下"Q"按钮时,那里通常会有一个动画.代码:

Hello everyone I'm developing a 2d game using java and when a want to animate a sequence of images only the last image is loaded & i don't know why my code seems Logic So that when I press "Q" button there most be an animation there. code:

花花公子班

import java.awt.*;
import java.awt.event.KeyEvent;
import javax.swing.*;


public class Dude {
int x, dx, y, dy;
Image still;
Image walking;
Image effet;
ImageIcon i = new ImageIcon("C:/1.gif");
ImageIcon run=new ImageIcon("C:/NeroRun.gif");
ImageIcon down=new ImageIcon("C:/nero_down.gif");
Image[]attack=new Image[15];
ImageIcon saut_effet=new ImageIcon("C:/saut_effet.gif");
ImageIcon saut=new ImageIcon("C:/saut.gif");
ImageIcon effect=new ImageIcon("C:/saut_effet.gif");
//ImageIcon attack;

public Dude() throws {
    still = i.getImage();
    x = 10;
    y = 260;
    for(int j=0;j<15;j++){
        ImageIcon ii=new ImageIcon("C:/Games/frame-"+(j+1)+".gif");
        attack[j] = ii.getImage();
        System.out.println("Nice");

    }

}

public void move(){
    x = x + dx;
    y = y + dy;

}

public int getX(){
    return x;
}

public int getY(){
    return y;
}

public Image getImage(){
    return still;
}

public Image getEffet(){
    return effet;
}

public void keyPressed(KeyEvent e) throws InterruptedException{
    int key = e.getKeyCode();

    if (key == KeyEvent.VK_LEFT) {
        dx = -3;
        still=run.getImage();
        System.out.println("Left");
        if(y==260){y+=55;}
    }

   if (key == KeyEvent.VK_RIGHT) {
         dx = 3;
        still=run.getImage();
        System.out.println("Right");
        if(y==260){y+=55;}
        effet=null;
    }

   if (key == KeyEvent.VK_DOWN) {
        still=down.getImage();
        System.out.println("Down");
        if(y==260){y+=90;} 
        effet=null;
   }

   if (key == KeyEvent.VK_UP){
       if(y==260){y-=130;}
       effet=effect.getImage();
       still=saut.getImage();
   }

  if(key == KeyEvent.VK_Q){
      if(y==260){y-=135;
      for(int j=0;j<15;j++){
          still=attack[j];
      }

      //attack=new ImageIcon("C:/first_attack.gif");
      //still=attack.getImage();}
      effet=null;
    }
  }    
}

    public void keyReleased(KeyEvent e){
    int key = e.getKeyCode();

    if (key == KeyEvent.VK_LEFT){
        dx = 0;
        still=i.getImage();
        y=260;
        effet=null;
    }

    if (key == KeyEvent.VK_RIGHT){
        dx = 0;
        still=i.getImage();
        y=260;
        effet=null;
    }

    if (key == KeyEvent.VK_DOWN){
        dx = 0;
        still=i.getImage();
        y=260;
        effet=null;
    }

    if (key == KeyEvent.VK_UP){
        still=i.getImage();
        y=260;
        effet=null;
    }

    if (key == KeyEvent.VK_Q){
        still=i.getImage();
        y=260;
        effet=null;
    }

}
}

Borad1类:

打包FirstTest;

package FirstTest;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.Timer;
import org.newdawn.slick.SlickException;


/**
 *
 * @author SiLeNT J0cK3R
 */
class Board1 extends JPanel implements ActionListener{

Dude p;
Image img;
Timer time;

public Board1() throws SlickException{
    p = new Dude();
    addKeyListener(new AL());
    setFocusable(true);
    ImageIcon i = new ImageIcon("C:/Background.png");
    img = i.getImage();
    time = new Timer(5, this);
    //Music.music();
    time.start();
}
    @Override
    public void actionPerformed(ActionEvent e){
    p.move();
    repaint();
    //System.out.println("Repaint");
}

    @Override
    public void paint(Graphics g){
    super.paint(g);
            Graphics2D g2d = (Graphics2D) g;

            g2d.drawImage(img, 0, 0, null);
            g2d.drawImage(p.getImage(), p.getX(), p.getY(),null);
            //Pour animer les effets loresequ'on effectue un saut
            g2d.drawImage(p.getEffet(),p.getX(),300,null);
            //Pour animer les ennemies

}

private class AL extends KeyAdapter{
    @Override
    public void keyReleased(KeyEvent e){
        p.keyReleased(e);
    }
    @Override
    public void keyPressed (KeyEvent e){
        try {
            p.keyPressed(e);
        } catch (InterruptedException ex) {
            Logger.getLogger(Board1.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}



}

推荐答案

      for(int j=0;j<15;j++){
      still=attack[j];
  }

识别Q键时,您似乎只是在遍历动画帧(图像).要使动画可见,在每次更改动画帧之间都需要一段时间.

When identifying the Q key, you seem to just walk through the animation frames (images).For an animation to be visible, some time would have to pass between each change of an animation frame.

我建议您看一些示例和教程.就像在这里找到的太空侵略者"克隆: www.cokeandcode.com

I would suggest you take a look at some examples and tutorials. Like the Space Invaders clone found here: www.cokeandcode.com

这篇关于在Java中对图像序列进行动画处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆