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ç

  1. Crea un nou projecte a Arcade.
  2. 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)
    
  3. Identifica com s’utilitza sprites.create_projectile_from_side per crear un taxi que es mogui per la pantalla.
  4. Identifica com s’utilitza sprites.create_projectile_from_sprite per crear clients que baixin del taxi.

Tasca #1: Taxi amb molta feina

  1. Comença amb el codi de l’exemple #1
  2. 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.
  3. 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
  4. 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 utilitzant my_sprite.set_kind(SpriteKind.<tipus>)

  • Crear els projectils utilitzant sprites.create_projectile i definir el tipus de SpriteKind 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
  1. Identifica com s’utilitza set_bounce_on_wall per fer que la pilota reboti contra les parets.

Tasca #2: Més salts!

  1. Comença amb el codi de l’exemple #2
  2. Afegeix una acceleració en l’eix y (ay) de 40 a la pilota
  3. Pausa durant 10 segons després d’establir l’acceleració
  4. Després de la pausa, desactiva el rebot contra les parets (estableix-lo a false)
  5. Què passa quan la pilota ja no rebota contra les parets?

Concepte: Efectes de Partícules

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 dels sprites creats amb sprites.create?
    • Com canvia el comportament d’un Sprite amb SpriteFlag.StayInScreen?
    • Com impacten els efectes de partícules al teu joc?
  • Resol els següents exercicis curts i pega el codi en el document:
    • Crea un projectil amb el tipus Enemy, i estableix la seva vx a 100. Crea un altre projectil amb el tipus Enemy, i estableix la seva vx a -100. Crea una imatge única per a cada sprite, i presta atenció a on comencen i com es mouen.
    • Utilitza un bucle for per a crear deu sprites de projectil amb una imatge de la teva elecció. Assigna a cada sprite una velocitat per a fer-lo moure cap a la dreta. Estableix la seva posició y a 16 vegades la variable del bucle i, i assegura’t que els sprites comencen al costat esquerre de la pantalla.
    • Utilitza un bucle for per a crear dotze sprites 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 bucle i. 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’efecte effects.trail després de crear els ànecs (i abans de pausar). Aquest efecte afegirà una cua de colors a sobre del sprite mentre es mou per la pantalla.

Puja el document a l’aula virtual (tasca 2.2.5).