Document stub.png
This page has bad source code style. If you can improve it according to Scratch Wiki:Style Guide, please do! (July 2020)


Document stub.png This article is a stub. It may be incomplete, unfinished, or have missing parts/sections. If the article can be expanded, please do so! There may be suggestions on its talk page. (November 2019)

This tutorial will show how to make pen particles. These are often used as background or death effects in many games.

Adding Particles to a List

The first step to making pen particles is making a list of particles as a 2D array, each particle will have more than one item on the particles list. First, a list needs to be created, called particles:

(particles::list)

Now, a script that adds a particle at a certain x and y position with a certain x and y velocity.

define Add particle | Position:(x), (y) | Velocities: (X Vel) (Y Vel) Color: (color) Size (size::custom)
add (x::custom) to [particles v] // The starting X position of the particle
add (y::custom) to [particles v] // The starting Y position of the particle
add (X vel::custom) to [particles v] // The starting X velocity of the particle
add (Y vel::custom) to [particles v] // The starting Y velocity of the particle
add (color::custom) to [particles v] // The color of the particle
add (size::custom) to [particles v] // The size of the particle

Deleting Particles

Now a script needs to be created to delete a particle at a certain item on the particles list:

define Delete particle (i)
delete ((i)+(5)) of [particles v] // starts at the particle's last item in the list
delete ((i)+(4)) of [particles v] // and moves back until all items on the list that belong to that particle are deleted
delete ((i)+(3)) of [particles v]
delete ((i)+(2)) of [particles v]
delete ((i)+(1)) of [particles v]
delete (i) of [particles v]

Rendering Particles

A script will also be needed to render the particles that are already stored in the particles list:

define Render
erase all // erasing all of the drawing made previously
set [i v] to (1)
repeat ((length of [particles v]::list)/(6)) // The amount of particles in the list because each particle takes up 6 items
    go to x: (item (i) of [particles v]) y: (item ((i)+(1)) of [particles v]) // We use the particle's items on the list to set the properties of the sprite
    set pen size to (item ((i)+(5)) or [particles v]::list)
    set pen color to (item ((i)+(4)) or [particles v]::list)
    pen down // Making a dot
    pen up
    change [i v] by (6)

Updating the Particles' Positions

This script moves the particles around:

define Update
set [i v] to (1)
repeat ((length of [paticles v])/(6)
    replace (i) of [particles v] with ((item (i) of [particles v])+(item ((i) + (2)) of [particles v]))::list // Changing the x position by the x velocity
    replace ((i)+(1)) of [particles v] with ((item ((i)+(1)) of [particles v])+(item ((i) + (3)) of [particles v]))::list // Changing the y position of the particle by its y velocity
    replace ((i)+(2)) of [particles v] with (((item ((i)+(2)) of [particles v])::list)-(1))::dark grey//Optional gravity, change the Y velocity by -1
    if<<([abs v](item (i) of [particles v])::operators)>(240)> or<([abs v](item ((i)+(1)) of [particles v])::operators)>(180)>>then
        Delete particle (i)::custom // if the particle if off the screen, delete it.
    end
    change [i v] by (6)

Implementing The Code

Now that all the scripts are made we need to use them! Depending on the type of program you wish to make, you may want to make mouse effects:

When green flag clicked
delete all of [particles v]
forever
    Add particle | Position:(mouse x), (mouse y) | Velocities: (pick a random (-10) to (10)::operators) (pick a random (-10) to (10)::operators) Color: (pick a random (0) to (100)::operators) Size (pick a random (-10) to (10)::operators)::custom
    Update::custom
    Render::custom
end

Or you can make background effects

When green flag clicked//If you make background effects, make sure that they do not have gravity by removing the change y velocity block in the update script.
delete all of [particles v]
forever
    Add particle | Position:(pick a random (-240) to (240)::operators), (pick a random (-180) to (180)::operators) | Velocities: (pick a random (-10) to (10)::operators) (pick a random (-10) to (10)::operators) Color: (pick a random (0) to (100)::operators) Size (pick a random (-10) to (10)::operators)::custom
    Update::custom
    Render::custom
end