Skip to content

Commit 3e93f24

Browse files
committed
New split physics system is implemented. Still tidying-up, but ArcadePhysics, P2 and Ninja Physics are in and configured. Lots more examples required, and tilemap collision mostly broken in Arcade at the moment. Time to implement in Ninja.
1 parent 2bab4fd commit 3e93f24

63 files changed

Lines changed: 3160 additions & 1663 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Gruntfile.js

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -180,14 +180,26 @@ module.exports = function (grunt) {
180180
'src/utils/Debug.js',
181181
'src/utils/Color.js',
182182

183-
'src/physics/World.js',
184-
'src/physics/PointProxy.js',
185-
'src/physics/InversePointProxy.js',
186-
'src/physics/Body.js',
187-
'src/physics/Spring.js',
188-
'src/physics/Material.js',
189-
'src/physics/ContactMaterial.js',
190-
'src/physics/CollisionGroup.js',
183+
'/src/physics/Physics.js',
184+
185+
'/src/physics/arcade/World.js',
186+
'/src/physics/arcade/Body.js',
187+
'/src/physics/arcade/QuadTree.js',
188+
189+
'/src/physics/ninja/World.js',
190+
'/src/physics/ninja/Body.js',
191+
'/src/physics/ninja/AABB.js',
192+
'/src/physics/ninja/Tile.js',
193+
'/src/physics/ninja/Circle.js',
194+
195+
'/src/physics/p2/World.js',
196+
'/src/physics/p2/PointProxy.js',
197+
'/src/physics/p2/InversePointProxy.js',
198+
'/src/physics/p2/Body.js',
199+
'/src/physics/p2/Spring.js',
200+
'/src/physics/p2/Material.js',
201+
'/src/physics/p2/ContactMaterial.js',
202+
'/src/physics/p2/CollisionGroup.js',
191203

192204
'src/particles/Particles.js',
193205
'src/particles/arcade/ArcadeParticles.js',

README.md

Lines changed: 1 addition & 0 deletions

build/config.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,12 @@
141141
<script src="$path/src/physics/arcade/Body.js"></script>
142142
<script src="$path/src/physics/arcade/QuadTree.js"></script>
143143
144+
<script src="$path/src/physics/ninja/World.js"></script>
145+
<script src="$path/src/physics/ninja/Body.js"></script>
146+
<script src="$path/src/physics/ninja/AABB.js"></script>
147+
<script src="$path/src/physics/ninja/Tile.js"></script>
148+
<script src="$path/src/physics/ninja/Circle.js"></script>
149+
144150
<script src="$path/src/physics/p2/World.js"></script>
145151
<script src="$path/src/physics/p2/PointProxy.js"></script>
146152
<script src="$path/src/physics/p2/InversePointProxy.js"></script>
30.5 KB
273 KB

examples/wip/ninja1.js

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
2+
// var game = new Phaser.Game(800, 600, Phaser.AUTO, 'phaser-example', { preload: preload, create: create, update: update, render: render });
3+
var game = new Phaser.Game(800, 600, Phaser.CANVAS, 'phaser-example', { preload: preload, create: create, update: update, render: render });
4+
5+
function preload() {
6+
7+
game.load.spritesheet('ninja-tiles', 'assets/physics/ninja-tiles.png', 128, 128, 34);
8+
game.load.image('a', 'assets/sprites/firstaid.png');
9+
10+
}
11+
12+
var sprite1;
13+
var cursors;
14+
15+
var tile1;
16+
var tile2;
17+
18+
var t;
19+
var running = false;
20+
21+
function create() {
22+
23+
game.stage.smoothed = true;
24+
25+
// Activate the Ninja physics system
26+
game.physics.startSystem(Phaser.Physics.NINJA);
27+
28+
// game.physics.ninja.gravity = 0.1;
29+
30+
sprite1 = game.add.sprite(500, 200, 'a');
31+
32+
// Enable the physics body for the Ninja physics system
33+
// By default it will create an AABB body for the sprite
34+
game.physics.ninja.enableAABB(sprite1);
35+
36+
// But you can change it to either a Tile or a Circle
37+
tile1 = game.add.sprite(0, 550, 'ninja-tiles', 14);
38+
tile1.width = 100;
39+
tile1.height = 100;
40+
41+
game.physics.ninja.enableTile(tile1, 14);
42+
43+
// sprite1.body.aabb.friction = 0;
44+
45+
// tile1 = new Phaser.Physics.Ninja.Tile(game.physics.ninja, 100, 500, 100, 100, Phaser.Physics.Ninja.Tile.SLOPE_45DEGpn);
46+
// tile1 = new Phaser.Physics.Ninja.Tile(game.physics.ninja, 100, 500, 100, 100, 15);
47+
// tile2 = new Phaser.Physics.Ninja.Tile(game.physics.ninja, 300, 500, 100, 100, 7);
48+
49+
cursors = game.input.keyboard.createCursorKeys();
50+
51+
}
52+
53+
function collisionHandler() {
54+
game.stage.backgroundColor = 0xff0000;
55+
}
56+
57+
function update() {
58+
59+
game.physics.ninja.collide(sprite1, tile1, collisionHandler, null, this);
60+
61+
tile1.body.moveRight(1);
62+
63+
/*
64+
if (cursors.up.isDown && !running)
65+
{
66+
running = true;
67+
t = Date.now();
68+
}
69+
70+
sprite1.body.setZeroVelocity();
71+
72+
if (running)
73+
{
74+
sprite1.body.moveRight(100);
75+
76+
if (sprite1.body.x >= 200)
77+
{
78+
var ms = Date.now() - t;
79+
console.log('100px in ', ms);
80+
running = false;
81+
sprite1.body.setZeroVelocity();
82+
}
83+
}
84+
*/
85+
86+
// sprite1.body.setZeroVelocity();
87+
88+
if (cursors.left.isDown)
89+
{
90+
sprite1.body.moveLeft(20);
91+
}
92+
else if (cursors.right.isDown)
93+
{
94+
sprite1.body.moveRight(20);
95+
}
96+
97+
if (cursors.up.isDown)
98+
{
99+
sprite1.body.moveUp(20);
100+
}
101+
else if (cursors.down.isDown)
102+
{
103+
sprite1.body.moveUp(20);
104+
}
105+
106+
}
107+
108+
function render() {
109+
110+
game.debug.text(sprite1.body.shape.velocity.x, 32, 32);
111+
game.debug.text(sprite1.body.shape.velocity.y, 32, 64);
112+
game.debug.text(game.math.radToDeg(sprite1.body.angle), 32, 96);
113+
114+
// tile1.render(game.context, 'ninja-tiles');
115+
// tile2.render(game.context, 'ninja-tiles');
116+
117+
// game.debug.geom(sprite1.body, 'rgba(0,255,0,0.4)', true, 1);
118+
119+
// game.debug.geom(tile1, 'rgba(0,255,0,0.4)', true, 1);
120+
// game.debug.geom(tile1, 'rgba(0,255,0,0.4)', true, 1);
121+
122+
}

examples/wip/physics-1.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ function create() {
1919

2020
sprite1 = game.add.sprite(50, 200, 'atari');
2121
sprite1.name = 'atari';
22+
// sprite1.anchor.set(0.5);
2223

2324
sprite2 = game.add.sprite(700, 220, 'mushroom');
2425
sprite2.name = 'mushroom';
@@ -37,6 +38,9 @@ function update() {
3738
// object1, object2, collideCallback, processCallback, callbackContext
3839
game.physics.arcade.collide(sprite1, sprite2, collisionHandler, null, this);
3940

41+
// var b = sprite1.getBounds();
42+
// console.log(b);
43+
4044
}
4145

4246
function collisionHandler (obj1, obj2) {
@@ -46,9 +50,14 @@ function collisionHandler (obj1, obj2) {
4650

4751
}
4852

53+
4954
function render() {
5055

51-
// game.debug.physicsBody(sprite1.body);
52-
// game.debug.physicsBody(sprite2.body);
56+
// var b = sprite1.getBounds();
57+
58+
// game.debug.geom(b, 'rgba(255,0,0,0.8)', true, 1);
59+
60+
game.debug.geom(sprite1.body, 'rgba(0,255,0,0.4)', true, 1);
61+
game.debug.geom(sprite2.body, 'rgba(0,255,0,0.4)', true, 1);
5362

5463
}

examples/wip/sci-fly2.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ function create() {
5252

5353
game.physics.enable(sprite);
5454

55-
sprite.body.setSize(14, 14, 2, 0);
55+
// sprite.body.setSize(14, 14, 2, 0);
5656

5757
console.log(sprite.body);
5858

@@ -107,6 +107,8 @@ function render() {
107107
// game.debug.text(game.physics.arcade._intersection.width, 32, 32);
108108
// game.debug.text(game.physics.arcade._intersection.height, 32, 64);
109109

110+
game.debug.geom(sprite.body, 'rgba(0,255,0,0.4)', true, 1);
111+
110112
game.debug.text(sprite.body.overlapX, 32, 32);
111113
game.debug.text(sprite.body.overlapY, 32, 64);
112114

examples/wip/tilemap new 1.js

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
2+
var game = new Phaser.Game(800, 600, Phaser.CANVAS, 'phaser-example', { preload: preload, create: create, update: update, render: render });
3+
4+
function preload() {
5+
6+
game.load.tilemap('map', 'assets/tilemaps/maps/collision_test.json', null, Phaser.Tilemap.TILED_JSON);
7+
game.load.image('ground_1x1', 'assets/tilemaps/tiles/ground_1x1.png');
8+
game.load.image('phaser', 'assets/sprites/phaser-dude.png');
9+
// game.load.image('phaser', 'assets/sprites/phaser-ship.png');
10+
11+
}
12+
13+
var map;
14+
var layer;
15+
var cursors;
16+
var sprite;
17+
18+
function create() {
19+
20+
map = game.add.tilemap('map');
21+
22+
map.addTilesetImage('ground_1x1');
23+
24+
layer = map.createLayer('Tile Layer 1');
25+
26+
layer.resizeWorld();
27+
28+
map.setCollisionBetween(1, 12);
29+
30+
layer.debug = true;
31+
32+
sprite = game.add.sprite(260, 70, 'phaser');
33+
34+
game.physics.enable(sprite);
35+
36+
game.camera.follow(sprite);
37+
38+
// game.physics.arcade.gravity.y = 500;
39+
// sprite.body.velocity.x = 100;
40+
41+
cursors = game.input.keyboard.createCursorKeys();
42+
43+
}
44+
45+
function update() {
46+
47+
game.physics.arcade.collide(sprite, layer);
48+
49+
sprite.body.velocity.x = 0;
50+
sprite.body.velocity.y = 0;
51+
52+
if (cursors.up.isDown)
53+
{
54+
sprite.body.velocity.y = -100;
55+
}
56+
else if (cursors.down.isDown)
57+
{
58+
sprite.body.velocity.y = 100;
59+
}
60+
61+
if (cursors.left.isDown)
62+
{
63+
sprite.body.velocity.x = -100;
64+
}
65+
else if (cursors.right.isDown)
66+
{
67+
sprite.body.velocity.x = 100;
68+
}
69+
70+
}
71+
72+
function render() {
73+
74+
game.debug.text(sprite.body.velocity.x, 32, 32);
75+
game.debug.text(sprite.body.velocity.y, 64, 32);
76+
77+
}

examples/wip/tilesprite.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ function create() {
2121
// sprite = game.add.tileSprite(100, 100, 400, 300, 'starfield');
2222

2323
sprite = game.add.tileSprite(100, 100, 400, 300, 'mummy');
24+
sprite.pivot.setTo(200, 200);
2425

2526
sprite.animations.add('walk');
2627

@@ -32,6 +33,8 @@ function create() {
3233

3334
function update() {
3435

36+
sprite.rotation += 0.01;
37+
3538
if (cursors.left.isDown)
3639
{
3740
sprite.tilePosition.x += 8;

0 commit comments

Comments
 (0)