Aplicatii Java: animatii (codul sursa)


1) Animatie dreptunghi de la tastatura (cu ajutorul sagetilor: jos, sus, stanga, dreapta) (rezolvare...)
2) Animatie doua dreptunghiuri de la tastatura (din sageti si taste) (rezolvare...)

Rezolvari

Se face un proiect java, in Eclipse.
(vezi aici utilizare Eclipse pentru dezvoltarea aplicaţiilor Java)
Atentie! Numele clasei declarate public, coincide cu numele fisierului java (fara extensie)
In cadrul lui, se face un fisier .java care se numeste Animatie1in care se copiaza codul de mai jos:
//Animatie1.java

import java.awt.Color;
 
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
 
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
 
public class Animatie1 extends JPanel implements ActionListener, KeyListener //KeyListener=pt tastatura
{
	Timer tm = new Timer (5, this);  //Timer=pt animatie; pt ActionListener
	int x = 0, y = 0, velX = 0, velY = 0; //x=poz pe orizontala, y=poz pe verticala 
	
	public Animatie1()
	{
		tm.start();  //pt inceperea procesului de animatie
		addKeyListener(this);
		setFocusable(true); //enable KeyListener
	    setFocusTraversalKeysEnabled(false);
	}
	
	public void paintComponent (Graphics g)
	{
		super.paintComponent(g);
		g.setColor(Color.RED);
		g.fillRect(x, y, 50, 30);	
	}
	
	public void actionPerformed(ActionEvent e)
	{
		//restrictii la spatiul pe care se misca
		if( x < 0 )  //dc obliectul este in stanga, in afara ferestrei
		{
			velX = 0; //oprim viteza
			x = 0;   // repozitionam la 0
		}
		
		if( x > 350 )  //dc obliectul este in dreapta, in afara ferestrei
		{
			velX = 0; //oprim viteza
			x = 350;   // repozitionam la 350
		}
				
		if(y < 0) //dc obliectul este sus, in afara ferestrei
		{
			velY = 0; //oprim viteza
			y = 0;   //repozitionam la 0			
		}
		
		if(y > 250) //dc obliectul este jos, in afara ferestrei
		{
			velY = 0; //oprim viteza
			y = 250;   //repozitionam la 250			
		}
				
		x = x + velX; //creste valoarea lui x cand apasam pe tastatura up sau down
		y = y + velY; //creste valoarea lui y cand apasam pe tastatura up sau down
		repaint();
	}
	
	public void keyPressed(KeyEvent e)    //pt cand apesi down de la tastatura
	{
		int c = e.getKeyCode();         //ia info de la tastatura
		
		if (c == KeyEvent.VK_LEFT)    // CODUL PT SAGEATA STANGA
		{
			velX = -1;   //viteza negativa cand merge in stanga
			velY = 0;	
		}
		
		if (c == KeyEvent.VK_UP)    // CODUL PT SAGEATA SUS
		{
			velX = 0;   //pt ca nu mergem stanga sau dreapta
			velY = -1;	//viteza negativa cand merge in sus
		}
	
		if (c == KeyEvent.VK_RIGHT)    // CODUL PT SAGEATA DREAPTA
		{
			velX = 1;   //viteza pozitiva pt ca merge in dreapta
			velY = 0;	//pt ca nu apasam sus sau jos
		}
				
		if (c == KeyEvent.VK_DOWN)    // CODUL PT SAGEATA 	JOS
		{
			velX = 0;   //pt ca nu apasam dreapta sau stanga
			velY = 1;	//viteza pozitiva pt ca merge in jos
		}	
	}
	
	public void keyTyped(KeyEvent e){}
	public void keyReleased(KeyEvent e) //ca sa nu se mai miste cand dai drumul la buton
	{
		velX = 0;
		velY = 0;
	}
	
