第二人生的源码分析(九十九)雷达地图的实现

无论是在 2D的游戏里,还是在3D的游戏里,雷达地图的实现,都是比较基本的功能了。因为随着游戏世界里越来越大,参加的玩家也越来越多,需要一个大体的地图来让玩家方便地看到全局的概貌。比如在打对战的游戏里,更加需要了解别人在那里战斗了。有了雷达地图之后,就可以让玩家更加方便地了解全局地图上发生的事情,也方便玩家相互查找,也让玩家不会走迷路。下面就来了解第二生里的怎么样实现雷达地图的实现,它的显示界面如下:
它主要通过类 LLNetMap来实现的,它的声明代码如下:
#001class LLNetMap : public LLUICtrl
#002{
#003public:
构造函数和析构函数。
#004 LLNetMap(const std::string& name, const LLRect& rect, const LLColor4& bg_color );
#005 virtual ~LLNetMap();
#006
返回窗口的类型。
#007 virtual EWidgetType getWidgetType() const;
#008 virtual LLString getWidgetTag() const;
#009
显示雷达地图。
#010 virtual void draw();
响应事件消息处理。
#011 virtual BOOL handleDoubleClick( S32 x, S32 y, MASK mask );
#012 virtual BOOL handleRightMouseDown( S32 x, S32 y, MASK mask );
#013 virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
#014 virtual BOOL handleToolTip( S32 x, S32 y, LLString& msg, LLRect* sticky_rect_screen );
#015
设置缩放大小倍数。
#016 void setScale( F32 scale );
平移位置。
#017 void translatePan( F32 delta_x, F32 delta_y );
#018 void setPan( F32 x, F32 y ) { mTargetPanX = x; mTargetPanY = y; }
#019
#020 const LLVector3d& getObjectImageCenterGlobal(){ return mObjectImageCenterGlobal; }
显示相应的点。
#021 void renderPoint(const LLVector3 &pos, const LLColor4U &color,
#022 S32 diameter, S32 relative_height = 0);
#023 void renderScaledPointGlobal( const LLVector3d& pos, const LLColor4U &color, F32 radius );
#024
#025 LLVector3 globalPosToView(const LLVector3d& global_pos);
#026 LLVector3d viewPosToGlobal(S32 x,S32 y);
#027
#028 static void setRotateMap( BOOL b ) { LLNetMap::sRotateMap = b; }
#029 static void handleZoomLevel(void* which);
#030
显示右下角的拉动箭头。
#031 void drawTracking( const LLVector3d& pos_global,
#032 const LLColor4& color,
#033 BOOL draw_arrow = TRUE);
#034
#035protected:
#036 void setDirectionPos( LLTextBox* text_box, F32 rotation );
#037 void createObjectImage();
#038 static void teleport( const LLVector3d& destination );
#039 static void fly( const LLVector3d& destination );
#040
#041public:
保存相应的属性。
#042 LLHandle<LLView> mPopupMenuHandle;
#043 LLColor4 mBackgroundColor;
#044
#045 F32 mScale; // Size of a
#046region in pixels
#047 F32 mPixelsPerMeter; // world meters to map pixels
#048 F32 mObjectMapTPM; // texels per meter on map
#049 F32 mObjectMapPixels; // Width of object map in pixels;
#050 F32 mTargetPanX;
#051 F32 mTargetPanY;
#052 F32 mCurPanX;
#053 F32 mCurPanY;
#054 BOOL mUpdateNow;
#055 LLVector3d mObjectImageCenterGlobal;
#056 LLPointer<LLImageRaw> mObjectRawImagep;
#057 LLPointer<LLImageGL> mObjectImagep;
显示八个方向的文字框。
#058 LLTextBox* mTextBoxEast;
#059 LLTextBox* mTextBoxNorth;
#060 LLTextBox* mTextBoxWest;
#061 LLTextBox* mTextBoxSouth;
#062
#063 LLTextBox* mTextBoxSouthEast;
#064 LLTextBox* mTextBoxNorthEast;
#065 LLTextBox* mTextBoxNorthWest;
#066 LLTextBox* mTextBoxSouthWest;
#067
#068 LLRotateNetMapListener mNetMapListener;
#069
#070 static BOOL sRotateMap;
#071 static LLNetMap* sInstance;
#072};
通过上面的类,就可以看到雷达地图实现的基本属性、大体框架,下一次再来详细地分析它是怎么实现显示点来代表全局的物体。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值