IAT 800

advertisement
IAT 355
Java using Processing
______________________________________________________________________________________
SCHOOL OF INTERACTIVE ARTS + TECHNOLOGY [SIAT] | WWW.SIAT.SFU.CA
Processing

Processing is built on top of Java

Supports script-like coding
– Easy to get simple programs up fast
– But allows transition to full Java programming


Has built-in methods and classes to make drawing
easy
Easy to export program to applet
May 7, 2014
IAT 355
2
Playing around
 To
learn how to program it is necessary to
play around with code!!!
– Don’t just wait for me to show you things
 Processing
makes this easy
– Use the Reference in the Help menu
– or www.processing.org/reference
– Play with the examples
May 7, 2014
IAT 355
3
Saving your work

You should install Processing on your own
machine
– Do this immediately

Processing saves all projects in a directory you
can select via preferences
– You should always copy your code to your local disk
May 7, 2014
IAT 355
4
Drawing in Processing

Automatic creation of display window

Window has a coordinate system for drawing
0
0
50
100
x
50
100
y
May 7, 2014
IAT 355
5
Let’s draw a point: point()
point(x,y) – draws a point at the location x, y
Let’s try it: point(50, 50)
Unexpected token: null – what ??

Compiler errors appear in the bottom pane
All lines must be terminated with a semicolon ;
May 7, 2014
IAT 355
6
Drawing several points
point(
point(
point(
point(
May 7, 2014
30,
85,
85,
30,
20
20
75
75
);
);
);
);
IAT 355
7
Comments

Comments are non-program text you put in the file to describe
to others (and yourself) what you’re doing

Important for being able to look back at your code and
understand it

Single-line comments begin with //

Multi-line comments begin with /* and end with */
Commenting and uncommenting lines is
useful for figuring out code
May 7, 2014
IAT 355
8
Drawing shapes: some
primitives
line(x1, y1, x2, y2);
triangle(x1, y1, x2, y2, x3, y3);
rect(x, y, width, height);
rectMode() – CORNER, CORNERS, CENTER
ellipse(x, y, width, height);
ellipseMode() – CENTER, CENTER_RADIUS, CORNER, CORNERS
Don’t use these draw modes!!! rectMode(), ellipseMode()
May 7, 2014
IAT 355
9
Controlling color and line
Colors represented as Red Green Blue (RGB) values
Each one ranges from 0 to 255
Can also use Hue Saturation Value (HSV) space, but we won’t worry about this for now
background(R,G,B); – set the background color
stroke(R,G,B); – set the colors of the outline (default black)
noStroke();
– no outline drawing around shapes
fill(R,G,B); – set the fill color for shapes (default white)
noFill();
– don’t fill the shapes (background shows through)
strokeWeight(w); – line width for outlines (default 1)
May 7, 2014
IAT 355
10
Drawing primitives revisited
 What
are the different syntax parts of a
drawing primitive?
method name
line( 0, 0, 50, 50 );
arguments,
parameters
parentheses contain arguments
May 7, 2014
IAT 355
11
The drawing commands are
methods

Methods are reusable commands
– Like a little machine that does work for you
– Let’s you reuse code without typing it over and over

The arguments tell the method precisely what
to do

We’ll see later that you can define your own
methods!
May 7, 2014
IAT 355
12
Introduction to variables

A variable is a named box for storing a value

You can put values in a variable by using the
assignment operator (aka “=“ )
e.g. x = 1;

To use the value stored in a variable, just use
the variable’s name
e.g. line(x, 0, 50, 50);
May 7, 2014
IAT 355
13
Variables have a type
 You
must tell Processing (Java) what
kinds of values can go in the box
 You
