欢迎来到天天文库
浏览记录
ID:24318330
大小:51.50 KB
页数:4页
时间:2018-11-13
《基于pv3d的网上迷宫科普游戏》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、基于PV3D的网上迷宫科普游戏动态载入是大规模场景漫游的一种实现方法,本文主要介绍的是将略加简化的动态载入方法应用于不擅长处理大规模场景的PV3D中,将迷宫这个规模稍大,面数稍多的场景进行动态的创建和拆除,以达到减轻CPU负担,加快处理效率,提升迷宫的游戏体验。 关键词富互联X应用程序;PaperVision3D;动态载入 TP39A1674-6708(2011)54-0182-01 0引言 X上迷宫作为一个科普项目,集娱乐与教育于一身,让用户在体验3D迷宫这个游戏的乐趣的同时对其进行科普知识的宣传和教育,即所谓的寓教于乐。为此,我们提出了动态加
2、载迷宫的方法,即在某一时刻只加载当前摄像机所在位置的所有可视的迷宫部分,除此以外的部分不会被创建,此时CPU需要处理的面的数量就下降为原先的十分之一甚至更少,这就能大大的减轻CPU的压力,从而使得游戏的运行更加顺畅。 1迷宫的随机生成算法 迷宫生成算法 1)迷宫的随机生成算法采用了图的深度优先遍历算法; 2)将当前点置设为已访问状态,并将当前点入栈; 3)判断当前点的邻接点中是否有未被访问的点,如果没有则跳转到步骤4); 4)从未被访问的邻接点中随机抽取一个方向,并将该邻接点设置为当前点,跳转到步骤1); 5)将当前点退栈,并将栈顶的点作为
3、当前点跳转到步骤1)。 2动态载入可视部分 陈述一下原来的迷宫游戏在大规模虚拟场景的时候出现的问题: 迷宫中的可视物体由三个部分组成、天空、地面以及墙壁。这三部分中面数最多也是本方法中优化的目标的是墙壁。 2.1潜在可视迷宫场景区域的判定 要动态的载入墙壁就必须先获取摄像机当前所在位置所能看到的所有的墙壁,这部分功能是由负责迷宫生成以及提供各种辅助功能的myMaze类中的findVisible函数来承担。 findVisible函数的参数为点的横纵坐标,返回该横纵坐标所在位置能看到的所有墙面的坐标。该函数的思路是以参数坐标为基点,向上下左右四
4、个方向分别查找。在任意方向上遇到墙之前,即maze[i][j]为0时,判断与点[i,j]相邻并且与当前方向垂直的两个点在maze数组中对应的值是否为一,对于向左搜索即maze[i][j-1]和maze[i][j1]的值是否为一。如果为一则判断其为可视墙,加入到数组visibleCells中。其他方向与之类似。 但如此搜索最终产生的可视墙的数组中会出现很多重复的坐标,因为是分方向遍历所以在一个方向中被判断为可视墙的坐标有可能出现在另一个方向的搜索结果中。所以在返回可视墙的数组之前需要对数组中的重复坐标进行删除。 经过这样的处理之后最终得到的就是唯一的所
5、有可视墙的坐标数组。为下一步动态载入墙面提供了数据支持。 2.2动态创建和拆除 动态的创建和销毁墙壁的实现主要分两部分。创建由于摄像机位置移动所产生的新的可视墙以及同样由于位置移动造成的部分旧墙不再可视,需要对其销毁。 首先初步判断镜头移动是否对可视范围产生变更。 因为只有在转角处才会产生可视范围的变化,而且显而易见的是转角处可视范围的大小一定会发生变化,所以先对当前可视范围和旧可视范围的长度进行比较。 varoriginalPos:Array=neyMaze.findVisible(currentPoint.x,currentPoint.y)
6、; 以上代码为创建并初始化新旧可视范围数组。 接下来要对旧可视化数组originalPos和新可视化数组neber=0;j
此文档下载收益归作者所有