@@ -96,28 +96,43 @@ První krok bude naprogramovat vesmírnou loď, která půjde ovládat klávesni
9696
9797 Rychlost otáčení závisí na stisknutých šipkách (doleva nebo doprava).
9898 V jednom případě je záporná, v druhém kladná. Vhodnou hodnotu zvol
99- experimentováním. Všechny podobné „magické hodnoty“ je vhodné definovat
99+ experimentováním – začni třeba u 4 radiánů za sekundu.
100+ Všechny podobné „magické hodnoty“ je vhodné definovat
100101 jako konstanty – tedy proměnné, které na začátku nastavíš a nikdy
101102 je neměníš. Bývá zvykem je označovat velkými písmeny a dávat je na
102- začátek souboru, hned za importy.
103+ začátek souboru, hned za importy:
104+
105+ ```python
106+ ROTATION_SPEED = 4 # radians per second
107+ ```
103108 * Zrychlení je trochu složitější: k < var> x< / var> - ové rychlosti
104- se přičte sinus úhlu otočení krát uplynulý čas .
105- U < var> y< / var> - ové osy se použije kosinus.
106- Je ale potřeba převést úhel na radiány, protože
107- Pyglet (a naše hra) používá stupně:
109+ se přičte kosinus úhlu otočení krát uplynulý čas .
110+ U < var> y< / var> - ové osy se použije sinus.
108111
109112 ```python
110- rotation_radians = math.radians(self .rotation)
111- self .x_speed += dt * ACCELERATION * math.sin(rotation_radians)
112- self .y_speed += dt * ACCELERATION * math.cos(rotation_radians)
113+ self .x_speed += dt * ACCELERATION * math.cos(self .rotation)
114+ self .y_speed += dt * ACCELERATION * math.sin(self .rotation)
113115 ```
114116
115117 Všimni si v příkladu konstanty `ACCELERATION ` . Tu opět zvol podle uvážení.
116118 * Když máš hodnoty `self .x` , `self .y` a `self .rotation` spočítané, nezapomeň
117119 je promítnout do `self .sprite` , jinak se nic zajímavého nestane.
120+
121+ Pozor na to, že funkce `math.sin` a `math.cos` používají radiány,
122+ kdežto `pyglet` používá pro `Sprite.rotation` stupně.
123+ (A k tomu je navíc 0 ° jinde, a otáčí se na opačnou stranu.)
124+ Pro sprite je tedy potřeba úhel převést:
125+
126+ ```python
127+ self .sprite.rotation = 90 - math.degrees(self .rotation)
128+ self .sprite.x = self .x
129+ self .sprite.y = self .y
130+ ```
118131 * Když raketka vyletí z okýnka ven, vrať
119132 ji zpátky do hry na druhé straně okýnka.
120133 (Zkontroluj si, že to funguje na všech čtyřech stranách.)
134+
135+
121136* ** Bonus 1 ** : Zkus si přidat několik raketek,
122137 každou trochu jinak natočenou.
123138
@@ -156,7 +171,6 @@ První krok bude naprogramovat vesmírnou loď, která půjde ovládat klávesni
156171 gl.glPopMatrix()
157172 ```
158173 Pro přehled, dokumentace k použitým funkcím je tady:
159-
160174 [ glPushMatrix, glPopMatrix] ( https://www.opengl.org/sdk/docs/man2/xhtml/glPushMatrix.xml ) ,
161175 [ glTranslatef] ( https://www.opengl.org/sdk/docs/man2/xhtml/glTranslate.xml ) .
162176
0 commit comments