Java - Canvas a tlačítka – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Java - Canvas a tlačítka – Java – Fórum – Programujte.comJava - Canvas a tlačítka – Java – Fórum – Programujte.com

 

Jou222
~ Anonymní uživatel
3 příspěvky
2. 12. 2014   #1
-
0
-

Zdravím, 

dělám hru a potřebuji poradit, dělám tlačítka a chci až zmáčknu třeba R, tak se spustí metoda, která prohazuje dva šálky. Metodu už jsem otestoval přímo v kódu takže když jsem ji volal přímo v třída, tak to fungovalo.

Ale když jsem to dal na tlačítko a zavolal, provede se to, ale není vidět, jak se objekty pohybuji. Jde jen vidět, že na konci se objekty pohnuli.

Prosím o pomoc. Děkuji

package game;

import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import graphics.Canvas;

import javax.swing.JFrame;
import javax.swing.JLabel;

import objects.Background;
import objects.Ball;
import objects.Cup;

public class Game extends JFrame implements KeyListener {
	private static final long serialVersionUID = 1L;
	
	private static final String TITLE = "Skořápky";
	private static final int WIDTH = 800; 
	private static final int HEIGHT = 600; 
	
	private static final int countCups=3 ;

	private Canvas canvas;
	private Background background = new Background();
	private Ball ball;
	private Cup[] cups;
	
	private boolean isRunning = false;
	private boolean isRotate = false;
	
	
	//vytvoření okna
	public Game() {
		this.setTitle(TITLE);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(WIDTH, HEIGHT);      
        this.setLocationRelativeTo(null);
        this.setResizable(false);
        this.setVisible(true);     
        this.add(this.canvas=new Canvas(WIDTH,HEIGHT));        
        gameStart();   
        prepareGame();
        //runningGame(); <-- když dám metodu tady, tak to funguje
        this.addKeyListener(this);
	}
	
	//Uvodní stránka
	public void gameStart() {
		 this.canvas.addObject(this.background);		 
	}
	
	//vytvoří objekty, nastaví pozadí hrací plochy
	public void prepareGame() {
		 this.background.setImageString("res/table_texture.jpg");
		 createCupsOnTable();
		 this.canvas.repaint();
	}
	
	//vymaže z listu všechny objekty krom pozadí
	public void removeAllObject() {
		this.canvas.removeObject(ball);
		for(int x=0; x<countCups; x++)
			this.canvas.removeObject(this.cups[x]);				
	}
	
	
	public void runningGame() {
		int rotate=generatedCountRotate();
		for(int r=0; r<rotate;r++) {
		int numSecondCup=generatedCupForRotate(-1);	
		changeCups(cups[generatedCupForRotate(numSecondCup)], cups[numSecondCup]);
		}	
	}
	
	
	//nastaví velikost pole,vytvoří šálky na stůl a prostřednímu dá kuličku a všechny objekty přidá  do listu 
	public void createCupsOnTable() {		
		int pom=(countCups/2)-1;

		this.cups=new Cup[countCups+1];		
		if(countCups>=2 && countCups<=8) {
			for(int x=0; x<countCups; x++) {
				this.cups[x]=new Cup(((widthCreateCup()+(40/countCups))*x)+40,(HEIGHT/2)-heightCreateCup(), widthCreateCup(),heightCreateCup(), null);
				if(x==pom) {
					this.cups[x].setHasBall(true);
				//	this.ball=new Ball(widthCreateCup()/2, heightCreateCup()/4, 0, 0, null);
				//	this.ball.setPositionToCup(this.cups[x]);
				//	this.canvas.addObject(this.ball);					
				}
				this.canvas.addObject(this.cups[x]);
			}
		}
		
	}
	
	private int heightCreateCup() {
		int result=widthCreateCup()*2;
		if(result>200)
			result=200;	
		return result;
	}

	private int widthCreateCup() {
		int result=(WIDTH-100)/countCups;		
		if(result>100)
			result=100;	
		return result;
	}
	
	public void changeCups(Cup cup1, Cup cup2) {
		
		int Cup1X =cup1.getPositionX();
		int Cup2X =cup2.getPositionX();
		
		int diff=0;
		if(cup1.getPositionX()>cup2.getPositionX())
			diff=cup1.getPositionX()-cup2.getPositionX();
		else 
			diff=cup2.getPositionX()-cup1.getPositionX();
	
		
		for(int y=0; y<diff; y++) {
	    		if(Cup1X<Cup2X) {
	    			cup1.moveRight();
		    		cup2.moveLeft();
		    		if(y<(diff/2)) {
		    			cup1.moveUp();
			    		cup2.moveDown();
		    		} else {
		    			cup1.moveDown();
			    		cup2.moveUp();	
		    			}
		    	}
	    		else {
		    		cup1.moveLeft();
		    		cup2.moveRight();
		    		if(y<(diff/2)) {
		    			cup1.moveUp();
			    		cup2.moveDown();
		    		} else {
		    			cup1.moveDown();
			    		cup2.moveUp();	
		    			}
	    		}
	    		this.canvas.repaint();	    
	    		System.out.println(y);
	    		timeSleep(generatedTimeSleep()); 
	    	        	
	    }
	}
	
	private int generatedCountRotate() {
		int x;
		x=countCups+(int)(Math.random()*(5*countCups));
		return x;
	}
	
	private int generatedCupForRotate(int firstIs) {
		int cup;
		cup=(int)(Math.random()*(countCups));
		if(cup==firstIs) {
		while(cup!=firstIs) {
			cup=(int)(Math.random()*(countCups));	
			}
		}	
		return cup;
	}
	
	private int generatedTimeSleep() {
		int sleep;
		sleep=5+(int)(Math.random()*(5));		
		return sleep;
	}
	
	
	
	private void showCup() {
	   		for(int i=0;i<50; i++) {
	   			cups[countCups/2-1].moveUp();
	   		timeSleep(10);
	   		this.canvas.repaint();
    	    }
    
	}
	
	private void timeSleep(int time) {
		try {
	   		Thread.sleep(time); //1000 milliseconds is one second.
    	} catch(InterruptedException ex) {
    	    Thread.currentThread().interrupt();
    	}		
	}
	
	 @Override
     public void keyPressed(KeyEvent e) {  
		 if (e.getKeyCode() == KeyEvent.VK_ENTER) {
			 System.out.println("ENTER");
			 	this.ball=new Ball(50, 50, 50, 50, null);				
				this.canvas.addObject(this.ball);
				repaint();
		       
		      }
		 if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
			 System.out.println("RIGHT");
			 	this.ball.setPositionX(this.ball.getPositionX()+5);				
			 	this.canvas.repaint();
		      }
		 
		 if (e.getKeyCode() == KeyEvent.VK_R) {
			 System.out.println("X");
			 runningGame();
		 	}
     }

     @Override
     public void keyReleased(KeyEvent e) {

     }

     @Override
     public void keyTyped(KeyEvent e) {

     }
}
Nahlásit jako SPAM
IP: 94.242.73.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 46 hostů

Podobná vlákna

Canvas — založil maral

Kreslenie do Canvas — založil lubo

Vyfarbenie oblasti (CANVAS) — založil Tomáš

Soubor s daty-&gt;Canvas — založil NightRunner

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý