forked from processing-js/processing-js
/
README
193 lines (142 loc) · 8.06 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
P R O C E S S I N G . J S - @VERSION@
a port of the Processing visualization language
//////////////////////////////////////////////////////////////////////////////
License MIT (see included LICENSE)
Original Author John Resig: http://ejohn.org
see included AUTHORS file for contributer list
Web Site http://processingjs.org
Java Version http://processing.org
Github Repo. http://github.com/jeresig/processing-js
Bug Tracking http://processing-js.lighthouseapp.com
Mozilla POW! http://wiki.Mozilla.org/Education/Projects/ProcessingForTheWeb
Test Suite http://processing-js.buildingsky.net
Maintained by
Seneca http://zenit.senecac.on.ca/wiki/index.php/Processing.js
Hyper-Metrix http://hyper-metrix.com/#Processing
BuildingSky http://weare.buildingsky.net/pages/processing-js
IMPORTANT! - NOTE FOR DEVELOPERS
Please read the guidelines before pushing your code to the repository. The
function(s) you are working on may already be finished and queued for push.
GUIDELINES
http://processing-js.lighthouseapp.com/projects/41284/project-workflow
IRC CHANNEL
Join the development team at irc://irc.mozilla.org/processing.js for more info
Processing.js is an open programming language for people who want to program
images, animation, and interactions for the web without using Flash or Java
applets. Processing.js uses Javascript to draw shapes and manipulate images
on the HTML5 Canvas element. The code is light-weight, simple to learn and
makes an ideal tool for visualizing data, creating user-interfaces and
developing web-based games.
The Processing language was created by Ben Fry and Casey Reas. It evolved
from ideas explored in the Aesthetics and Computation Group at the MIT Media
Lab and was originally intended to be used in a Java run-time environment. In
the Summer of 2008, John Resig ( inventor of jQuery ), ported the 2D context
of Processing to Javascript for use in web pages. Much like the native
language, Processing.js is a community driven project, and continues to grow
as browser technology advances.
//////////////////////////////////////////////////////////////////////////////
PLATFORM AND BROWSER COMPATIBILITY
Processing.js is explicitly developed for and actively tested on browsers that
support the HTML5 <Canvas> element. Processing.js runs in FireFox, Safari,
Chrome and Opera but is not currently supported in Internet Explorer.
Processing.js aims for 100 percent compatibility across all supported browsers;
however, differences between individual canvas implementations may give
slightly different results in your sketches.
Implementing Processing.js in Flash or Silverlight is not recommended, as Java
already occupies the browser plug-in space for this library. For users
wishing to run Processing.js in Silverlight, see Paul Irish's Silverlight
implementation. Using Internet Explorer Canvas with Processing.js typically
results in unusable frame-rates for moderately complex visualizations.
//////////////////////////////////////////////////////////////////////////////
SETTING UP A SIMPLE SKETCH
In order to get a sketch going in the browser you will need to download the
processing.js file and make two new files - one with the extension .html and
the other with the extension .pde or .pjs.
The .html file will have a link to the processing.js file you have downloaded,
and a <canvas> tag with a link to the .pde or .pjs file that you made.
Here is an example of an .html file:
<html>
<head>
<script src="processing.js"></script> //ensure a correct path to the file
</head>
<body>
<canvas data-processing-sources="anything.pjs"></canvas>
</body>
</html>
Note that the .pjs file needs to be named anything.pjs (or whatever you named your file)
and that there is a custom attribute data-processing-sources that is used to link the sketch to
the <canvas>.
Here is an example of a .pjs or .pde file:
void setup()
{
size(200,200);
background(125);
fill(255);
noLoop();
PFont fontA = loadFont("courier");
textFont(fontA, 14);
}
void draw(){
text("Hello Web!",20,20);
println("Hello ErrorLog!");
}
//////////////////////////////////////////////////////////////////////////////
THINGS TO KNOW AS A PROCESSING DEVELOPER USING PROCESSING.JS
Processing.js has no data directory
Processing uses the concept of a data directory, where images and other
are located. Processing.js does not include this. As a result, you should
always provide files (e.g., images) that are relative to your web page,
which is the norm on the web.
Processing.js implements Processing, but not all of Java
Processing.js is compatible with Processing, but is not, and will never be,
fully compatible with Java. If your sketch uses functions or classes not
defined as part of Processing, they are unlikely to work with Processing.js.
Similarly, libraries that are written for Processing, which are written in Java
instead of Processing, will most likely not work.
Processing.js only has two rendering modes
Processing has many rendering modes to choose from, depending on the desired
quality and speed for graphics (e.g., OPENGL, P3D, JAVA2D, etc.). Processing.js
uses <canvas> which provides either a 2D drawing context or a 3D context based on
WebGL a version of OpenGL for the web. Therefore, whatever you choose, you will
end-up with either the 2D or 3D context.
Division which is expected to produce an integer might need explicit casting
There are a class of bugs that arise when converting Processing code to
Processing.js that involve integer vs. floating point division. What was
straight-up integer division in Processing code, when converted to Processing.js,
can sometimes become problematic, as numbers become doubles, and introduce a
fractional part. The fix is to explicitly cast any division to an integer that
exhibits this behaviour:
// before
int g = mouseX / i;
// after
int g = (int)(mouseX / i);
Processing.js has to cheat to simulate Processing's synchronous I/O
Processing uses a synchronous I/O model, which means that functions like
loadImage() take time to execute, and while they are running, nothing else
happens: the program waits until loadImage() is done before moving on to the
next statement. This means that you can count on the value returned by a
function like loadImage() being usable in the next line of code.
Web browsers don't work like this. The web uses an asynchronous I/O model, which
means that functions which load external resources can't make the program wait
until they finish. In order to replicate Processing's load* functions, you have
to use a special Processing.js Directive.
The Processing.js Directives are hints to the browser that are written in
comments rather than in the Processing code itself. Here is an example of
loadImage():
/* @pjs preload="picture.jpg"; */
PImage img;
void setup() {
img = loadImage("picture.jpg");
image(img, 0, 0);
}
Note the syntax (below) to preload multiple images:
/* @pjs preload="picture.jpg,picture2.jpg,picture3.png"; */
Processing.js requires more care with variable naming than Processing
One of the powerful features of JavaScript is its dynamic, typeless nature. Where
typed languages like Java, and therefore Processing, can reuse names without fear
of ambiguity (e.g., method overloading), Processing.js cannot. Without getting into
the inner-workings of JavaScript, the best advice for Processing developers is to
not use function/class/etc. names from Processing as variable names. For example,
a variable named line might seem reasonable, but it will cause issues with the
similarly named line() function built-into Processing and Processing.js.
//////////////////////////////////////////////////////////////////////////////