int x;
int y;
do this by giving a variable a type
// variable x can hold integers (int)
// variable y can hold integers (int)
x = 20; // store 20 in x
y = 30; // store 30 in y
point(x, y); // use the values of x and y to draw a point
May 7, 2014
IAT 355
14
Effect of creating an int
variable
Code
Effect
Name: anInt, Type: int
// Single int
int anInt;
// Put a value in the int
anInt = 3;
Name: anInt, Type: int
// Type error!
anInt = “hello”;
May 7, 2014
Name: anInt, Type: int
3
“hello”
Can’t shove “hello” into an int
IAT 355
15
Assigned values must match
the type
int x;
int y;
// variable x can hold integers (int)
// variable y can hold integers (int)
x = 1.5;
y = 30;
point(x, y);
// store 1.5 in x causes an error!!!
// store 30 in y
// use the values of x and y to draw a point
May 7, 2014
IAT 355
16
Why Types?
 Tells
system (and you) what kind of
values to expect
 System uses type to detect errors
int pi = 3.14 ; //  error: 3.14 not an int
May 7, 2014
IAT 355
17
The “primitive” types
int – integers between 2,147,483,648 and 2,147,483,647
float – floating point numbers (e.g. 3.1415927, -2.34)
char – a single character (e.g. ‘c’)
byte – integers between -128 and 127
boolean – holds the values true or false
color – holds a color (red, green, blue, alpha)
May 7, 2014
IAT 355
18
Can combine declaring and
assigning

Declaring a variable means telling Processing its type
int x;

Assigning a value to a variable means putting a value in
the named box
x = 1;

You can declare and assign at the same time
int x = 1;

But only declare a variable once, otherwise you get an
error
May 7, 2014
IAT 355
19
Print and println
 When
working with variables, it is often
convenient to look at their values
 print()
and println() print to the bottom
processing pane
– They do the same thing, except println
starts a new line after printing
May 7, 2014
IAT 355
20
Control flow

By default Processing (Java) executes the lines of a
method one after the other
– Sequential control flow
– Unconditional – doesn’t matter what happens in the world

Often we want which steps are executed to depend on
what else has happened

That is, we want conditional control flow
– This is necessary in order to make anything that is interactive
May 7, 2014
IAT 355
21
If
if statements introduce conditional branches
if ( <boolean expression> )
{
// do this code
}
<boolean expressions> have one of two values:
true or false
May 7, 2014
IAT 355
22
Some boolean expressions
anInteger == 1
true if variable anInteger is equal to 1
x > 20 true if variable x is greater than 20
1 == 2
true if 1 is equal to 2, it’s not so this is false
! is the not operator – reverses true and false so,
! (1 == 2) is true
This is not a boolean expression:
int anInteger = 1;
May 7, 2014
IAT 355
23
Example
strokeWeight(2); // draw with heavier line
stroke(200, 0, 0); // draw with red line
boolean drawRect = true;
boolean drawAnX = true;
if (drawRect)
{
fill(0, 200, 0); // fill with green
rect(30, 30, 40, 40);
}
if (drawAnX)
{
line(0, 0, 100, 100);
line(100, 0, 0, 100);
}
Try changing the values of drawRect and drawAnX
May 7, 2014
IAT 355
24
setup()
setup() is a predefined Processing method
that you define
setup() is called once when a sketch first starts
executing

Place any startup code in setup(), eg.
– Setting the size
– Setting the background color
– Initializing variables…
May 7, 2014
IAT 355
25
draw()
draw() is a predefined Processing method
that you define
draw() is called repeatedly by the Processing
system
 Put
code in draw() when you need to
constantly update the display (for
example, animating an object)
May 7, 2014
IAT 355
26
Example of setup() and draw()
int x;
int y;
void setup() {
size(400, 400);
background(0);
x = 0;
y = height/2;
}
void draw() {
background(0);
ellipse(x, y, 20, 20);
x = x + 1;
if (x > width)
x = 0;
}
May 7, 2014
IAT 355
27
setup() and draw() are
examples of callbacks
A
callback function is defined by the
programmer
– The callback gets called in response to some
internal event
– You usually don’t call callback functions
directly with your own code.
– setup() and draw() are predefined within
Processing as to-be-called-if-defined
May 7, 2014
IAT 355
28
Controlling draw()

framerate() can be used to set the number of times per second that draw() is
called
– framerate(30) says to call draw() 30 times a second (if the computer is capable of it)

delay() delays execution for a certain number of milliseconds
– delay(250) delays for 250 milliseconds (1/4 of a sec.)
– You can use delay() or framerate() to determine how fast you want draw() to be
called – framerate() is probably easier

