WEEK 1 DAY 2
JavaScript syntax
Screen coordinate system
Program flow
What are functions
How to draw basic shapes
How to calculate coordinates
How to change fill, stroke, etc.
How to add interaction with mouse
Debugging
Borrowing code
MEMORY
Storing data and accessing it later
Variables, arrays, objects
SEQUENCE
Running instructions in order
Functions, algorithms
SELECTION
Making choices
Conditionals and logic (if, else, and, or, not)
REPETITION
Doing the same thing more than once
Loops (for, while)
function setup(){
//set canvas size 500*500px
createCanvas(500,500);
background(255,0,0); //red background
strokeWeight(4); //set strokeWeight
stroke(0); //set stroke color to black
}
function draw(){
fill(255); //set fill colour white
ellipse(250,250,350,350); //draw face
fill(0); //set fill colour black
ellipse(200,200,50,100); //draw eye
ellipse(300,200,50,100); // draw eye
fill(255,100,250); //set fill colour pink
ellipse(250,250,40,40); //draw nose
fill(255,100,250); //set fill colour pink
line(200, 300, 300, 300); //draw mouth
}
PROBLEM:
How to keep track of all the numbers and edit them easily?
Variables are used to label and store data
This data can then be used throughout your program
Variables make code more flexible
Instead of changing every number by hand, you can change variable values
We have already used some built-in variables
mouseX and mouseY store the cursor position
width and height store the size of canvas
myVariable
value
let myVariable;
myVariable = 100;
let myVariable = 100;
Declare a variable with a name
Assign a value to the variable
Declare and assign value with one statement
let x = 3; // assign value 3 to variable x
let y = 6; // assign value 6 to variable y
x = 4; // re-assign value 4 to variable x
let sum = x + y; // assign value 10 to variable sum
let price = 9.99; // assign a decimal number
let name = "Mickey Mouse"; // assign a string
You can re-assign variables
Give the variable a new value
You can perform calculations with variables
You can also store other things than numbers
const x = 3; // assign value 3 to a constant variable x
x = 4; // ERROR! const can not be re-assigned
const y; //ERROR! const has to be declared with a value
Variables are recognised and accessible only inside their scope
Defining a variable outside all {} blocks makes its scope global
The variable can be used everywhere
Defining a variable inside a block makes it scope local
The variable can be used in only that block
LET'S MAKE THIS CODE MORE FLEXIBLE AND ELEGANT USING VARIABLES!
PROBLEM: HOW TO "ANIMATE" SHAPES?
The draw function runs ~60 times per second
If we are drawing the same frame over and over again the sketch looks static
Changing slightly what we are drawing in every frame will appear as movement
Like a frame-by-frame animation!
One way we can do this is incrementing (increasing) the value of a variable every time the draw function runs
i = i+1;
i+=1;
redefine i with the previous value of i plus 1
a shorthand version of the same statement
i++;
even shorter version of the same statement
PROBLEM: HOW TO MAKE THE ANIMATION LOOP BACK TO THE BEGINNING
So far our code is doing the same thing over and over
How can we make the code do different things in different conditions?
For this we need logic
“If the ball reaches the border, then go back to beginning”
Logic acts on boolean expressions
“The ball has reached the edge” can be TRUE or FALSE
Comparing values produces boolean expressions
“If the x-coordinate of the ball is larger than width of canvas”
We can combine boolean expressions with logic operators
“If x is smaller than 0 OR x is larger than width”
< //smaller than
> //greater than
<= //smaller than or equal to
>= //greater than or equal to
=== //equal to
!== //not equal to
let i = 3;
i < 7 //TRUE
i > 5 //FALSE
i >= 1
i <= 3.5
i === 2.9
i !== 3
&& //AND
|| //OR
! //NOT
let i = 3;
(i > 2) && (i < 7)
(i < 1) || (i < 5)
!(i === 3)
if(condition){
//block of code to be executed
//if the condition is true
}
if(condition){
//executed if the condition is true
}
else {
//executed if the condition is false
}
boolean expression
curly brackets
if (condition1) {
//executed if condition1 is true
}
else if (condition2) {
//executed if the condition1 is false and condition2 is true
}
else {
//executed if the condition1 is false and condition2 is false
}
Multiple conditions can be tested using the else-if structure
So far we have learned how to use the mouseX and mouseY variables which give the cursor coordinates
You can also trigger events with mouse clicks by using the mouseIsPressed variable
A boolean variable that is true when mouse is pressed
if (mouseIsPressed) {
//do stuff when mouse is pressed
}
//defining variables
let i;
let i = 0;
//incrementing variables
i = i+1;
i += 1;
i++;
if(/*condition1*/){
//executed if condition1 is true
}
else if(/*condition2*/){
//executed if condition1 is false and condition2 is true
}
else{
//executed if both conditions are false
}
//logic operators
&& //AND
|| //OR
! //NOT
//comparison operators
< //smaller than
> //greater than
<= //smaller than or equal to
>= //greater than or equal to
=== //equal to
!== //not equal to
//mouse interaction
mouseIsPressed; //true when mouse is pressed
Sigil is a personalised, magical emblem that is often used for self-actualisation. The sigil symbolises a wish, an ambition, or an entity the user desires to summon. It can contain a monogram that represents the wish, and other abstract or representational elements that illustrate the desired outcome.
“Sigils help you to achieve goals, co-create your reality, self-actualize your potential and fulfill your deepest dreams and desires.”
“Modern corporate logos are a type of sigil.”
If possible, we want to make our designs responsive, so that they can be scaled to any dimension.
Whitney Museum identity by Experimental Jetset 2013
“Vital Question: can a mark be variable without at the same time forfeiting its mark-like character? Counter-question: what is typical about a mark, the proportion of the ‘configuration’? My answer is known: it is not and cannot be a question merely of proportions as such. Proportions can never be anything but good (or bad) relative to the task. But: in the structure of any sign, however great the number of variants, there is always one which must be declared to be the exemplar. The ‘configuration’ must not suffer as a result of the variability.”
Karl Gerstner: Designing Programmes (1964)
Only use primitive shapes
Ellipse, rect, line, triangle, quad, point, arc
Use the width and height attributes
Use at least one variable (in a meaningful way)
Use max 2 colours
LEVEL 1 ADVANCED: Make the sigil responsive, so that it can be scaled to any size and dimension of the canvas. (See the Assignment 1 Template)
LEVEL 2 ADVANCED: Use conditional statements
LEVEL 3 ADVANCED: Animate the sigil!
Your name and date
Explain briefly the key features of your sigil. What is it for?
Reference any code you have copied from someone else
(No need to reference class examples
Add comments inline with your code
Explain how the code works
Make sure the code runs without errors
Submit the web editor link to your sketch in MyCourses
Consider which aspects of the sigil should be scalable and which should remain constant
What are the “initial” or “optimal” dimensions of your design?
We haven’t yet learned how to rotate shapes, draw custom shapes, or work with text. Think how to use the primitive shapes to bypass this.
Share your cool creations on Week 1 Showcase
Weekly Reading I
Coding Assignment I