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’sprite
proporcionat.# 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_side
per crear un taxi que es mogui per la pantalla. - Identifica com s’utilitza
sprites.create_projectile_from_sprite
per 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_sprite
en 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
taxi
s’ature temporalment per fer que es baixen els clients:- Estableix la velocitat
vx
del taxi a 0 - Pausa mig segon
- Estableix la velocitat
- Després que els clients baixen del taxi, restableix la seva
vx
a 50
Aquestes funcions no ens permeten definir el tipus de
SpriteKind
dels projectils creats. Per poder fer-ho tenim dues opcions:
Modificar el tipus de
SpriteKind
dels projectils després de ser creats utilitzantmy_sprite.set_kind(SpriteKind.<tipus>)
Crear els projectils utilitzant
sprites.create_projectile
i definir el tipus deSpriteKind
en 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_wall
per 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
projectils
delssprites
creats ambsprites.create
? - Com canvia el comportament d’un
Sprite
ambSpriteFlag.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 sevavx
a 100. Crea un altre projectil amb el tipusEnemy
, i estableix la sevavx
a -100. Crea una imatge única per a cadasprite
, i presta atenció a on comencen i com es mouen. - Utilitza un bucle
for
per a crear deusprites
de projectil amb una imatge de la teva elecció. Assigna a cadasprite
una velocitat per a fer-lo moure cap a la dreta. Estableix la seva posicióy
a 16 vegades la variable del buclei
, i assegura’t que elssprites
comencen al costat esquerre de la pantalla. - Utilitza un bucle
for
per a crear dotzesprites
de projectil (ànecs) que es moguin cap a l’esquerra per la pantalla. Estableix que cada ànec tingui una posicióy
que 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.trail
després de crear els ànecs (i abans de pausar). Aquest efecte afegirà una cua de colors a sobre delsprite
mentre es mou per la pantalla.
- Crea un projectil amb el tipus
Puja el document a l’aula virtual (tasca 2.2.5).