Greenfoot: Řešení častých úloh
m (→Výpis stavu hry, hlášky: GreenfootColor má konstanty velkými písmeny) |
(→Výpis stavu hry, hlášky: Rozdělení na dvě části - hlášení a počítadlo.) |
||
| Řádka 39: | Řádka 39: | ||
} | } | ||
} | } | ||
| + | |||
| + | |||
| + | == Hlášení ve hře == | ||
| + | Někdy potřebujeme hráče upozornit na nějakou událost ve hře vyskakovacím hlášením. V Greenfootu je to nejjednodušší tak, že vyrobíte aktéra, který bude mít místo obrázku text. Tohoto aktéra potom přidáte do světa. | ||
| + | |||
| + | Třída aktéra: | ||
| + | public class Hlaseni | ||
| + | { | ||
| + | public Hlaseni() | ||
| + | { | ||
| + | GreenfootImage banner = new GreenfootImage("Text", 30, Color.YELLOW, Color.RED); | ||
| + | this.setImage(banner); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | Umístění aktéra do světa: | ||
| + | |||
| + | ... | ||
| + | this.setPaintOrder(Hlaseni.class); ''// Zařídí, že se hlášení objeví nahoře nad všemi ostatními aktéry.'' | ||
| + | this.getWorld().addObject(new Hlaseni()); | ||
| + | ... | ||
| Řádka 69: | Řádka 90: | ||
public void zmenStav(int zmena) { | public void zmenStav(int zmena) { | ||
this.setStav(this.stav+zmena); | this.setStav(this.stav+zmena); | ||
| + | } | ||
| + | public void reset() { | ||
| + | this.setStav(0); | ||
} | } | ||
} | } | ||
| Řádka 76: | Řádka 100: | ||
public HraWorld() { | public HraWorld() { | ||
... | ... | ||
| + | this.setPaintOrder(Pocitadlo.class); | ||
this.addObject(Pocitadlo.getInstance(), 20, 20); | this.addObject(Pocitadlo.getInstance(), 20, 20); | ||
... | ... | ||
} | } | ||
| − | + | Vynulování počítadla na začátku hry provedeme také v konstruktoru světa: | |
| + | public HraWorld() { | ||
| + | ... | ||
| + | Pocitadlo.getInstance().reset(); | ||
| + | ... | ||
| + | } | ||
| + | |||
| + | Změnu skóre pak kdekoli v projektu můžeme vyvolat: | ||
... | ... | ||
| − | Pocitadlo.getInstance().setStav(10); | + | Pocitadlo.getInstance().setStav(10); ''// Nastaví nový stav na 10 bodů - bez ohledu na předchozí stav.'' |
... | ... | ||
nebo | nebo | ||
... | ... | ||
| − | Pocitadlo.getInstance().zmenStav(-2); | + | Pocitadlo.getInstance().zmenStav(-2); ''// Sníží stav počítadla o 2 body oproti předchozímu stavu. |
... | ... | ||
| − | |||
| − | |||
== Zdi == | == Zdi == | ||
Verze z 18. 3. 2020, 14:47
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;
}
}
Hlášení ve hře
Někdy potřebujeme hráče upozornit na nějakou událost ve hře vyskakovacím hlášením. V Greenfootu je to nejjednodušší tak, že vyrobíte aktéra, který bude mít místo obrázku text. Tohoto aktéra potom přidáte do světa.
Třída aktéra:
public class Hlaseni
{
public Hlaseni()
{
GreenfootImage banner = new GreenfootImage("Text", 30, Color.YELLOW, Color.RED);
this.setImage(banner);
}
}
Umístění aktéra do světa:
... this.setPaintOrder(Hlaseni.class); // Zařídí, že se hlášení objeví nahoře nad všemi ostatními aktéry. this.getWorld().addObject(new Hlaseni()); ...
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);
}
public void reset() {
this.setStav(0);
}
}
Na plochu počítadlo přidáme:
public HraWorld() {
...
this.setPaintOrder(Pocitadlo.class);
this.addObject(Pocitadlo.getInstance(), 20, 20);
...
}
Vynulování počítadla na začátku hry provedeme také v konstruktoru světa:
public HraWorld() {
...
Pocitadlo.getInstance().reset();
...
}
Změnu skóre pak kdekoli v projektu můžeme vyvolat:
... Pocitadlo.getInstance().setStav(10); // Nastaví nový stav na 10 bodů - bez ohledu na předchozí stav. ...
nebo
... Pocitadlo.getInstance().zmenStav(-2); // Sníží stav počítadla o 2 body oproti předchozímu stavu. ...