	public static void main (String[] args)
	{
		Animatie1 t = new Animatie1();
		JFrame jf = new JFrame();
		jf.setTitle("Tutorial");
		jf.setSize(400, 300);
		jf.setVisible(true);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.add(t);
	}
}
Animatie dreptunghi de la tastatura
Pentru a rula codul de mai sus, apasati butonul run din Eclipse si
vi se va deschide ca-n imaginea alaturata; folosind sagetile de la tastatura, puteti misca figura (dreprunghiul) in directiile: sus, jos, stanga, dreapta.

Pentru a downloada proiectul cu toate fisierele faceti click aici.




Se face un proiect java, in Eclipse.
(vezi aici utilizare Eclipse pentru dezvoltarea aplicaţiilor Java)
Atentie! Numele clasei declarate public, coincide cu numele fisierului java (fara extensie)
In cadrul lui, se face un fisier .java care se numeste Animatie2in care se copiaza codul de mai jos:
import static java.awt.Color.green;
 
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
 
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
 
public class Animatie2 extends JPanel implements ActionListener, KeyListener //KeyListener=pt tastatura
{
	private static final long serialVersionUID = 1L;
	Timer tm = new Timer (5, this);  				//Timer=pt animatie; pt ActionListener
	int x1 = 10,  y1 = 10, velX1 = 0, velY1 = 0; 	//x1=poz pe orizontala, y1=poz pe verticala
	int x2 = 375, y2 = 10, velX2 = 0, velY2 = 0; 
	int xB = 100, yB = 100, xChange=10, yChange=5, diameter=15;
 
	private static int rectRightX=400, rectBottomY=300; //dimensiunea ferestrei in care are loc jocul
	public Animatie2()
	{
		tm.start();  					//pt inceperea procesului de animatie
		addKeyListener(this);
		setFocusable(true); 			//enable KeyListener
	    setFocusTraversalKeysEnabled(false);
	   
	    moveBall();
	}
 
	 private void moveBall() {
		xB = xB + 1;
		yB = yB + 1;
	}
	public void paintComponent (Graphics g)
	{
		super.paintComponent(g);
		setBackground(green);      			//desenez iarba (backgroundul)
		
		g.setColor(Color.GRAY);				//fileu culoare
		g.drawLine(190, 250, 190, 10);     		//fileu desen
		
		g.setColor(Color.RED);
		g.fillRect(x1, y1, 5, 50);	
		g.fillRect(x2, y2, 5, 50);
		//g.fillOval(xB, yB, diameter,  diameter);
	}	
	public void actionPerformed(ActionEvent e)
	{
		//restrictii la spatiul pe care se misca (I paleta)
		if( x1 < 10 )  		//dc obliectul este in stanga, in afara ferestrei
		{
			velX1 = 0; 		//oprim viteza
			x1 = 10;   		// repozitionam la 10
		}		
		if( x1 > 181 ) 		 //dc obliectul este in dreapta, in afara ferestrei
		{
			velX1 = 0; 		 //oprim viteza
			x1 = 181;   	 // repozitionam la 181
		}			
		if(y1 < 10) //dc obliectul este sus, in afara ferestrei
		{
			velY1 = 0; //oprim viteza
			y1 = 10;   //repozitionam la 10			
		}
		if(y1 > 225) //dc obliectul este jos, in afara ferestrei
		{
			velY1 = 0; //oprim viteza
			y1 = 225;   //repozitionam la 255			
		}	
		x1 = x1 + velX1; //creste valoarea lui x cand apasam pe tastatura up sau down
		y1 = y1 + velY1; //creste valoarea lui y cand apasam pe tastatura up sau down
				
		//restrictii la spatiul pe care se misca (a II-a paleta)
		if( x2 < 195 )  		//dc obliectul este in stanga, in afara ferestrei
		{
			velX2 = 0; 		    //oprim viteza
			x2 = 195;   		// repozitionam la 195
		}	
		if( x2 > 375 ) 		   //dc obliectul este in dreapta, in afara ferestrei
		{
			velX2 = 0; 		    //oprim viteza
			x2 = 375;   		// repozitionam la 375
		}			
		if(y2 < 10) //dc obliectul este sus, in afara ferestrei
		{
			velY2 = 0; //oprim viteza
			y2 = 10;   //repozitionam la 10			
		}		
		if(y2 > 225) //dc obliectul este jos, in afara ferestrei
		{
			velY2 = 0; //oprim viteza
			y2 = 225;   //repozitionam la 255			
		}			
		x2 = x2 + velX2; //creste valoarea lui x cand apasam pe tastatura up sau down
		y2 = y2 + velY2; //creste valoarea lui y cand apasam pe tastatura up sau down
		repaint();				
	}
	
