Projectils

Els sprites formen la base de la majoria dels jocs en MakeCode Arcade. Hi ha diverses opcions disponibles per crear i utilitzar sprites per a fer-los flexibles i fàcils d’utilitzar.
Una de les opcions més importants és la capacitat de crear projectils. Aquests són sprites que es mouen per la pantalla de manera independent dels altres sprites i, per defecte, desapareixen quan arriben als límits de la pantalla.
Son útils per a representar objectes que es mouen per la pantalla, com ara bales, enemics, o qualsevol altre objecte que es mogui de manera independent del jugador.
Concepte: Projectils en Python
En blocs, hi havia dues formes de crearprojectils:
-
projectils des del costat, que es mouen per la pantalla des del costat
# Passarem la imatge del projectil, la velocitat x i la velocitat y sprites.create_projectile_from_side(img: Image, vx: number, vy: number) -
i
projectil des d'sprite, que comencen en la mateixa posició que l’spriteproporcionat.
# Passarem la imatge del projectil, l'sprite i la velocitat x i y sprites.create_projectile_from_sprite(img: Image, sprite: Sprite, vx: int, vy: int)
Exemple #1: Taxi Veloç

- Crea un nou projecte a Arcade.
-
Copia el següent codi a l’editor de MakeCode Arcade i executa’l.
taxi = sprites.create_projectile_from_side(sprites.vehicle.car_blue_right, 50, 0) for i in range(4): pause(1000) client = sprites.create_projectile_from_sprite(sprites.castle.princess_front0, taxi, 0, 30) - Identifica com s’utilitza
sprites.create_projectile_from_sideper crear un taxi que es mogui per la pantalla. - Identifica com s’utilitza
sprites.create_projectile_from_spriteper crear clients que baixin del taxi.
Tasca #1: Taxi amb molta feina
- Comença amb el codi de l’exemple #1
- Utilitza una segona vegada
create_projectile_from_spriteen cada iteració del bucle, per crear un segon client que baixi del taxi i vaja en direcció contrària al primer client. - Fes que el
taxis’ature temporalment per fer que es baixen els clients:- Estableix la velocitat
vxdel taxi a 0 - Pausa mig segon
- Estableix la velocitat
- Després que els clients baixen del taxi, restableix la seva
vxa 50
Aquestes funcions no ens permeten definir el tipus de
SpriteKinddels projectils creats. Per poder fer-ho tenim dues opcions:
Modificar el tipus de
SpriteKinddels projectils després de ser creats utilitzantmy_sprite.set_kind(SpriteKind.<tipus>)Crear els projectils utilitzant
sprites.create_projectilei definir el tipus deSpriteKinden el moment de la creació.La primera opció és més senzilla, la segona és més flexible pero més complexa, per lo que no la veurem en aquesta activitat.
Concepte: Flags dels sprites
Les flags dels sprites poden utilitzar-se per a configurar comportaments comuns als sprites. Utilitzarem set_flag per a activar o desactivar aquestes flags.

projectil.set_flag(SpriteFlag.AUTO_DESTROY, False)
. . d d d d d d d d d d d . .
. d d d d d d d d d d d d d .
. d d d d d d d d d d d d d .
d d d d d d d d d d d d d d d
d d d d d d d d d d d d d d d
d d d d d d d d d d d d d d d
d d d d d d d d d d d d d d d
d d d d d d d d d d d d d d d
d d d d d d d d d d d d d d d
d d d d d d d d d d d d d d d
. d d d d d d d d d d d d d .
. d d d d d d d d d d d d d .
. . d d d d d d d d d d d . .
. . . . d d d d d d d . . . .
"""))
my_sprite.set_flag(SpriteFlag.BOUNCE_ON_WALL, True)
# Per a les flags més utilitzades hi ha propietats específiques
my_sprite.set_bounce_on_wall(True)
my_sprite.vx = 50
- Identifica com s’utilitza
set_bounce_on_wallper fer que la pilota reboti contra les parets.
Tasca #2: Més salts!
- Comença amb el codi de l’exemple #2
- Afegeix una acceleració en l’eix
y(ay) de 40 a la pilota - Pausa durant 10 segons després d’establir l’acceleració
- Després de la pausa, desactiva el rebot contra les parets (estableix-lo a
false) - Què passa quan la pilota ja no rebota contra les parets?
Concepte: Efectes de Partícules

Els efectes de partícules són efectes visuals que poden aplicar-se en el teu joc. Normalment no afecten la jugabilitat, si no que són per a fer el joc més atractiu visualment.
These effects can be used in many different ways. One common use is to start the effect on a Sprite, with mySprite.startEffect.
Aquests efectes es poden utilitzar de moltes maneres diferents. Un ús comú és començar l’efecte en un Sprite, amb mySprite.star_effect(effects.<nom>, <temps>).
L’altra manera comuna d’utilitzar els efectes de partícules és començar l’efecte a la pantalla sencera amb effects.<nom>.start_screen_effect(<temps>, <partícules_per_segon>).
En l’exemple a continuació, començarem un efecte de foc en un Sprite i un efecte de tempesta de neu a la pantalla sencera.
sprite.start_effect(effects.fire)
effects.blizzard.start_screen_effect()
Avaluació
Crea un document i:
- Respon a les següents preguntes:
- Com són diferents els
projectilsdelsspritescreats ambsprites.create? - Com canvia el comportament d’un
SpriteambSpriteFlag.StayInScreen? - Com impacten els efectes de partícules al teu joc?
- Com són diferents els
- Resol els següents exercicis curts i pega el codi en el document:
- Crea un projectil amb el tipus
Enemy, i estableix la sevavxa 100. Crea un altre projectil amb el tipusEnemy, i estableix la sevavxa -100. Crea una imatge única per a cadasprite, i presta atenció a on comencen i com es mouen. - Utilitza un bucle
forper a crear deuspritesde projectil amb una imatge de la teva elecció. Assigna a cadaspriteuna velocitat per a fer-lo moure cap a la dreta. Estableix la seva posicióya 16 vegades la variable del buclei, i assegura’t que elsspritescomencen al costat esquerre de la pantalla. - Utilitza un bucle
forper a crear dotzespritesde projectil (ànecs) que es moguin cap a l’esquerra per la pantalla. Estableix que cada ànec tingui una posicióyque sigui 10 vegades la variable del buclei. Al final de cada iteració del bucle, pausa durant 500ms perquè els ànecs no apareguin tots al mateix temps. En el bucle, comença l’efecteeffects.traildesprés de crear els ànecs (i abans de pausar). Aquest efecte afegirà una cua de colors a sobre delspritementre es mou per la pantalla.
- Crea un projectil amb el tipus
Puja el document a l’aula virtual (tasca 2.2.5).