I have played about with the internals of Dart enough that I feel safe in moving onto some of the browser / DOM integration features. But first a quick diversion to take a look at DartBox2D port of Box2D, a two dimensional physics engine.
First up, I clone the repository:
➜ repos git clone https://code.google.com/p/dartbox2d/ Cloning into dartbox2d... remote: Counting objects: 583, done. remote: Finding sources: 100% (583/583), done. remote: Total 583 (delta 390) Receiving objects: 100% (583/583), 377.38 KiB | 139 KiB/s, done. Resolving deltas: 100% (390/390), done.Then take a look at the demo page. When I click on the first link and check the console output, I see that the Dart detection is not doing a good job of detecting the Dart in my Dartium:
Looking through the code, I see:
if(getQueryVariable('native') && document.implementation.hasFeature('dart')) {
// Browser has the goods, so kick it in to dart gear.
console.log('Dart supported.');
script.setAttribute('type', 'application/dart');
script.setAttribute('src', 'demos/' + demo + '.dart');
} else {
// If browser doesn't support dart, redirect to js version.
console.log('JS fallback.');
script.setAttribute('src', 'js/demos/' + demo + '.dart.js');
}
document.body.appendChild(script);Ah, so I need to manually specify a native=1 query parameter to get native detection to work. With that, DartBox2d admits that I do have Dart:And, more importantly, I get nice demos like a bouncing ball in the "Ball Cage":
And "Circle Stress":
Since I know next to nothing about physics engines, I plan to familiarize myself like I always do: by shamelessly copying. Of the demos that are included, the simplest might be the blob test (at least the game board), so I start there.
I create myself an HTML document to hold my test:
<!DOCTYPE html>
<html>
<head>
<title>Simple DartBox2D</title>
<script>{}</script>
<script type="application/dart" src="simple.dart"></script>
</head>
<body>
<h1>Simple DartBox2D</h1>
</body>
</html>
And, in the simple.dart file, I copy the skeleton of the board from the blob test:#import('dart:dom');
#import('lib/box2d.dart');
class Simple2d {
/** The default canvas width and height. */
static final int CANVAS_WIDTH = 900;
static final int CANVAS_HEIGHT = 600;
/** Scale of the viewport. */
static final num _VIEWPORT_SCALE = 10;
/** The gravity vector's y value. */
static final num GRAVITY = -10;
// other setup
Simple2d() {
// Setup the World.
final gravity = new Vector(0, GRAVITY);
bool doSleep = true;
world = new World(gravity, doSleep, new DefaultWorldPool());
}
/** Entrypoint. */
static void main() {
final simple2d = new Simple2d();
simple2d.initialize();
simple2d.initializeAnimation();
simple2d.runAnimation();
}
void initialize() { /* ... */ }
void initializeAnimation() { /* ... */ }
void runAnimation() { /* ... /* }
void step(num timestamp) { /* ... */ }
}
void main() {
Simple2d.main();
}
All in all, there is quite a bit of setup required just to draw the board. But it works.That is just the gameboard and there is much that I cargo-coded without understanding. Tomorrow I will try to actually add something on that board besides lines and, maybe, gain a deeper understanding of everything that is involved.
Day #265





No comments:
Post a Comment