noloop() tells the system to stop calling draw()
– If you want to, for example, turn off animation

loop() tells the system to start calling draw() again
– Use noloop() and loop() together to turn repeated drawing on and off
May 7, 2014
IAT 355
29
Mouse variables

mouseX and mouseY – variables that
automatically contain the current mouse location
– pmouseX and pmouseY hold the previous location

mousePressed – boolean variable that is true
if a mouse button is down
– mouseButton – value is LEFT, RIGHT or CENTER
depending on which button is held down
May 7, 2014
IAT 355
30
Mouse callback methods

There are several built-in methods you can fill in
to process mouse events
mousePressed()
mouseMoved()
mouseReleased()
mouseDragged()
Example:
void mousePressed()
{
if( mouseBotton == LEFT ){
println( “Left Mouse Button was pressed” );
loop(); // activate drawing again
}
}
May 7, 2014
IAT 355
31
Loops

Sometimes you want to execute code multiple
times
– E.g. draw() is being called in a loop

Java provides a number of looping mechanisms

They all test some boolean expression (just like
an if statement does) and continue to execute
code while the expression is true
May 7, 2014
IAT 355
32
while loops
while( <boolean exp.> )
{
<code to execute each time>
}
 Repeatedly
executes the code body while
the boolean expression is true
May 7, 2014
IAT 355
33
for loops
for( <init. statement> ; <boolean expression> ; <final statement>
)
{
}
<code to execute each time in loop>
First executes the initialization statement
 Then tests the boolean expression – if it's true,
executes the code once
 Then repeats the following:
– execute final statement,
– test boolean expression  execute
May 7, 2014
IAT 355
code if true
34
Converting for to while
Seeing how for loops can be converted to while loops helps
you understand for
for( <init. statement> ; <boolean exp.> ; <final statement> )
{

<code>
}
// is the same as
<init. statement> ;
while( <boolean exp.> )
{
<code>
<final statement> ;
}
May 7, 2014
IAT 355
35
Reading time
int hour()
– returns the hour (0 – 23)
int minute() – returns the minutes (0 – 59)
int second() – returns the seconds (0 – 59)
int day()
– returns the day of the month (1 -31)
int month()
– returns the month (1 – 12)
int year()
– returns the four digit year (e.g. 2004)
float milliseconds() – returns number of millis since start of app
May 7, 2014
IAT 355
36
draw() has nothing to do with
time



The value returned by second() or milliseconds() has
nothing to do with how often draw() is called
In draw() you draw frames – you don’t know how often
it will be called
Put a println in loop to see how often it gets called
long lastTimeLoopWasCalled = 0;
void draw()
{
long milliseconds = millis();
println(milliseconds - lastTimeLoopWasCalled);
lastTimeLoopWasCalled = milliseconds ;
}
May 7, 2014
IAT 355
37
Arrays
 An
array is a contiguous collection of
data items of one type
 Allows you to structure data
– Accessed by index number
May 7, 2014
IAT 355
38
Effect of creating an int
variable
Code
Effect
Name: anInt, Type: int
// Single int
int anInt;
// Put a value in the int
anInt = 3;
Name: anInt, Type: int
// Type error!
anInt = “hello”;
May 7, 2014
Name: anInt, Type: int
3
“hello”
Can’t shove “hello” into an int
IAT 355
39
Creating an array of ints
Code
Effect
Name: intArray, Type: int[]
// declare byte array
int[] intArray;
// initialize byte array
intArray = new int[5];
1
2
3
4
0
0
0
0
0
each element has type int
// set first element
intArray[0] = 3;
// set third element
intArray[2] = 5;
May 7, 2014
0
IAT 355
0
1
2
3
4
3
0
0
0
0
0
1
2
3
4
3
0
5
0
0
40
Practice reading code

If code is a medium, then it can be both written and

Reading code reveals
read
–
–
–
–
New programming constructs
Strategies and techniques (design patterns)
Style
Philosophical assumptions (deep reading)
May 7, 2014
IAT 355
41
Download