Tak mám ohledně pongu ještě jeden dotaz - nefunguje mi tu správně odrážení míčku pomocí příznaků pro směr (řeším to teĎ nouzově tak, že natvrdo změním rychlost pohybu *-1)... Nechápu proč, napadá vás něco? Pohyb je ve fci "update"
/*
* Trida pro micek- obsahuje souradnice micku, jejich setter a getter
* a fci pro restart hry (poloha micku na pocatek po golu)
*/
import java.awt.Color;
import java.awt.Graphics;
import java.lang.Math; // Pro generovani nahodneho cisla
public class Ball {
private static double x;
private static double y;
private int speed_red = 6; // redukce rychlosti - jinak micek letal prilis rychles
final private int diameter = 16;
//promenne urcujici rychlost pohybu v souradnicich
private static double movX;
private static double movY;
public boolean dirUp; // kdyz se pohybuje micek nahoru
//public boolean dirDo; // kdyz se pohybuje micek dolu
public boolean dirLe; // kdyz se pohybuje micek vlevo
//public boolean dirRi; // kdyz se pohybuje micek vpravo
/*
* Konstruktor - vyuziva fci restart()
*/
public Ball(RunGame game, int speed_red){ //predavam instanci game do konstruktoru proto, abych mohl sahnout na fce restart() u obou palek
this.speed_red = speed_red;
restart(game, speed_red);
}
/**
* @param x, y pro nastaveni souradnic
*/
public void setX(double x) {
this.x = x;
}
public void setY(double y){
this.y = y;
}
/**
* @return the x
*/
public static double getX() {
return x;
}
/**
* @return the y
*/
public static double getY() {
return y;
}
public static double getMovX(){
return movX;
}
public static double getMovY(){
return movY;
}
public static void setMovX(double num){
movX = num;
}
public static void setMovY(double num){
movY = num;
}
public void restart(RunGame game, int speed_red){
setX( (game.sizeX - diameter) / 2);
setY( (game.sizeY - diameter) / 2);
int a = (int) (Math.random() * 10 + 2);
if(a > 6){
//this.dirDo = false;
this.dirUp = true;
}else{
//this.dirDo = true;
this.dirUp = false;
}
if(a % 2 == 0){
//this.dirRi = false;
this.dirLe = true;
}else{
this.dirLe = false;
//this.dirRi = true;
}
this.movX = (Math.ceil(Math.random())) / speed_red;
this.movY = (Math.ceil(Math.random())) / speed_red;
game.lPad.restart(game);
game.rPad.restart(game);
}
public void update(RunGame game){
/* Osetreni odrazu od horni a dolni steny hriste */
if(getY() < 0 && this.dirUp == true){
this.movY *= -1;
//this.dirUp = false;
//this.dirDo = true;
}else if(getY() > (game.getHeight() - diameter) ){
this.movY *= -1;
//this.dirDo = false;
//this.dirUp = true;
}
/* Osetreni odrazu od predni hrany palek */
// JEDNODUCHY ODRAZ - jen predni hrana
if( (getX() < (game.lPad.getX() + game.lPad.getWidth())) && (getY() > game.lPad.getY() && (getY() < (game.lPad.getY() + game.lPad.getHeight()) ) ) ){
//this.dirLe = false;
//this.dirRi = true;
this.movX *= -1;
}else if( (getX() > game.rPad.getX() - game.rPad.getWidth()) && (getY() > game.rPad.getY() && (getY() < (game.rPad.getY() + game.lPad.getHeight()) ) ) ) {
//this.dirRi = false;
//this.dirLe = true;
this.movX *= -1;
}
/* Pohyb */
if(dirUp){
setY(getY() + movY);
}else {
setY(getY() - movY);
}
if(dirLe){
setX(getX() - movX);
}else{
setX(getX() + movX);
}
/* Osetreni restartu micku a palek pri golu */
if(getX() < 0){
game.rPad.goal();
restart(game, speed_red);
}else if(getX() > (game.sizeX + diameter)){
game.lPad.goal();
restart(game, speed_red);
}
}
public void paint(Graphics g){
g.setColor(Color.BLUE);
g.fillOval((int)getX(),(int) getY(), diameter, diameter);
}
}
Jako obvykle moc děkuji za odpověď, tohle fórum je prima :D