	public void keyPressed(KeyEvent e)    //pt cand apesi down de la tastatura
	{
		int c = e.getKeyCode();          //ia info de la tastatura
		
		//if (c == KeyEvent.VK_LEFT)    // CODUL PT SAGEATA STANGA
		if (c == KeyEvent.VK_A)        // CODUL PT SAGEATA STANGA
		{
			velX1 = -1;               //viteza negativa cand merge in stanga
			velY1 = 0;	
		}		
		//if (c == KeyEvent.VK_UP)    // CODUL PT SAGEATA SUS
		if (c == KeyEvent.VK_W)      // CODUL PT SAGEATA SUS
		{
			velX1 = 0;              //pt ca nu mergem stanga sau dreapta
			velY1 = -1;         	//viteza negativa cand merge in sus
		}	
		//if (c == KeyEvent.VK_RIGHT)    // CODUL PT SAGEATA DREAPTA
		if (c == KeyEvent.VK_D)         // CODUL PT SAGEATA DREAPTA
		{
			velX1 = 1;   //viteza pozitiva pt ca merge in dreapta
			velY1 = 0;	//pt ca nu apasam sus sau jos
		}				
		//if (c == KeyEvent.VK_DOWN)    // CODUL PT SAGEATA JOS
		if (c == KeyEvent.VK_Z)        // CODUL PT SAGEATA JOS
		{
			velX1 = 0;   //pt ca nu apasam dreapta sau stanga
			velY1 = 1;	//viteza pozitiva pt ca merge in jos
		}							
		if (c == KeyEvent.VK_LEFT)    // CODUL PT SAGEATA STANGA
		{
			velX2 = -1;      //viteza negativa cand merge in stanga
			velY2 = 0;	
		}		
		if (c == KeyEvent.VK_UP)    // CODUL PT SAGEATA SUS
		{
			velX2 = 0;        //pt ca nu mergem stanga sau dreapta
			velY2 = -1;	     //viteza negativa cand merge in sus
		}	
		if (c == KeyEvent.VK_RIGHT)    // CODUL PT SAGEATA DREAPTA
		{
			velX2 = 1;    //viteza pozitiva pt ca merge in dreapta
			velY2 = 0;	 //pt ca nu apasam sus sau jos
		}				
		if (c == KeyEvent.VK_DOWN)    // CODUL PT SAGEATA JOS
		{
			velX2 = 0;   //pt ca nu apasam dreapta sau stanga
			velY2 = 1;	//viteza pozitiva pt ca merge in jos
		}							
	}
	
	public void keyTyped(KeyEvent e){}
	public void keyReleased(KeyEvent e) //ca sa nu se mai miste cand dai drumul la buton
	{
		velX1 = 0;
		velY1 = 0;		
		velX2 = 0;
		velY2 = 0;		
	}
	
	public static void main (String[] args)
	{
		Animatie2 t = new Animatie2();
		JFrame jf = new JFrame();
		jf.setTitle("Volley");
		jf.setSize(rectRightX, rectBottomY);
		jf.setVisible(true);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.add(t);
	}
}
Animatie doua dreptunghiuri de la tastatura
Pentru a rula codul de mai sus, apasati butonul run din Eclipse si
vi se va deschide ca-n imaginea alaturata; folosind sagetile de la tastatura (jos, sus, stanga, dreapta) si tastele (z,w,a,d), puteti misca figurile (dreprunghiurile) in directiile: sus, jos, stanga, dreapta.

Pentru a downloada proiectul cu toate fisierele faceti click aici.
Acest site utilizeaza cookie-uri. Navigand in continuare va exprimati acordul asupra folosirii cookie-urilor.