②navigationPane面板的简要说明
③修改标签名称和设置显示标签图标
点击Pages打开面板进行如下 *** 作:
212、代码添加标签和窗体内容
①新建一个需添加到标签的窗体,如下所示:
②编写代码添加标签和标签对应的窗体
//初始化
private void InitNavigationPane()
{
//指定默认选中第一个标签
navigationPane1SelectedPage = navigationPage1;
//添加一个新标签
NavigationPage NewNavigationPage = new NavigationPage();
NewNavigationPageName = "newNavigationPage";
NewNavigationPageCaption = "添加的标签";
navigationPane1PagesAdd(NewNavigationPage);
//给该新标签添加界面
NewTagForm newTagForm = new NewTagForm();
//一定要设置(否则会报错:无法将顶级控件添加控件)
newTagFormTopLevel = false;
NewNavigationPageControlsAdd(newTagForm);
newTagFormShow();
}
登录后复制

③实现效果
22、NavBarControl实现步骤
221、界面布局
①在工具箱输入navBarControl,然后拖拽到界面
②NavBarControl面板的简要说明
③添加导航栏的标签组、及其组包含的标签
点击设计器Run Designer进行如下 *** 作:
222、代码添加标签组、标签组包含的标签和标签事件
①代码实现给标签添加事件(且点击的标签名称是01时创建一个新的组、及其给新组添加一个标签)
//初始化
private void InitNavBarControl()
{
navBarItem1LinkClicked += Item_Click;
navBarItem2LinkClicked += Item_Click;
navBarItem3LinkClicked += Item_Click;
navBarItem4LinkClicked += Item_Click;
navBarItem5LinkClicked += Item_Click;
navBarItem6LinkClicked += Item_Click;
navBarItem7LinkClicked += Item_Click;
navBarItem8LinkClicked += Item_Click;
navBarItem9LinkClicked += Item_Click;
navBarItem10LinkClicked += Item_Click;
}
/// <summary>
/// 导航栏子项目的点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Item_Click(object sender, DevExpressXtraNavBarNavBarLinkEventArgs e)
{
MessageBoxShow("当前点击的标签是:"+eLinkCaption);
if (eLinkCaption=="01")
{
ActiveChangeNavigate();
}
}
//动态更改导航栏
private void ActiveChangeNavigate()
{
//新建一个组
NavBarGroup navBarGroup = new NavBarGroup();
navBarGroupName = "NewBarGruop";
navBarGroupCaption = "动态添加的分组";
navBarGroupImageOptionsSmallImageIndex = -1;
navBarGroupImageOptionsLargeImageIndex = -1;
//将该组添加到导航中
navBarControl1GroupsAdd(navBarGroup);
//新建一个标签
NavBarItem navBarItem = new NavBarItem();
navBarItemName = "NewBarItem";
navBarItemCaption = "动态添加的标签";
navBarItemImageOptionsSmallImageIndex = -1;
navBarItemImageOptionsLargeImageIndex = -1;
navBarItemLinkClicked += Item_Click;
//添加标签到组中
navBarControl1ItemsAdd(navBarItem);
//添加标签到一个分组中
navBarGroupItemLinksAddRange(new NavBarItemLink[] {
new NavBarItemLink(navBarItem)
});
}
登录后复制

