Asteroids - circle okolo objektu

24 views
Skip to first unread message

Helena Zubčeková

unread,
May 8, 2020, 12:06:33 PM5/8/20
to django-cs
Ahoj,

Prichádzam s ďalšou otázkou - tentokrát v záverečnom projekte Asteroids.
Tu je zadanie:
"Aby bylo vidět co si hra o objektech „myslí”, nakresli si nad každým objektem příslušné kolečko. Nejlepší je to udělat pomocí pyglet.gl a trochy matematiky; pro teď si jen opiš funkci draw_circle a pro každý objekt ji zavolej. Až to bude všechno fungovat, můžeš funkci dát pryč."

Nie je problém nakresliť kruh... ale nakresliť kruh okolo objektu tak, aby sa pohyboval spolu s ním? Neviem na to prísť a googlenie nepomáha. "pro každý objekt ji zavolej" vyzerá jednoznačne, ale aj tak na to neviem prísť.
Stripe každého objektu je to, kde je zaznamenaná jeho pozícia, takže tam by som čakala, že potrebujem pridať ten kuh.. ale stripe očakáva image objektu, nie funkciu... Ak mu miesto obrázku dám funkciu, tak mi spadne na tom, že pyglet nedostáva žiadnu texture (čo dáva zmysel, nie je to obrázok...)

Alebo to zadanie nie je tak myslené, že okolo každého objektu (jeho obrázka) má byť kruh? Čiže majú mi tam "poletovať" normálne meteority a spaceship, akurát je okolo nich ešte kruh?

Ďakujem za pošťuch,
Heli

Petr Viktorin

unread,
May 8, 2020, 1:16:02 PM5/8/20
to Helena Zubčeková, djan...@googlegroups.com
On 2020-05-08 18:06, Helena Zubčeková wrote:
> Ahoj,
>
> Prichádzam s ďalšou otázkou - tentokrát v záverečnom projekte Asteroids.
> Tu je zadanie:
> "Aby bylo vidět co si hra o objektech „myslí”, nakresli si nad každým
> objektem příslušné kolečko. Nejlepší je to udělat pomocí pyglet.gl
> <http://pyglet.readthedocs.org/en/latest/programming_guide/gl.html> a
> trochy matematiky; pro teď si jen opiš funkci |draw_circle| a pro každý
> objekt ji zavolej. Až to bude všechno fungovat, můžeš funkci dát pryč."
>
> Nie je problém nakresliť kruh... ale nakresliť kruh okolo objektu tak,
> aby sa pohyboval spolu s ním? Neviem na to prísť a googlenie nepomáha.
> "pro každý objekt ji zavolej" vyzerá jednoznačne, ale aj tak na to
> neviem prísť.
> Stripe každého objektu je to, kde je zaznamenaná jeho pozícia, takže tam
> by som čakala, že potrebujem pridať ten kuh.. ale stripe očakáva image
> objektu, nie funkciu... Ak mu miesto obrázku dám funkciu, tak mi spadne
> na tom, že pyglet nedostáva žiadnu texture (čo dáva zmysel, nie je to
> obrázok...)
>
> Alebo to zadanie nie je tak myslené, že okolo každého objektu (jeho
> obrázka) má byť kruh? Čiže majú mi tam "poletovať" normálne meteority a
> spaceship, akurát je okolo nich ešte kruh?

Presně tak. Mohlo by to vypadat třeba takhle: https://imgur.com/a/CP9pAsO

Nesnaž se kruhy dávat do Sprite; pro každý objekt nakresli napřed Sprite
a potom kruh.

Helena Zubčeková

unread,
May 8, 2020, 1:35:53 PM5/8/20
to django-cs
Môj problém v tom, ako to urobiť, myslím leží tu:
1/ Kreslím všetky objekty naraz pomocou draw:

def draw():
    window.clear()
