Greenfoot: Řešení častých úloh

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Přidáno řešení aktéra, který chvilku zůstane na obrazovce a pak zmizí...)
m (Výpis stavu hry, hlášky: GreenfootColor má konstanty velkými písmeny)
Řádka 64: Řádka 64:
 
         this.stav = stav;
 
         this.stav = stav;
 
         String text = "Skóre: "+this.stav;
 
         String text = "Skóre: "+this.stav;
         GreenfootImage obrazek = new GreenfootImage(text, 20, Color.yellow, Color.gray);
+
         GreenfootImage obrazek = new GreenfootImage(text, 20, Color.YELLOW, Color.GRAY);
 
         this.setImage(obrazek);
 
         this.setImage(obrazek);
 
     }
 
     }
Řádka 91: Řádka 91:
  
 
Lze samozřejmě do počitadla přidat informaci o aktuálním počtu bodů a tu pak zvyšovat nebo snižovat dle potřeby.
 
Lze samozřejmě do počitadla přidat informaci o aktuálním počtu bodů a tu pak zvyšovat nebo snižovat dle potřeby.
 
  
 
== Zdi ==
 
== Zdi ==

Verze z 11. 4. 2017, 09:37


Obsah

Rušení aktérů

Příklad 1) Zrušení kolidujících actorů
private void act() {
   // ...
   World svet = this.getWorld();
   List<Actor> seznam = this.getIntersectingObjects(null); 
   for (Actor prvek : seznam) {
      prvek.aplikuj(this);
      svet.removeObject(prvek);
   }
Příklad 2) Zrušení aktéra, který vyjel mimo obrazovku na levém okraji
public void act() {
    // ...
    if (this.getX() < 1) {
        World svet = this.getWorld();
        if (svet != null) {
            this.getWorld().removeObject(this);
        }
    }
}


Aktér se objeví a zmizí

Pokud chceme aktéra, který se objeví na nějakou dobu a pak zmizí, stačí si v atributu počítá, kolikrát byla zavolána metoda act():

int jakDlouhoZiji = 0;
public void act() 
{
    this.jakDlouhoZiji++;
    if (this.jakDlouhoZiji >= 200) {
        World svet = this.getWorld();
        int x = Greenfoot.getRandomNumber(svet.getWidth());
        int y = Greenfoot.getRandomNumber(svet.getHeight());
        this.setLocation(x, y);
        this.jakDlouhoZiji = 0;
    }
}


Výpis stavu hry, hlášky

Pro výpis skóre vytváříme nového speciálního „actora“ (objekt). Protože bude počitadlo pro celý projekt nejspíš jedno (nebo třeba jedno pro každého hráče), využijeme s výhodou návrhový vzor Jedináček (Singleton).

public class Pocitadlo extends Actor
{
    // Implementace Jedináčka:
    private static Pocitadlo prvniHrac = null;
    public static Pocitadlo getInstance() {
        if (this.prvniHrac == null) 
            this.prvniHrac = new Pocitadlo();
        }
        return this.prvniHrac;
    }
    
    // A zbytek kódu:
    private int stav;
    
    private Pocitadlo() { // private kvůli Jedináčkovi
        this.setStav(0);
    }
    public void setStav(int stav) {
        this.stav = stav;
        String text = "Skóre: "+this.stav;
        GreenfootImage obrazek = new GreenfootImage(text, 20, Color.YELLOW, Color.GRAY);
        this.setImage(obrazek);
    }
    public void zmenStav(int zmena) {
        this.setStav(this.stav+zmena);
    }
}

Na plochu počítadlo přidáme:

public HraWorld() {
    ...
    this.addObject(Pocitadlo.getInstance(), 20, 20);
    ...
}

Změnu skóre pak kdekoli v projektu můžeme vyvolat:

...
Pocitadlo.getInstance().setStav(10);
...

nebo

...
Pocitadlo.getInstance().zmenStav(-2);
...

Lze samozřejmě do počitadla přidat informaci o aktuálním počtu bodů a tu pak zvyšovat nebo snižovat dle potřeby.

Zdi

Související stránky

Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje