Skip to content

Commit f19b6e4

Browse files
committed
add mouse wheel zoom example
1 parent e878f14 commit f19b6e4

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
class Example extends Phaser.Scene {
2+
3+
preload() {
4+
this.load.image('tiles', 'assets/tilemaps/tiles/drawtiles.png');
5+
}
6+
7+
create() {
8+
// Build a random level as a 2D array.
9+
const level = [];
10+
for (let y = 0; y < 60; y++) {
11+
const row = [];
12+
for (let x = 0; x < 60; x++) {
13+
const tileIndex = Phaser.Math.RND.integerInRange(0, 6);
14+
row.push(tileIndex);
15+
}
16+
level.push(row);
17+
}
18+
19+
const map = this.make.tilemap({ data: level, tileWidth: 32, tileHeight: 32 });
20+
const tileset = map.addTilesetImage('tiles');
21+
const layer = map.createLayer(0, tileset, 0, 0);
22+
const camera = this.cameras.main;
23+
let cameraDragStartX;
24+
let cameraDragStartY;
25+
26+
this.input.on('pointerdown', () => {
27+
cameraDragStartX = camera.scrollX;
28+
cameraDragStartY = camera.scrollY;
29+
});
30+
31+
this.input.on('pointermove', (pointer) => {
32+
if (pointer.isDown) {
33+
camera.scrollX = cameraDragStartX + (pointer.downX - pointer.x) / camera.zoom;
34+
camera.scrollY = cameraDragStartY + (pointer.downY - pointer.y) / camera.zoom;
35+
}
36+
});
37+
38+
this.input.on('wheel', (pointer, gameObjects, deltaX, deltaY, deltaZ) => {
39+
// Get the current world point under pointer.
40+
const worldPoint = camera.getWorldPoint(pointer.x, pointer.y);
41+
const newZoom = camera.zoom - camera.zoom * 0.001 * deltaY;
42+
camera.zoom = Phaser.Math.Clamp(newZoom, 0.25, 2);
43+
44+
// Update camera matrix, so `getWorldPoint` returns zoom-adjusted coordinates.
45+
camera.preRender();
46+
const newWorldPoint = camera.getWorldPoint(pointer.x, pointer.y);
47+
// Scroll the camera to keep the pointer under the same world point.
48+
camera.scrollX -= newWorldPoint.x - worldPoint.x;
49+
camera.scrollY -= newWorldPoint.y - worldPoint.y;
50+
});
51+
}
52+
}
53+
54+
const config = {
55+
width: 800,
56+
height: 600,
57+
type: Phaser.AUTO,
58+
parent: 'phaser-example',
59+
pixelArt: true,
60+
scene: Example
61+
};
62+
63+
const game = new Phaser.Game(config);

0 commit comments

Comments
 (0)