8000 worker fixes; new noise worker example · GameJs/gamejs@0b251c8 · GitHub
[go: up one dir, main page]

Skip to content

Commit 0b251c8

Browse files
committed
worker fixes; new noise worker example
1 parent bebe442 commit 0b251c8

File tree

8 files changed

+113
-4
lines changed

8 files changed

+113
-4
lines changed

doc/changelog

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
* improved: jshinted all files
44
* improved: gamejs.pixelcollision API
5+
* added: threaded noise example; uses webworkers to produce new map
56
* feature: add gamejs.tiledmap.MapView and tiledmap.LayerView to draw the map
67
* removed: gamejs.sprite and SpriteGroup module
78
* adapted: all examples, most are nicer now
File renamed without changes.
File renamed without changes.
File renamed without changes.

examples/threaded-noise/index.html

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<title>GameJS Application</title>
5+
<style type=text/css>
6+
body{
7+
background:#fff;
8+
color:#222;
9+
margin:1em 0 2em 6em;
10+
padding:0;
11+
}
12+
</style>
13+
<script src="../../gamejs-2.0.0-alpha.js"></script>
14+
<script>
15+
require.setModuleRoot('./');
16+
require.run('main')
17+
</script>
18+
</head>
19+
<body>
20+
<div>
21+
<div id="gjs-loader">
22+
Loading...
23+
</div>
24+
<canvas id="gjs-canvas"></canvas>
25+
<p>
26+
Powered by <a href="http://gamejs.org">GameJs</a>.
27+
</p>
28+
</div>
29+
</body>
30+
</html>

examples/threaded-noise/main.js

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
var gamejs = require("gamejs");
2+
var SurfaceArray = require('gamejs/graphics').SurfaceArray;
3+
var blitArray = require('gamejs/graphics').blitArray;
4+
var logger = require('gamejs/logging');
5+
6+
gamejs.ready(function() {
7+
var dims = [600, 400];
8+
var display = gamejs.display.setMode(dims);
9+
var displayArray = new SurfaceArray(display);
10+
var infoFont = new gamejs.font.Font();
11+
12+
13+
var versionCounter = 0;
14+
var updateDisplay = function(noiseData) {
15+
// asign pixel colors according to the noise
16+
for (var i=0;i<dims[0];i++) {
17+
for (var j=0;j<dims[1];j++) {
18+
var val = noiseData[i][j];
19+
var r = val > 0 ? val : 0;
20+
var b = val < 0 ? -val : 0;
21+
displayArray.set(i, j, [r, 0, b]);
22+
}
23+
}
24+
// and blit the modified array back to the display
25+
// with the extra fast gamejs.graphics.blitArray function
26+
blitArray(display, displayArray);
27+
versionCounter++;
28+
display.blit(infoFont.render('Displaying noise version #' + versionCounter, '#ffffff'));
29+
};
30+
31+
// spawn a thread with the main module "./noise-worker", which
32+
// will create the noise data
33+
var noiseWorker = new gamejs.thread.Worker('./noise-worker');
34+
// recieve noise data from worker
35+
noiseWorker.onEvent(function(event){
36+
logger.log('Recieved noise data from worker');
37+
updateDisplay(event.noiseData);
38+
// .. and request new noise data, after a short delay
39+
setTimeout(function() {
40+
noiseWorker.post(requestNoiseData)
41+
}, 1000)
42+
})
43+
44+
45+
var requestNoiseData = {dimensions: dims};
46+
// send dimensions to worker so he starts creating noise data
47+
noiseWorker.post(requestNoiseData);
48+
49+
});
+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
var gamejs = require('gamejs');
2+
var logger = require('gamejs/logging');
3+
4+
// create array with noise data to display
5+
var createNoise = function(dimensions) {
6+
var simplex = new gamejs.math.noise.Simplex(Math);
7+
var surfaceData = [];
8+
for (var i=0;i<dimensions[0];i++) {
9+
surfaceData[i] = [];
10+
for (var j=0;j<dimensions[1];j++) {
11+
var val = simplex.get(i/50, j/50) * 255;
12+
surfaceData[i][j] = val;
13+
}
14+
}
15+
return surfaceData;
16+
}
17+
18+
gamejs.ready(function() {
19+
20+
gamejs.event.onEvent(function(event) {
21+
logger.log('Recieved request for noise data with dimensions', event.dimensions);
22+
//
23+
// create noise with right dimensions and send it back
24+
gamejs.thread.post({
25+
noiseData: createNoise(event.dimensions)
26+
});
27+
})
28+
29+
})

src/gamejs/thread.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ var _EVENTS = exports._EVENTS = {
3232
*
3333
* // recieve events from the worker
3434
* fooWorker.onEvent(function(event) {
35-
* if(event.data.timestamp > ...)
35+
* if(event.timestamp > ...)
3636
* });
3737
*
3838
* And this is how the above referenced "foo-worker" module would looke like. As usual, we need a
@@ -51,7 +51,7 @@ var _EVENTS = exports._EVENTS = {
5151
* with `gamejs.thread.post()`:
5252
*
5353
* gamejs.thread.post({
54-
* type: "important message from worker",
54+
* info: "important message from worker",
5555
* timestamp: 12232435234
5656
* });
5757
*
@@ -201,13 +201,13 @@ exports.Worker = function(moduleId) {
201201
self.post(data);
202202
});
203203
} else if (event.data.type === _EVENTS.LOG) {
204-
gamejs.log.apply(null, [id].concat(event.data.arguments));
204+
gamejs.logging.log.apply(null, [id].concat(event.data.arguments));
205205
} else {
206206
triggerCallbacks(_CALLBACKS, event.data.data);
207207
}
208208
};
209209
worker.onerror = function(event) {
210-
gamejs.error('Error in worker "' + id + '" line ' + event.lineno + ': ', event.message);
210+
gamejs.logging.error('Error in worker "' + id + '" line ' + event.lineno + ': ', event.message);
211211
triggerCallbacks(_ERROR_CALLBACKS, {
212212
data: event.data,
213213
worker: self,

0 commit comments

Comments
 (0)
0