#
luxiaotao1123
2024-10-08 b44c83de23528891d833be5bfcc315298fa4df3c
#
2个文件已修改
60 ■■■■■ 已修改文件
zy-acs-flow/src/map/MapPage.jsx 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-flow/src/map/player.js 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-flow/src/map/MapPage.jsx
@@ -7,6 +7,7 @@
    Box,
    SpeedDial,
    SpeedDialAction,
    useTheme,
} from '@mui/material';
import {
    MoreVert as MoreVertIcon,
@@ -27,43 +28,23 @@
    const [app, setApp] = useState(null);
    const [mapContainer, setMapContainer] = React.useState(null);
    const [windowSize, setWindowSize] = useState({
        width: window.innerWidth,
        height: window.innerHeight,
    });
    const [mode, setMode] = useState('monitoring');
    const theme = useTheme();
    const themeMode = theme.palette.mode;
    useEffect(() => {
        const initialize = async () => {
            player = new Player(mapRef.current);
            player = new Player(mapRef.current, themeMode);
            setApp(player.app);
            setMapContainer(player.mapContainer);
            const handleResize = () => {
                setWindowSize({
                    width: window.innerWidth,
                    height: window.innerHeight,
                });
            };
            window.addEventListener('resize', handleResize);
        }
        initialize();
        return () => {
            player.app.destroy(true, { children: true });
            window.removeEventListener('resize', () => { });
        };
    }, [])
    // resize
    useEffect(() => {
        if (app && contentRef.current) {
            const width = contentRef.current.offsetWidth;
            const height = contentRef.current.offsetHeight;
            app.renderer.resize(width, height);  // 动态调整 PIXI 大小
        }
    }, [app, mapContainer]);
    const handleModeChange = (event) => {
        setMode(event.target.value);
zy-acs-flow/src/map/player.js
@@ -3,17 +3,10 @@
export default class Player {
    constructor(dom) {
        this.app = new PIXI.Application({
            background: '#f1f2f6',
            antialias: true,
            resizeTo: dom, // 自动调整 canvas 尺寸
        })
        this.app.stage.eventMode = 'static';
        this.app.stage.hitArea = this.app.screen;
        this.app.view.addEventListener('contextmenu', (event) => {
            event.preventDefault();
        });
    constructor(dom, themeMode) {
        this.themeMode = themeMode;
        this.app = generateApp(themeMode);
        dom.appendChild(this.app.view);
        globalThis.__PIXI_APP__ = this.app;
@@ -21,20 +14,28 @@
        this.mapContainer = generateMapContainer('mapContainer');
        const bunny = PIXI.Sprite.from('https://pixijs.com/assets/bunny.png');
        bunny.anchor.set(0.5);
        bunny.x = this.app.screen.width / 2;
        bunny.y = this.app.screen.height / 2;
        this.app.stage.addChild(bunny);
        this.app.ticker.add((delta) => {
            bunny.rotation += 0.1 * delta;
        });
    }
}
const generateApp = (themeMode) => {
    const app = new PIXI.Application({
        background: themeMode === 'dark' ? '#2f3542' : '#f1f2f6',
        antialias: true,
    })
    app.stage.eventMode = 'static';
    app.stage.hitArea = app.screen;
    app.view.addEventListener('contextmenu', (event) => {
        event.preventDefault();
    });
    return app;
}
const generateMapContainer = (name) => {