0

ここにJava初心者!

画面を移動するだけで、作成している小さなAIRectanglesを攻撃する小さなゲームを開発しています。

私は2つのGIFファイルpikachu.gif(はい、そのポケモンゲーム)とpikready.gifを持っています。

KeyListenerとすべてを実装し、Pikachu.gifを矢印キーでフレーム内を移動させることができます。

私が望んでいるのは、矢印キーを押したときに画像をpikready.gifに変更することです。オンラインで見回しましたが、答えが見つからないようです。

コードは以下のとおりです。コメントアウトされたものは、私が試したものとは異なります。

私が言ったように、私はJava初心者なので、気楽にやってください!

package game;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class PikachuAttack extends JFrame implements Runnable{

    Graphics dbg;
    Image dbImage;
    Image Pik1;
    static ImageIcon active;

    int x, y, xDirection, yDirection;

    public void run(){
        try{
            while(true){
                move();
                Thread.sleep(10);
            }
        }catch(Exception e){
            System.out.println("Uh-oh, something went wrong!.");
        }
    }

    private void move() {
        x += xDirection;
        y += yDirection;

    }

     public void setXDirection(int xdir) {
            xDirection = xdir;
        }

        public void setYDirection(int ydir) {
            yDirection = ydir;
        }


    // KEY COMMANDS //
      public class AL extends KeyAdapter {
        @Override
        public void keyPressed(KeyEvent e) {
            int keyCode = e.getKeyCode();

                if(keyCode == e.VK_LEFT) {
                    setXDirection(-1);
                }
                if(keyCode == e.VK_RIGHT) {
                    setXDirection(+1);
                }
                if(keyCode == e.VK_UP) {    
                    setYDirection(-1);
                }
                if(keyCode == e.VK_DOWN) {
                    setYDirection(+1);
                }   
                /*(if(keyCode == e.VK_LEFT | keyCode == e.VK_RIGHT | keyCode == e.VK_UP | keyCode == e.VK_DOWN){
                    active = new ImageIcon("C:\\Users\\Neil\\workspace\\MyOwnTutorials\\bin\\game\\pikready.gif");
                }else{
                    active = new ImageIcon("C:\\Users\\Neil\\workspace\\MyOwnTutorials\\bin\\game\\pikachu.gif");
                } */

        }

        @Override
        public void keyReleased(KeyEvent e) {
            int keyCode = e.getKeyCode();
                    if(keyCode== e.VK_LEFT){
                       setXDirection(0);                    
                    }
                    if(keyCode== e.VK_RIGHT){
                       setXDirection(0);                    
                    }
                    if(keyCode== e.VK_UP){
                        setYDirection(0);
                    }
                    if(keyCode== e.VK_DOWN){
                        setYDirection(0);                   
                    }

        }

        @Override
        public void keyTyped(KeyEvent e) {


        }

    }

    // CONSTRUCTOR //
    public PikachuAttack(){

        //Image Import
        ImageIcon still = new ImageIcon("C:\\Java\\GIFS\\Pikachu.gif");
        Pik1 = still.getImage();
        //ImageIcon ready = new ImageIcon("C:\\Users\\Neil\\workspace\\MyOwnTutorials\\bin\\game\\pikready.gif");
        //Pik2 = ready.getImage(); */
        // Pik1 = active.getImage();

        //JFrame properties
        addKeyListener(new AL());
        setTitle("Pikachu Attack");
        setSize(500, 500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        setVisible(true);

        x = 15;
        y = 15;
    }



    public void paint(Graphics g){
        dbImage = createImage(getWidth(), getHeight());
        dbg = dbImage.getGraphics();
        paintComponent(dbg);
        g.drawImage(dbImage, 0, 0, this);   

    }

    public void paintComponent(Graphics g){
        g.setColor(Color.red);
        g.fillRect(200, 190, 12, 20);
        g.drawImage(Pik1, x, y, this);
        g.setColor(Color.red);



        repaint();
    }


    public static void main(String[] args) {
        PikachuAttack game = new PikachuAttack();
        Thread t1 = new Thread(game);
        t1.start();
    }

}
4

3 に答える 3

1

Image現在の、たとえばcurrentImage、DOWNキーへの新しい参照を作成してみませんか。

if (keyCode == e.VK_DOWN) {
   setYDirection(+1);
   currentImage = Pik2; // the ready image
}   

次に、でpaintComponent、現在の画像を描画できます。

g.drawImage(currentImage, x, y, this);
于 2012-10-15T19:19:17.137 に答える
0

塗り直し後に電話するだけ

revalidate();
于 2012-10-15T19:05:26.643 に答える
0

null値またはデフォルトの画像を使用して画像を作成してから、キーを押したときに最初の画像の代わりになる2番目の画像を作成する必要があります。キーリスナーで、画像の値を下の2番目の画像に設定する必要があります。押したいキーのキーコード。

これが例です。キーを押すと画像が変化する動く文字の

public class WorldOfWarriorsDefault extends JPanel implements KeyListener, ActionListener //main game interface
{
	Timer t = new Timer(5, this); 	
	int x = 0, y = 0, velx = 0, vely = 0; //declares the default values co-ordinates of the moving object
    Rectangle r = new Rectangle(100, 100, 40, 40);
    Toolkit toolkit = Toolkit.getDefaultToolkit();
    Image image1 = toolkit.getImage("D:\\My Stuff\\frame_2_delay-0.05s.gif");
    Image image2 = toolkit.getImage("D:\\My Stuff\\runtest2.gif");
    Image image3 = toolkit.getImage("D:\\My Stuff\\ezgif-3-4570fcd5e5.gif");
    Image image4 = toolkit.getImage("D:\\My Stuff\\Leftr.gif");
    Image image = image1;
    public WorldOfWarriorsDefault() //makes a constructor
    {
    	t.start(); //starts the timer
    	addKeyListener(this);
    	 //adds a keyboard listener
    	setFocusable(true); 
    	setFocusTraversalKeysEnabled(false); 
    }
    public void actionPerformed(ActionEvent e) 
    {
        x = x + velx;
        y = y + vely;
        repaint();
    }
    public void up()
    {
    	vely = -2;
    	velx = 0;
    }
    public void down()
    {
    	vely = 2;
    	velx = 0;
    }
    public void left()
    {
    	velx = -2;
    	vely = 0;
    }
    public void right() 
    {	
    	velx = 2;
    	vely = 0;
    }
    public void keyPressed(KeyEvent e) 
	{
		
		int code = e.getKeyCode(); 
		
        if (code == KeyEvent.VK_UP || code == KeyEvent.VK_W) 
        {
        	up();
        }
        if (code == KeyEvent.VK_DOWN || code == KeyEvent.VK_S) 
        {
        	down();
        }
        if (code == KeyEvent.VK_LEFT || code == KeyEvent.VK_A) 
        {
        	left();
        	image = image3;
        }
        if (code == KeyEvent.VK_RIGHT || code == KeyEvent.VK_D) 
        {
        	right();
        	image = image2;
        }
	}
    public void keyTyped(KeyEvent e) {}
	public void keyReleased(KeyEvent e) 
	{
		int coder = e.getKeyCode();
		
		if (coder == KeyEvent.VK_LEFT)
		{
			image = image4;
		}
		if (coder == KeyEvent.VK_RIGHT)
		{
			image = image1;	
		}
		velx = 0;
		vely = 0;
		x = r.getBounds().x;
		y = r.getBounds().y;
		repaint();
	}
	public void paintComponent(Graphics g) //starts a painter
    {
    	super.paintComponent(g); //paints the component
    	r.setBounds(x, y, 40, 40);
    	g.drawImage(image, x, y, this); 
    }
    public static void main(String[] args) 
	{
          JFrame f = new JFrame();
          WorldOfWarriorsDefault w = new WorldOfWarriorsDefault();
          f.add(w);
          f.setVisible(true);
          f.setSize(1900, 1000);
          f.setLocationRelativeTo(null);
          f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

于 2017-10-10T12:28:17.340 に答える