| | |
| | | import * as PIXI from 'pixi.js'; |
| | | import * as TWEEDLE from 'tweedle.js'; |
| | | import * as Tool from './tool'; |
| | | import star from '/img/map/star.png' |
| | | import star from '/img/map/star.png'; |
| | | import { DEVICE_TYPE } from './constants'; |
| | | |
| | | export default class Player { |
| | | |
| | |
| | | this.mapContainer.scale.set(this.scale); |
| | | |
| | | this.mapContainer.children.forEach(child => { |
| | | // child.scale.set(1 / this.scale); // 防止图标变小 |
| | | // child.scale.set(1 / (this.scale * 1)); // 防止图标变小 |
| | | |
| | | // switch (child.data?.type) { |
| | | // case DEVICE_TYPE.POINT: |
| | | // child.scale.set(1 / (this.scale * 20)); |
| | | // break |
| | | // default: |
| | | // break |
| | | // } |
| | | }); |
| | | }); |
| | | } |
| | |
| | | const newRotation = this.mapContainer.rotation + value; |
| | | |
| | | const rotationDegrees = (newRotation * 180 / Math.PI) % 360; |
| | | this.rotationText.text = `{ rotation: ${rotationDegrees.toFixed(1)}° }`; |
| | | this.rotationText.text = `{ ROTATION: ${rotationDegrees.toFixed(1)}° }`; |
| | | |
| | | new TWEEDLE.Tween(this.mapContainer) |
| | | .to({ rotation: newRotation }, 200) |
| | |
| | | .start(); |
| | | } |
| | | |
| | | flipMapHorizontally = () => { |
| | | // 1. 确定 mapContainer 的中心点 |
| | | const bounds = this.mapContainer.getLocalBounds(); |
| | | const centerX = bounds.x + bounds.width / 2; |
| | | const centerY = bounds.y + bounds.height / 2; |
| | | |
| | | // 2. 将 mapContainer 以中心点进行旋转/翻转 |
| | | this.mapContainer.pivot.set(centerX, centerY); |
| | | this.mapContainer.position.set(this.app.renderer.width / 2, this.app.renderer.height / 2); |
| | | |
| | | // 当前的水平缩放值 |
| | | const currentScaleX = this.mapContainer.scale.x; |
| | | const targetScaleX = -currentScaleX; // 翻转时,让 x 轴缩放取相反值 |
| | | |
| | | // 3. 用 TWEEDLE 做动画翻转,如果只想立即翻转,也可以直接赋值 |
| | | new TWEEDLE.Tween(this.mapContainer.scale) |
| | | .to({ x: targetScaleX }, 300) // 300 毫秒动画 |
| | | .easing(TWEEDLE.Easing.Quadratic.Out) |
| | | .onComplete(() => { |
| | | // 将最终 x 轴缩放存储到 localStorage |
| | | localStorage.setItem('mapScaleX', this.mapContainer.scale.x); |
| | | }) |
| | | .start(); |
| | | }; |
| | | |
| | | showCoordinates = () => { |
| | | this.coordinatesText = new PIXI.Text('{ x: 0, y: 0 }', { |
| | | this.coordinatesText = new PIXI.Text('{ X: 0, Y: 0 }', { |
| | | fill: this.themeMode === 'dark' ? 0xdddddd : 0x333333, |
| | | fontSize: 13, |
| | | fontFamily: 'Microsoft YaHei', |
| | |
| | | this.coordinatesText.position.set(10, 10); |
| | | this.app.stage.addChild(this.coordinatesText); |
| | | |
| | | this.rotationText = new PIXI.Text('Rotation: 0°', { |
| | | this.rotationText = new PIXI.Text('ROTATION: 0°', { |
| | | fill: this.themeMode === 'dark' ? 0xdddddd : 0x333333, |
| | | fontSize: 13, |
| | | fontFamily: 'Microsoft YaHei', |
| | |
| | | |
| | | this.app.stage.on('pointermove', (event) => { |
| | | const worldPos = event.data.getLocalPosition(this.mapContainer); |
| | | this.coordinatesText.text = `{ x: ${worldPos.x.toFixed(2)}, y: ${worldPos.y.toFixed(2)} }`; |
| | | this.coordinatesText.text = `{ X: ${worldPos.x.toFixed(2)}, Y: ${worldPos.y.toFixed(2)} }`; |
| | | }); |
| | | } |
| | | |