From Test-Scratch-Wiki
The Pen is a feature in Scratch that allows a Sprite to draw shapes, plot colored pixels, and so forth on the screen with the Pen Blocks.
Lines, dots, rectangles, and circles are the easiest shapes to draw, but with enough scripting, any shape can be created.
Blocks Related to the Pen
- Main article: Pen Blocks
— Clears all pen marks on the screen
— Turns the pen feature on inside a sprite; the sprite will pen on the screen wherever it moves until the pen is turned off
— Turns the pen feature off, stopping a sprite from penning
— Sets the color of the pen to a color chosen by the programmer
— Changes the pen color by a certain value
— Sets the color of the pen to a color chosen by the programmer using a number system
— Changes the shade of the color by a chosen value
— Sets the shade of the color to a chosen value
— Changes the size of the pen by a chosen number
— Sets the size of the pen to a chosen number
— Draws a copy of the Sprite on the Stage
Flash Player Glitches
The Flash Player appears to set a maximum pen size. This is due to the Flash Player using one byte of data to store the pen size. There are 256 possible outcomes of one byte (28 values encoded in 8 binary bits), so the Flash Player most likely uses the 256 possible outcomes to each stand for a pen size from 0-255.
The Flash Player also has a bug where the pen size "1" does not paint the entire pixel. If the pen size is set to 1 and used in Scratch to paint every pixel, a solid region will be formed. However, with the Flash Player, a translucent region will be formed as only part of each pixel will be colored. To avoid this, set the pen size to "2" if you want it to be one pixel on the Flash Player.
However, this glitch can be helpful if one wants to draw transparent regions on the flash player. It would take a long time to draw the transparent figure pixel by pixel even with turbo speed, so a sprite using the ghost Graphic Effect would be more effective.
Also, when Flash Player is drawing with the pen using medium or low quality, very low pen sizes are not drawn at all. To change your quality in the flash player:
- Right-click or control-click (Mac) the project
- Click on Quality
- Choose desired quality
Uses
The pen blocks are often used to:
- Make Snake style games
- Make a trail behind a sprite
- Animating
- Drawing objects in one sprite, one script projects
- Drawing patterns
- Creating graphs
- Program graphics editors
- 3D projects
- Text Rendering
Transparent Pen
Transparent pen is a feature in Scratch 2.0 added in v435.2[1] that allows the transparency of the pen.
Formula
The formula for ARGB (aka RGBA) is similar to that of RGB (red, green, and blue), but it has an additional value, Alpha (A) for opacity. Alpha is identified by a number 1-255, where 1 is completely transparent and 255 is opaque. The formula for RGB (without Alpha) is:
set pen color to ((((R) * (65536)) + ((G) * (256))) + (B)) // Be sure to use the pen color block with the color input (like the one below), or the colors will not function properly. set pen color to [#0000FF]
And the formula for ARGB is:
set pen color to ((((A) * (16777216)) + ((R) * (65536))) + (((G) * (256)) + (B)))
Warning: Make sure the A, R, G, and B values are whole numbers (rounded) so they don't contribute to other colors' values. To ensure that this does not happen, it is recommended that you use the following code:
set pen color to ((((round (A)) * (16777216)) + ((round (R)) * (65536))) + (((round(G)) * (256)) + (round (B))))
Use of "run without screen refresh" custom block
Run without screen refresh is a custom block operation that is used to speed up actions by refreshing the screen only after the operation has finished. When you create a custom block, select "run without screen refresh" in the Options. A script that could use the custom block to draw a picture may look like this:
define draw // Here's our block! set [repeater v] to (0) // Our variable keeps track of which item to pick on the color list set pen size to (2) // Set the size to 2 to avoid a Flash Player glitch go to x (-240) y (180) // Starting pos repeat (360) // Repeat y repeat (480) // Repeat x change [repeater v] by (1) // Change our variable by 1 set pen color to (item (repeater) of [list v]) // Set the pen color to what it's meant to be from the list pen down // Pen down pen up // Pen up change x by (1) // Change x by 1 end set x to (-240) // Back at the far left of the screen change y by (-1) // Change our y by -1 end
or as a variable:
define draw // Here's our block! set [repeater v] to (0) // Our variable keeps track of which item to pick on the color list set pen size to (2) // Set the size to 2 to avoid a Flash Player glitch go to x (-240) y (180) // Starting pos repeat (360) // Repeat y repeat (480) // Repeat x change [repeater v] by (3) // Change our variable by 3 (length of 200, the max color) set [temporaryvar v] to [] // A temporary variable creating the color from the variable set [temporaryvar v] to (letter ((repeater) - (2)) of (variable) set [temporaryvar v] to (join (temporaryvar) (letter ((repeater) - (1)) of (variable)) set [temporaryvar v] to (join (temporaryvar) (letter (repeater) of (variable)) set pen color to () // Set the pen color to what it's meant to be from the list pen down // Pen down pen up // Pen up change x by (1) // Change x by 1 end set x to (-240) // Back at the far left of the screen change y by (-1) // Change our y by -1 end
Of course you are going to have to make a list or variable to contain all the colors, and it's going to have to be 172800 colors long. However, lower resolution images can be created by tweaking the scripts, and it will require less items for the list. And a few scripts may create an image editor that can save the image you have drawn to a list.