ďalší kód
            # Draw
            main_batch.draw(

a tu:
window.push_handlers(
    on_draw=draw,
)


2/ main_batch plním do spritov tu:
main_batch = pyglet.graphics.Batch()

class SpaceObject():
    def __init__(self, ostatné veci)
        self.sprite = pyglet.sprite.Sprite(image, batch=main_batch)

3/ a potom konkrétny image, ktorý to má hodiť, vyberám v jednotlivých objektoch:

class Spaceship(SpaceObject) a class Asteroid(SpaceObject)

- keďže chcem každý kruh aby bral do úvahy hodnoty x, y, radium toho konkrétneho objektu, tak mi dáva zmsel tú draw_circle funkciu zavolať v rámci classy Spaceship a Asteroid.

Takže... kedže nejde nahradiť image v sprite tým kruhom, pretože sprite potrebuje png, a navyše ten kruh aj tak chceme okolo toho obrázku... tak mi ostáva už jedine to, aby som si zavolala draw_circle v rámci každého z tých objektov a použiť tam self.x, self.y a self.radium. Až na to, že to som skúšala, a vždy mi to napísalo, že x y a radium sú unidentified :(

Kde je v tejto mojej logike chyba?

Druhá vec, čo ma napadla, je upraviť funkciu draw, a po main_batch.draw() zavolať draw_circle, ale v tom prípade predsa nemá odkiaľ vziať hodnoty x, y a radium...

Veľmi ďakujem, kľudne si môžeš dať načas s odpovedaním, nechcem ťa preťažiť :)

Heli






Dne pátek 8. května 2020 19:16:02 UTC+2 Petr Viktorin napsal(a):
asteroids.py

Petr Viktorin

unread,
May 11, 2020, 5:46:03 AM5/11/20
to djan...@googlegroups.com, Helena Zubčeková
On 2020-05-08 19:35, Helena Zubčeková wrote:
> Môj problém v tom, ako to urobiť, myslím leží tu:
> 1/ Kreslím všetky objekty naraz pomocou draw:
>
> def draw():
>     window.clear()
> ďalší kód
>             # Draw
>             main_batch.draw(

Za to main_batch.draw() můžeš dát cyklus: pro každý objekt nakresli
kolečko kolem toho objektu.

>
> a tu:
> window.push_handlers(
>     on_draw=draw,
> )
>
>
> 2/ main_batch plním do spritov tu:
> main_batch = pyglet.graphics.Batch()
>
> class SpaceObject():
>     def __init__(self, ostatné veci)
>         self.sprite = pyglet.sprite.Sprite(image, batch=main_batch)
>
> 3/ a potom konkrétny image, ktorý to má hodiť, vyberám v jednotlivých
> objektoch:
>
> class Spaceship(SpaceObject) a class Asteroid(SpaceObject)
>
> - keďže chcem každý kruh aby bral do úvahy hodnoty x, y, radium toho
> konkrétneho objektu, tak mi dáva zmsel tú draw_circle funkciu zavolať v
> rámci classy Spaceship a Asteroid.

A můžeš to udělat i takhle. Ale dá to víc práce; pro kód který za chvíli
smažeš (protože kolečka v hotové hře nechceš) bych to spíš doporučil
udělat přímo ve funkci draw().


> Takže... kedže nejde nahradiť image v sprite tým kruhom, pretože sprite
> potrebuje png, a navyše ten kruh aj tak chceme okolo toho obrázku... tak
> mi ostáva už jedine to, aby som si zavolala draw_circle v rámci každého
> z tých objektov a použiť tam self.x, self.y a self.radium. Až na to, že
> to som skúšala, a vždy mi to napísalo, že x y a radium sú unidentified :(
>
> Kde je v tejto mojej logike chyba?

Z tohohle popisu to nepoznám :(
Pošleš prosím kód s touhle chybou?

> Druhá vec, čo ma napadla, je upraviť funkciu draw, a po
> main_batch.draw() zavolať draw_circle, ale v tom prípade predsa nemá
> odkiaľ vziať hodnoty x, y a radium...

Zkus projít všechny objekty, kolem kterých se kolečka kreslí, a pro
každý z nich použít x, y, radius daného objektu.

> Veľmi ďakujem, kľudne si môžeš dať načas s odpovedaním, nechcem ťa
> preťažiť :)
>
> Heli
>
>
>
>
>
>
> Dne pátek 8. května 2020 19:16:02 UTC+2 Petr Viktorin napsal(a):
>
> On 2020-05-08 18:06, Helena Zubčeková wrote:
> > Ahoj,
> >
> > Prichádzam s ďalšou otázkou - tentokrát v záverečnom projekte
> Asteroids.
> > Tu je zadanie:
> > "Aby bylo vidět co si hra o objektech „myslí”, nakresli si nad
> každým
> > objektem příslušné kolečko. Nejlepší je to udělat pomocí
> pyglet.gl <http://pyglet.gl>
> >
> <http://pyglet.readthedocs.org/en/latest/programming_guide/gl.html
> --
> --
> E-mailová skupina djan...@googlegroups.com
> Správa: http://groups.google.cz/group/django-cs
> ---
> Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny
> „django-cs“ ve Skupinách Google.
> Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny,
> zašlete e-mail na adresu django-cs+...@googlegroups.com
> <mailto:django-cs+...@googlegroups.com>.
> Chcete-li tuto diskusi zobrazit na webu, navštivte
> https://groups.google.com/d/msgid/django-cs/8aad8535-7786-403b-a714-db6294ae4c1a%40googlegroups.com
> <https://groups.google.com/d/msgid/django-cs/8aad8535-7786-403b-a714-db6294ae4c1a%40googlegroups.com?utm_medium=email&utm_source=footer>.
Reply all
Reply to author
Forward
0 new messages