Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1904)

Unified Diff: sky/examples/game/lib/game_world.dart

Issue 1161023006: Adds basic support for images in game example (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sky/examples/game/lib/game_world.dart
diff --git a/sky/examples/game/lib/game_world.dart b/sky/examples/game/lib/game_world.dart
new file mode 100644
index 0000000000000000000000000000000000000000..69de04579ce8cf7ceff5858f544f5fdbe09342b4
--- /dev/null
+++ b/sky/examples/game/lib/game_world.dart
@@ -0,0 +1,93 @@
+part of game;
+
+class GameWorld extends TransformNode {
+
+ World world;
+ List<Body> bodies = [];
+ Image _image;
+
+ GameWorld(double width, double height) {
+ this.width = width;
+ this.height = height;
+
+ world = new World.withGravity(new Vector2(0.0, 0.0));
+
+ // Load and add background
+ Image imgBg = new Image()..src="https://raw.githubusercontent.com/slembcke/GalacticGuardian.spritebuilder/GDC/Packages/SpriteBuilder%20Resources.sbpack/resources-auto/BurnTexture.png";
+ SpriteNode sprtBg = new SpriteNode.withImage(imgBg);
+ sprtBg.width = width;
+ sprtBg.height = height;
+ sprtBg.pivot = new Vector2(0.0, 0.0);
+ this.children.add(sprtBg);
+
+ // Load asteroid image
+ _image = new Image()..src="https://raw.githubusercontent.com/slembcke/GalacticGuardian.spritebuilder/GDC/Packages/SpriteBuilder%20Resources.sbpack/Sprites/resources-auto/asteroid_big_002.png";
+ }
+
+ void addAsteroid([double radius=20.0]) {
+
+ // Create shape
+ final CircleShape shape = new CircleShape();
+ shape.radius = radius;
+
+ // Define fixture (links body and shape)
+ final FixtureDef activeFixtureDef = new FixtureDef();
+ activeFixtureDef.restitution = 1.0;
+ activeFixtureDef.density = 0.05;
+ activeFixtureDef.shape = shape;
+
+ // Define body
+ final BodyDef bodyDef = new BodyDef();
+ bodyDef.type = BodyType.DYNAMIC;
+ bodyDef.position = new Vector2(0.0, 30.0);
+ bodyDef.linearDamping = 0.0;
+ bodyDef.angularDamping = 0.0;
+
+ // Create body and fixture from definitions
+ final Body body = world.createBody(bodyDef);
+ body.createFixtureFromFixtureDef(activeFixtureDef);
+
+ // Set position of object
+ Math.Random rand = new Math.Random();
+ body.setTransform(new Vector2(rand.nextDouble() * this.width, rand.nextDouble() * this.height), 0.0);
+ body.applyLinearImpulse(new Vector2(rand.nextDouble()*10000.0-5000.0, rand.nextDouble()*10000.0-5000.0), new Vector2(0.0, 0.0), true);
+
+ // Add to list
+ bodies.add(body);
+
+ SpriteNode sprt = new SpriteNode.withImage(_image);
+ sprt.width = radius*2;
+ sprt.height = radius*2;
+ body.userData = sprt;
+ this.children.add(sprt);
+ }
+
+ void update(double dt) {
+ world.stepDt(1.0/60.0, 10, 10); // Pass in dt
+
+ bodies.forEach(updateBody);
+ }
+
+ void updateBody(Body body) {
+ SpriteNode sprt = body.userData;
+ double rot = 0.0; //body.getRotation();
+
+ // Check bounds and warp objects
+ if (body.position[0] < -sprt.width/2) {
+ body.setTransform(new Vector2(body.position[0] + this.width + sprt.width, body.position[1]), rot);
+ }
+ if (body.position[0] > this.width + sprt.width/2) {
+ body.setTransform(new Vector2(body.position[0] - (this.width + sprt.width), body.position[1]), rot);
+ }
+ if (body.position[1] < -sprt.height/2) {
+ body.setTransform(new Vector2(body.position[0], body.position[1] + this.height + sprt.height), rot);
+ }
+ if (body.position[1] > this.height + sprt.height/2) {
+ body.setTransform(new Vector2(body.position[0], body.position[1] - (this.height + sprt.height)), rot);
+ }
+
+ // Update sprite
+ sprt.position = body.position;
+ sprt.rotation = body.getAngle();
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698