②实现效果
三、参考资料
Navigation Pane | WinForms Controls | DevExpress Documentation
>先给出示例html代码
<div>
<!-- Nav tabs -->
<ul class="nav nav-tabs" role="tablist" id="contentnavid">
<li role="presentation" class="active"><a href="#tab1" aria-controls="tab1" role="tab" data-toggle="tab">tab1</a></li>
<li role="presentation"><a href="#tab2" aria-controls="tab2" role="tab" data-toggle="tab">tab2</a></li>
<li role="presentation"><a href="#tab3" aria-controls="tab3" role="tab" data-toggle="tab">tab3</a></li>
<li role="presentation" id="closetabli"><a href="#closetab" aria-controls="closetab" role="tab" data-toggle="tab"><span>closetab</span>
<button type="button" class="close" aria-label="Close" id="closetabbtn"><span aria-hidden="true" style="color:red">×</span></button>
</a></li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="tab1">this is tab1</div>
<div role="tabpanel" class="tab-pane active" id="tab2">this is tab2</div>
<div role="tabpanel" class="tab-pane active" id="tab3">this is tab3</div>
<div role="tabpanel" class="tab-pane active" id="closetab">this is closetab</div>
</div>
</div>
上面的html代码中,显示的导航组件有4个tab页,其中最后一个tab页的标签的右边有一个 x 的关闭按钮。
下面我们要实现就是当点击x关闭按钮时,可以把这个带关闭按钮的tab隐藏掉,并显示最近一次显示的tab页。
具体示例代码如下:
<script>
var activeTab = "tab1"; //当前的tab页。默认为第一个tab页。
var previousTab; //上一个打开的tab页。默认为空。
$(function(){
//实现事件响应函数,当tab页被显示时会触发
$(‘a[data-toggle="tab"]‘)on(‘shownbstab‘, function (e) {
//获取当前被显示的tab页标签的aria-controls属性值
activeTab = $(etarget)attr("aria-controls");
//获取前一个被显示的tab页标签的aria-controls属性值
previousTab = $(erelatedTarget)attr("aria-controls");
});
//点击带关闭按钮tab页标签上的x后的响应事件
$("#closetabbtn")click(function(e){
$(this)parent()parent()css("display","none"); //隐藏tab头,调用remove方法就是删除了
$("#closetab")css("display","none"); //隐藏tab正文信息,调用remove方法就是删除了
if(activeTab=="closetab"){ //判断当前tab页是否是带关闭按钮的tab页,如果是,则显示上次打开的tab页
$(‘#contentnavid a[href="#‘+previousTab+‘"]‘)tab(‘show‘); //显示tab页
}
return false; //一定要return false,阻止事件往上冒泡
});
});
</script>
上面给出了js代码。
本文给出了最核心的处理逻辑,其中关键的地方有:
1)增加关闭按钮,并处理click事件
2)处理tab的show事件
在此基础上,可以实现各种场景下的应用。现在的大部分mmo游戏都有了自动寻路功能。点击场景上的一个位置,角色就会自动寻路过去。中间可能会有很多的障碍物,角色会自动绕过障碍物,最终达到终点。使用Unity来开发手游,自动寻路可以有很多种实现方式。最近,一名海外开发者在博客中分享了自己用Unity引擎重做此前研发的Flash游戏寻路导航的心得,希望可以给大家带来帮助:大家好,最近我一直都在忙于把2006年的一款Flash游戏用Unity引擎重做出来,尽管我们在《Arrival in Hell》这个项目已经工作了一年多,但这里我希望从头开始来写开发者博客,因为这样才能让读者们有比较完整的印象。如果你们不太熟悉这款游戏的话,我这里做几句话的介绍,我们在对2006年我和朋友Eduardo Mojica以及Richard Rout三人研发的一款Flash游戏进行重做,这是一款点击式 *** 作的冒险游戏,我们将用Unity引擎进行重做。我做编程和研发游戏已经有十年左右的经验,但这是我使用Unity引擎做的首款游戏。在其他事情之前,我首先想要说的就是玩家角色的移动,由于这款游戏现在是真正的3D,因此玩家角色需要在3D空间里寻路。幸运的是,Unity引擎已经有了一些不错的内置寻路功能,你只要打开窗口-导航(Navigation),选择你想要使用的物体并且放到路径中,然后把他们标记为‘导航静态(Navigation static)’这就会告诉Unity这些物体是静态的(非移动),在寻路的时候应该被考虑进去。把物体设置为‘导航静态’这里我想要说一说这个功能有多么强大。过去,我和大多数的游戏开发者一样,都必须打造自己的寻路系统,我之前就做过一个Atile和基于节点的寻路系统,在两种情况下,特别是基于节点系统的寻路所产生的walls让人非常头痛。在基于节点的寻路系统中,你必须手动地把AI使用的点在两者之间进行导航。Unity不仅做导航功能,还使用了导航网格(Navigation meshes),这比手动放置节点更有效率而且更流畅。更重要的是,你还可以一键重新计算整个导航网格,彻底摆脱了手动修改导航节点的做法。我用基于节点系统做的失败的寻路系统之一在把静态物体加入了导航网格之后,你可以选择一系列的设定然后点击bake按钮,比如在考虑加入一堵墙之前确定坡有多陡以及台阶应该多高。这样你就可以获得可以预览的视图。值得注意的一件事是,不要仅仅因为物体存在在场景中就意味着它是导航网格的一部分。比如说在这款游戏中,我不在乎玩家们是否会踩到瓦砾,所以我并没有把任何瓦砾标识为导航静态,这加快了当行网格的生成速度。《Arrival in Hell》中其实是有数值的在导航网格生成之后,我简单地给玩家模型增加了一个NavMeshAgent组件,这款游戏现在就可以进行寻路了,唯一剩下的就是增加鼠标输入控制NavMeshAgent的目的地。用NavMesh做的bakeNavMeshAgent设定为了告诉NavMeshAgent导航我做了以下指令:1注意听取鼠标输入2把鼠标放进屏幕空间3把屏幕空间转变成来自摄像头的一束光4在光达到地面的时候把它移除5把NavMeshAgent的目的地设定到地板的对应位置。C#代码是这样的:可视化视图下的目的地与路径这就解决了我这款游戏的大多数导航需求,唯一的例外就是导航网格由于游戏内的一些活动而发生改变的时候。比如第一个房间的们最开始是关闭的,后来当它打开的时候,当行网格需要更新反映此次变化,允许玩家从新开的们中走过去。我并没有在游戏运行的时候rebake完整的静态导航网格,而是使用了NavMeshObstacle组件,该组件可以让你把寻路过程中的动态物体加进去,如果物体移动,Unity的寻路算法就会根据实际情况而更新。导航路径会根据NavMeshObstacle的变化而自动发生改变可视化视图所以,游戏寻路导航就这么做好了,这就是《Arrival in Hell》游戏中的导航工作原理,这一些只需要Unity内自带的导航功能就可以完成了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)