Greenfoot
Z MiS
(Rozdíly mezi verzemi)
(→Reakce na klávesy) |
(→Řešení situací: Přidáno mizení actorů vyjetím z obrazovky) |
||
| Řádka 101: | Řádka 101: | ||
== Řešení situací == | == Řešení situací == | ||
| − | + | === Zdi === | |
| − | + | === Mizení Actorů === | |
K mizení slouží metoda: | K mizení slouží metoda: | ||
MouseWorld.removeObject(Actor kdoMaZmizet) | MouseWorld.removeObject(Actor kdoMaZmizet) | ||
| − | Příklad | + | |
| + | ; Příklad 1) zrušení kolidujících actorů | ||
private void sezerVsechnyKolidujici() { | private void sezerVsechnyKolidujici() { | ||
World svet = this.getWorld(); | World svet = this.getWorld(); | ||
| Řádka 114: | Řádka 115: | ||
} | } | ||
| − | ; Změna obrázku Actoru | + | ; Příklad 2) zrušení actoru, který vyjel mimo obrazovku na levém okraji |
| − | + | if (this.getX() < 1) { | |
| + | World svet = this.getWorld(); | ||
| + | if (svet != null) { | ||
| + | this.getWorld().removeObject(this); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | === Změna obrázku Actoru === | ||
| + | === Výpis stavu hry, hlášky === | ||
== Úkol: Vytvořte hru! == | == Úkol: Vytvořte hru! == | ||
* Vytvořte hru, na které ukážete ty prvky práce v Greenfootu, které jsme si ukázali výše. | * Vytvořte hru, na které ukážete ty prvky práce v Greenfootu, které jsme si ukázali výše. | ||
Verze z 20. 1. 2014, 07:18
Obsah |
Co je to Greenfoot?
Dokumentaci tříd najdete na adrese:
Svět a volání metod act()
- Nastavení pozadí hrací plochy
- Například v konstruktoru našeho potomka třídy World můžeme zavolat:
World.setBackground(GreenfootImage obrazek)
Vytvoření a přidání Actorů
- Prvky jsou potomky třídy Actor.
- Instance vytváříme klasicky (new).
- Umístění na plochu:
- World.addObject(Actor actor, int x, int y)
- umístí na pozici (x, y)
Pohyb Actora
Máme dvě varianty ovládání prvku (actora):
- Relativní pozicování
-
turn(int oKolik)... otáčí o daný počet stupňů ve směru hodinových ručiček -
move(int delka)... pokročí vpřed o daný počet dílků ve směru, do kterého je otočen -
setRotation(int uhel)... natočí prvek do daného směru (0 je směr vpravo, po směru hodinových ručiček) -
turnTowards(int x, int y)... natočí prvek směrem k zadaným souřadnicím.
- Absolutní pozicování
-
setLocation(int x, int y)- přesune prvek na zadané souřadnice
- obvykle je třeba uložit si souřadnice.
- Příklad
- vytvoření metody
move(int dx, int dy)
public void act()
{
this.move(3,-1);
}
private void move(int dx, int dy) {
int cilX = this.getX()+dx;
int cilY = this.getY()+dy;
this.turnTowards(cilX, cilY);
this.setLocation(cilX, cilY);
}
Reakce na klávesy
String Greenfoot.getKey()
- vrací
null, když nebyla stisknuta žádná klávesa. - Speciální klávesy:
-
"space"... mezerník -
"up","down","right","left"... šipky -
"F1",... funkční klávesy
-
- Příklad
- Pohyb podle kláves
String vstup = Greenfoot.getKey();
if (vstup != null) {
if (vstup.equals("right")) {
this.setRotation(0);
} else if (vstup.equals("left")) {
this.setRotation(180);
} else if (vstup.equals("up")) {
this.setRotation(-90);
} else if (vstup.equals("down")) {
this.setRotation(90);
}
this.move(1);
}
Náhodná čísla
- Standardní řešení Javy
-
Math.random()... vrací čísla z intervalu <0, 1)
- Řešení Greenfootu
- Pro hry je často potřeba generovat celá čísla. Pro zjednodušení je tedy v Greenfootu metoda:
-
Greenfoot.getRandomNumber(int limit)- Vrací čísla z množiny {0, 1, ..., limit-1}.
Zjištění kolize prvků ve hře
- Ke zjištění kolizí slouží metody ve třídě Actor, které se jmenují
get...Object.... - Metod je hodně, ale chovají se podobně.
- Výběr třídy
- Pokud zadáte parametr typu class, bere v potaz pouze objekty zadaného typu. Pokud zadáme
null, berou se v potaz všechny objekty. - Všechny objekty:
List<Actor> seznam = this.getIntersectingObjects(null);
- Jen objekty zvoleného typu:
List<Zradlo> seznam = this.getIntersectingObjects(Zradlo.class);
- Návratová hodnota
- Vrací buď první kolidující objekt nebo
nullkdyž nekoliduje:
getOneIntersectingObject(class) getOneObjectAtOffset(int dx, int dy, class)
- ... nebo seznam všech vyhovujících objektů.
private void vyresKolidujici() {
List<Actor> seznam = this.getIntersectingObjects(null);
for (Actor prvek : seznam) {
prvek.aplikuj(this);
}
}
- Filtr
- intersecting objects ... objekty, které se prolínají se stávajícím (došlo ke kolizi)
- objects at offset ... objekty, které jsou v dané vzdálenosti (dx, dy) od stávajícího objektu
Řešení situací
Zdi
Mizení Actorů
K mizení slouží metoda:
MouseWorld.removeObject(Actor kdoMaZmizet)
- Příklad 1) zrušení kolidujících actorů
private void sezerVsechnyKolidujici() {
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í actoru, který vyjel mimo obrazovku na levém okraji
if (this.getX() < 1) {
World svet = this.getWorld();
if (svet != null) {
this.getWorld().removeObject(this);
}
}
Změna obrázku Actoru
Výpis stavu hry, hlášky
Úkol: Vytvořte hru!
- Vytvořte hru, na které ukážete ty prvky práce v Greenfootu, které jsme si ukázali výše.