Vue3 + TS + Leafletjs 打造企业级原神大地图「完结」

254 阅读4分钟

Vue3 + TS + Leafletjs 打造企业级原神大地图「完结」

Vue3 + TS + Leafletjs 打造企业级原神大地图「完结」

获取ZY↑↑方打开链接↑↑

使用 Vue3、TypeScript(TS)以及 Leaflet.js 来创建一个类似《原神》游戏中的交互式大地图是一个有趣且具有挑战性的项目。下面我会提供一些步骤来帮助你开始这个项目。

1. 初始化项目

首先你需要创建一个 Vue3 项目。你可以使用 create-vue 脚手架来快速搭建基础环境,并选择 TypeScript 作为你的开发语言。

bash浅色版本npm create vue@latest # 或者 yarn create vue # 选择 Vue3 和 TypeScript 模板

2. 安装 Leaflet.js

接着安装 Leaflet.js 和对应的 TypeScript 类型定义文件。

bash浅色版本npm install leaflet npm install @types/leaflet

3. 创建地图组件

接下来,你需要创建一个 Vue 组件来展示你的地图。在这个组件中,你会使用 Leaflet.js 来初始化地图,并且可以添加标记、路径等。

Vue 组件示例代码 (Map.vue)

vue浅色版本<template>   <div ref="mapRef" class="map"></div> </template>  <script lang="ts"> import { defineComponent, onMounted, ref } from 'vue'; import L from 'leaflet';  export default defineComponent({   setup() {  const mapRef = ref<HTMLElement | null>(null);   // 在组件挂载后初始化地图     onMounted(() => {  if (mapRef.value) {  const map = L.map(mapRef.value).setView([37.7749, -122.4194], 13); // 设置默认坐标和缩放级别   // 添加底图         L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {           attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'         }).addTo(map);   // 示例:添加标记         L.marker([37.7749, -122.4194]).addTo(map)           .bindPopup('A pretty CSS3 popup.')           .openPopup();       }     });   return { mapRef };   }, }); </script> <style scoped> .map {   height: 500px; } </style>

4. 数据集成

为了使地图更具《原神》特色,你需要收集或创建与游戏世界相关的数据,例如地标位置、任务点等。这些数据可以通过 API 获取或者手动创建。

5. 优化与扩展

  • 性能优化:对于大型地图,考虑使用懒加载技术来提高性能。
  • 用户交互:增加更多的交互功能,如点击事件、拖拽等。
  • 样式定制:可以使用自定义图层来替换默认的 OpenStreetMap 图层,使地图更符合《原神》的风格。

6. 测试与部署

最后,确保在不同设备上进行充分测试,包括不同的屏幕尺寸和浏览器。当一切准备就绪时,可以使用 Vite 或者 Webpack 进行构建并部署到服务器上。

7. 地图数据管理

为了更好地管理和展示游戏中的地点信息,你可以创建一个专门的数据模型来存储每个地点的信息,比如名称、描述、类型、图片等。这些数据可以通过 JSON 文件或者数据库来存储。

示例:地点数据模型 (location.ts)

typescript浅色版本export interface Location {   id: number;   name: string;   description: string;   type: string;   iconUrl: string;   coordinates: [number, number]; } // 示例数据 const locations: Location[] = [   {     id: 1,     name: "蒙德城",     description: "提瓦特大陆上的自由之城。",     type: "city",     iconUrl: "/icons/mondstadt.png",     coordinates: [37.7749, -122.4194],   },  // 更多地点... ];

然后,在地图组件中动态添加这些地点,并显示图标和弹出框。

typescript浅色版本locations.forEach((loc) => {   L.marker(loc.coordinates).addTo(map)     .bindPopup(`<b>${loc.name}</b><br>${loc.description}<br><img src="${loc.iconUrl}" />`); });

8. 用户交互功能

为了让用户体验更加丰富,可以增加一些互动功能,比如搜索地点、保存喜欢的地点、查看地点详情页等。

地点搜索功能 (SearchBar.vue)

vue浅色版本<template>   <input v-model="searchTerm" placeholder="搜索地点..." @input="onSearch" /> </template> <script lang="ts"> import { defineComponent, ref, onMounted } from 'vue'; import { locations } from './location'; // 引入地点数据  export default defineComponent({   setup() {  const searchTerm = ref('');  const results = ref<Location[]>([]);   const onSearch = () => {       results.value = locations.filter(loc => loc.name.includes(searchTerm.value));  // 可以在这里调用其他逻辑,比如高亮搜索结果     };  return { searchTerm, results, onSearch };   }, }); </script>

9. 响应式设计

为了保证在移动设备上的良好体验,需要确保地图组件是响应式的,并且在小屏幕上也能正常工作。

10. 社区功能

如果想要创建一个社区,让用户可以分享自己的发现或者上传自己的地标信息,可以考虑加入用户认证系统和后端服务来存储用户提交的数据。

11. 文档和维护

编写详细的文档说明如何使用这个应用,以及如何贡献新的地标或修复错误。维护好版本控制和持续集成也很重要,确保每次更新都不会引入新的错误。

以上就是用 Vue3、TypeScript 和 Leaflet.js 创建一个类似《原神》游戏地图的基本步骤。希望这能帮助你开始你的项目!