Greenfoot: Řešení častých úloh
Z MiS
(Rozdíly mezi verzemi)
(Osamostatnění z stránky Greenfoot.) |
(Přidáno řešení aktéra, který chvilku zůstane na obrazovce a pak zmizí...) |
||
Řádka 20: | Řádka 20: | ||
this.getWorld().removeObject(this); | 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 <code>act()</code>: | ||
+ | |||
+ | 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; | ||
} | } | ||
} | } |
Verze z 9. 12. 2016, 10:27
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.