@tawaship/pixim-box2d
TypeScript icon, indicating that this package has built-in type declarations

1.0.3 • Public • Published

pixim-box2d

"pixim-box2d" is a plugin for using "box2dweb" with "Pixim.js".

Build Status MIT License


Supported version

  • box2dweb 2.1.0-b
  • pixi.js 5.3.x
  • @tawaship/pixim.js 1.11.x

I have not confirmed the operation on other versions.

Setup

NPM

npm install --save pixi.js @tawaship/pixim.js @tawaship/pixim-box2d

import * as PIXI from 'pixi.js';
import * as Pixim from '@tawaship/pixim.js';
import * as PiximBox2d from '@tawaship/pixim-box2d';

Browser

git clone https://github.com/tawaship/Pixim-box2d

<script src="https://cdnjs.cloudflare.com/ajax/libs/pixi.js/5.3.3/pixi.min.js"></script>
<script src="/path/to/lib/Box2d.min.js"></script>
<script src="/path/to/lib/Pixim.min.js"></script>
<script src="/path/to/dist/Pixim-box2d.min.js"></script>

Usage

For browsers, this module is stored in the namespace "Pixim.box2d".

const app = new Pixim.Application({
	width: 450,
	height: 800
});

class Root extends Pixim.Container {
	constructor() {
		super();
		
		this.addChild(new PIXI.Graphics()).beginFill(0x00FF00).drawRect(0, 0, 450, 800 / 2)
		this.interactive = true;
		this.cursor = 'pointer'
		
		// create World
		const world = this.addChild(new Pixim.box2d.WorldContainer({
			listenPreSolve: false,
			listenPostSolve: false,
			listenBeginContact: false,
			listenEndContact: true,
			ticker: app.ticker
		}));
		
		// create component
		const a = world.addBox2d(Pixim.box2d.Circle.from(new PIXI.Graphics().beginFill(0xFF0000).drawCircle(100, 0, 20), {
			density: 0.1,
			restitution: 0.1,
			categoryBits: 2
		}));
		a.setX(120);
		
		// create component when click
		this.on("pointerdown", (e) => {
			const r = Math.random() > 0.5;
			const w = 100
			const h = 150
			
			const a2 = world.addBox2d(new Pixim.box2d.Rectangle(w, h, {
				density: 0.1,
				restitution: 0.1,
				friction: 0.9,
				categoryBits: 1
			}));
			
			a2.addChild(new PIXI.Graphics().beginFill(0xFF0000).drawRect(0, 0, w, h));
			
			if (!r) {
				a2.setX(e.data.global.x - a2.width / 2);
				a2.setY(e.data.global.y - a2.height / 2);
			} else {
				a2.setRotation(90 * Math.PI / 180);
				a2.setX(e.data.global.x + a2.height / 2);
				a2.setY(e.data.global.y - a2.width / 2);
			}
		})
		
		// create static component
		const baseHeight = 100;
		const base = world.addBox2d(Pixim.box2d.Rectangle.from(new PIXI.Graphics().beginFill(0x0000FF).drawRect(0, 0, 450 / 2, baseHeight), { isStatic: true }));
		base.setX(450 / 2 - base.width / 2);
		base.setY(800 - baseHeight - 100);
		
		// create sensor component
		const dead = world.addBox2d(new Pixim.box2d.Edge(new Pixim.box2d.Common.Math.b2Vec2(450 + 2000, 0), { isStatic: true, isSensor: true, maskBits: 1 }));
		dead.setX(-1000);
		dead.setY(800 - 10);
		dead.on('EndContact', (opponent) => {
			world.removeBox2d(opponent);
			console.log("gameover");
		});
	}
}

const Content = Pixim.Content.create();
Content.defineLibraries({
	root: Root
})
const content = new Content();

app.attachAsync(content)
.then(() => {
	app.play();
})

Readme

Keywords

Package Sidebar

Install

npm i @tawaship/pixim-box2d

Weekly Downloads

1

Version

1.0.3

License

MIT

Unpacked Size

233 kB

Total Files

20

Last publish

Collaborators

  • tawaship