zy-acs-flow/src/map/MapPage.jsx | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zy-acs-flow/src/map/player.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
zy-acs-flow/src/map/MapPage.jsx
@@ -1,4 +1,4 @@ import React from 'react'; import React, { useState, useRef, useEffect, useMemo } from "react"; import { TextField, Select, @@ -16,9 +16,54 @@ Print as PrintIcon, Share as ShareIcon, } from '@mui/icons-material'; import Player from './player'; function MapPage() { const [mode, setMode] = React.useState('monitoring'); let player; const MapPage = () => { const mapRef = useRef(); const contentRef = useRef(); 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'); useEffect(() => { const initialize = async () => { player = new Player(mapRef.current); 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 }); }; }, []) // resize React.useEffect(() => { if (!app) { return; } console.log(1); const width = contentRef.current.offsetWidth; const height = contentRef.current.offsetHeight; app.renderer.resize(width, height); }, [app, mapContainer, windowSize]) const handleModeChange = (event) => { setMode(event.target.value); @@ -97,12 +142,16 @@ }} > <Box ref={contentRef} sx={{ width: '100%', height: '100%', backgroundColor: '#e0e0e0', }} /> > <div ref={mapRef} /> </Box> <SpeedDial ariaLabel="SpeedDial 示例" sx={{ position: 'absolute', bottom: 16, right: 16 }} zy-acs-flow/src/map/player.js
@@ -4,10 +4,10 @@ export default class Player { constructor(dom) { // init this.app = new PIXI.Application({ background: '#f1f2f6', antialias: true, // resizeTo: dom, // 自动调整 canvas 尺寸 }) this.app.stage.eventMode = 'static'; this.app.stage.hitArea = this.app.screen; @@ -17,25 +17,30 @@ dom.appendChild(this.app.view); globalThis.__PIXI_APP__ = this.app; // create a new Sprite from an image path this.mapContainer = generateMapContainer('mapContainer'); const bunny = PIXI.Sprite.from('https://pixijs.com/assets/bunny.png'); // center the sprite's anchor point bunny.anchor.set(0.5); // move the sprite to the center of the screen bunny.x = this.app.screen.width / 2; bunny.y = this.app.screen.height / 2; this.app.stage.addChild(bunny); // Listen for animate update this.app.ticker.add((delta) => { // just for fun, let's rotate mr rabbit a little // delta is 1 if running at 100% performance // creates frame-independent transformation bunny.rotation += 0.1 * delta; }); } } const generateMapContainer = (name) => { const mapContainer = new PIXI.Container(); mapContainer.sortableChildren = true; mapContainer.name = name; mapContainer.data = {}; return mapContainer; }