找回密码
 点一下
查看: 983|回复: 10

UI代码内容怎么影响到物品栏外观

[复制链接]
发表于 2015-4-14 07:51:47 | 显示全部楼层 |阅读模式
本帖最后由 solon58552 于 2015-4-14 07:59 编辑

看懂了头目的教程和演示,我试图对这个东西有更深的了解,所以打开编辑器仔细看了一下控制界面UI和物品容器这一块,我发现物品容器和UI里面的代码没有直接的关联,那UI的代码是怎么影响到物品容器的样式和结构的?
比如我想改动默认物品栏在屏幕上的显示位置,容器和物品里面都没有有关参数,在UI代码里面看到了类似关于锚点的参数,但是因为搞不清各种containerpanel和容器之间代码的生效关系,不敢随便修改.
后来用xml查看了容器项目的代码,发现了"ItemContainer"这个类,貌似是某种界面模板的派生,但是我无法在UI界面下找到这种结构的定义.
所以怎么制作新的物品栏UI,比如附着修改位置,更改结构乃至细节?

我试着在物品容器的xml代码里面加入"Anchor"和"height","width"来试图改变某个容器的附着位置和尺寸,但是似乎这么做不可行.
但是的确找不到ItemContainer从哪里定义来的,GameUI里面只有InventoryContainer和InventoryPanel.
或许这个ItemContainer是物品容器的类名,那这就更奇怪了,物品容器没有明确指出引述的UI代码,却自动适用了某种结构,而新建的容器甚至不能定义自己的特征细节.
这是说想要做附着在屏幕其他位置或者项目排列稍有不同的UI时,只能用触发而不能通过写新的UI布局来用数据么?

我就举个很实际的例子,头目War3兽族第一幕的演示中,萨尔的六格横向物品栏附着在屏幕的右下侧,而不是像原始的演示中一样贴在左边.
我猜到这种UI布局肯定用了UI代码,现在我大概也知道语法了,但是我就是写出来了也不知道怎么把另一种布局挂到某个特定的物品容器上.

以上,希望知情人士不吝赐教.

原教程地址:
1.5UI系列教程第一部——使用触发器来完全控制游戏界面元素~~让我们来制造一个永远开启状态的背包栏吧~~


发表于 2015-4-14 08:42:00 | 显示全部楼层
虽不明但觉厉。
回复

使用道具 举报

发表于 2015-4-14 08:47:42 | 显示全部楼层
如果会语法的话,直接位移不就好了么?

比如你的物品栏宽度64
两个宽度128
要挂在命令列表左边

就找到命令列表的UI文件,UI文件中  命令列表 宽度+横向偏移 = 物品栏的偏移
                                                               高度+纵向偏移 = 物品栏的偏移
算出来之后,偏移的代码直接复制命令列表的,只是数额自己修改一下
然后测试,头目以前的演示也是这样的

如果附着的话,因为我们只是重载,原有的UI设定可能会带来一些影响

有一次我物品栏附着了一个什么玩意儿,就无限拉长了
回复

使用道具 举报

发表于 2015-4-14 08:50:25 | 显示全部楼层
某个容器的大小跟行为的大小一样,是不可变的
因为他们是一个image文件事先合成好了

我们只能改那些具体的对象化的模板

但是不能改那些作为应用化→的模板→的模板.......因为他不是一个具象化的模板,只是一个....哎呀你懂的!我那时候没好好学不知道该怎么说了...

面向对象!!!恩对!!

点评

嗯嗯,懂你的意思了,看来映射这功能是方便但是存在这个局限,毕竟被映射的界面UI不是通过触发器创建的对话框所以说到底也只是被触发器"操控"着. 这么理解没错吧  详情 回复 发表于 2015-4-14 08:52
回复

使用道具 举报

 楼主| 发表于 2015-4-14 08:52:46 | 显示全部楼层
东方油瓶 发表于 2015-4-14 08:50
某个容器的大小跟行为的大小一样,是不可变的
因为他们是一个image文件事先合成好了

嗯嗯,懂你的意思了,看来映射这功能是方便但是存在这个局限,毕竟被映射的界面UI不是通过触发器创建的对话框所以说到底也只是看起来被触发器"操控"着.

这么理解没错吧

点评

差不多吧,专业词汇我玩不转。。。 我只会理解!! 不过我也忘了能不能改了,当初弄的时候物品栏方面我直接弃掉容器了,因为不能用快捷键施法  详情 回复 发表于 2015-4-14 08:56
回复

使用道具 举报

发表于 2015-4-14 08:56:17 | 显示全部楼层
solon58552 发表于 2015-4-14 08:52
嗯嗯,懂你的意思了,看来映射这功能是方便但是存在这个局限,毕竟被映射的界面UI不是通过触发器创建的对话 ...

差不多吧,专业词汇我玩不转。。。

我只会理解!!

不过我也忘了能不能改了,当初弄的时候物品栏方面我直接弃掉容器了,因为不能用快捷键施法

点评

恩我知道怎么回事了,虽然这稍微麻烦点,但触发器实现出来的效果会很理想  详情 回复 发表于 2015-4-14 09:02
回复

使用道具 举报

发表于 2015-4-14 09:00:05 | 显示全部楼层
物品容器的很多个的那个我记得好像可以还是不可以来着。....你搜索一下UI编辑器
InventoryPanel/ContainerPanelTemplate/
这个文件夹打开,里面全是一堆的slot,应该就是你想要的容器了,能不能改看你自己了,我没改过


这是一段修改基础6个物品栏的代码,原来写的
很简单的一段,适合拿去参考,你可以试试,这一段放进去看看效果

不过啰嗦一下啊,重载UI其实玩家用一个重载UI的快捷键可以再游戏内解锁你的重载,你写的代码就没用了
只是很多人不会用,玩家其实还能自己做UI的,在游戏里面,只是太高端了,我都玩不懂!!!UI方面....不要太纠结,点睛之笔可以,不要动太大土,吃亏


  1. <?xml version="1.0" encoding="utf-8" standalone="yes"?>
  2. <Desc>
  3. <!--                     QvQQvQQvQQvQQvQQvQ This is item Panle. QvQQvQQvQQvQQvQQvQ              
  4.                                                                                 -->

  5.     <Frame type="InventoryPanel" name="GameUI/UIContainer/ConsoleUIContainer/InventoryPanel" file="GameUI">
  6.         <Frame type="InventoryContainer" name="InventoryButtons">
  7.             <Anchor side="Bottom" relative="$parent" pos="Max" offset="-266"/>
  8.             <Anchor side="Right" relative="$parent" pos="Max" offset="-10"/>
  9.             <Width val="128"/>
  10.             <Height val="192"/>

  11.             <Frame type="CommandButton" name="Button05">
  12.                 <Width val="64"/>
  13.                 <Height val="64"/>
  14.                <Anchor side="Bottom" relative="$parent" pos="Max" offset="0"/>
  15.                 <Anchor side="Right" relative="$parent" pos="Max" offset="0"/>
  16.             </Frame>
  17.             <Frame type="CommandButton" name="Button04">
  18.                 <Width val="64"/>
  19.                 <Height val="64"/>
  20.                <Anchor side="Bottom" relative="$parent" pos="Max" offset="0"/>
  21.                 <Anchor side="Right" relative="$parent" pos="Max" offset="-64"/>
  22.             </Frame>
  23.             <Frame type="CommandButton" name="Button03">
  24.                 <Width val="64"/>
  25.                 <Height val="64"/>
  26.                <Anchor side="Bottom" relative="$parent" pos="Max" offset="-64"/>
  27.                 <Anchor side="Right" relative="$parent" pos="Max" offset="0"/>
  28.             </Frame>
  29.             <Frame type="CommandButton" name="Button02">
  30.                 <Width val="64"/>
  31.                 <Height val="64"/>
  32.                <Anchor side="Bottom" relative="$parent" pos="Max" offset="-64"/>
  33.                 <Anchor side="Right" relative="$parent" pos="Max" offset="-64"/>
  34.             </Frame>
  35.             <Frame type="CommandButton" name="Button01">
  36.                 <Width val="64"/>
  37.                 <Height val="64"/>
  38.                <Anchor side="Bottom" relative="$parent" pos="Max" offset="-128"/>
  39.                 <Anchor side="Right" relative="$parent" pos="Max" offset="0"/>
  40.             </Frame>
  41.             <Frame type="CommandButton" name="Button00">
  42.                 <Width val="64"/>
  43.                 <Height val="64"/>
  44.                <Anchor side="Bottom" relative="$parent" pos="Max" offset="-128"/>
  45.                 <Anchor side="Right" relative="$parent" pos="Max" offset="-64"/>
  46.             </Frame>
  47.             <Frame type="Frame" name="ContainerSizeFrame">
  48.                 <Anchor side="Top" relative="$parent/Button00" pos="Min" offset="0"/>
  49.                 <Anchor side="Bottom" relative="$parent/Button05" pos="Max" offset="0"/>
  50.                 <Anchor side="Left" relative="$parent/Button00" pos="Min" offset="0"/>
  51.                 <Anchor side="Right" relative="$parent/Button05" pos="Max" offset="0"/>
  52.             </Frame>

  53.         <Frame type="Image" name="BackgroundImage">
  54.             <Texture val="Assets\Textures\ui_camapaignmenu_dialogbox_base_2.dds"/>
  55.             <Anchor side="Top" relative="$parent/Button00" pos="Min" offset="-10"/>
  56.             <Anchor side="Bottom" relative="$parent/Button05" pos="Max" offset="10"/>
  57.             <Anchor side="Left" relative="$parent/Button00" pos="Min" offset="-10"/>
  58.             <Anchor side="Right" relative="$parent/Button05" pos="Max" offset="10"/>
  59.             <RenderType val="HDR"/>
  60.             <RenderPriority val="510"/>
  61.         </Frame>

  62.         </Frame>
  63.     </Frame>
  64. </Desc>
复制代码


回复

使用道具 举报

 楼主| 发表于 2015-4-14 09:02:50 | 显示全部楼层
东方油瓶 发表于 2015-4-14 08:56
差不多吧,专业词汇我玩不转。。。

我只会理解!!

恩我知道怎么回事了,虽然这稍微麻烦点,但触发器实现出来的效果会很理想

点评

呃...仁者见仁,加油吧  详情 回复 发表于 2015-4-14 09:06
回复

使用道具 举报

发表于 2015-4-14 09:06:49 | 显示全部楼层
solon58552 发表于 2015-4-14 09:02
恩我知道怎么回事了,虽然这稍微麻烦点,但触发器实现出来的效果会很理想

呃...仁者见仁,加油吧
回复

使用道具 举报

发表于 2015-4-14 10:09:19 | 显示全部楼层
有一部分UI元素是完全由游戏代码操控的,你无法通过修改xml来重载,比如包包面板的位置,比如单位面板的行为图标。

但是根物品栏的6个格子是完全可以重载的。我的war3 mod完全开源,你可以下下来看看实现方法。我记得我以前也发过一个单独的改物品栏的帖子,忘记位置了。

回复

使用道具 举报

发表于 2015-4-14 23:33:55 | 显示全部楼层
包包的相对位置什么的是游戏系统在控制,而不是UI界面的xml代码控制的。比如第一个包包的下界总是和物品栏面板的上界绑定的。后续的包包则依次向前绑定,另外物品栏容器数据决定了部分包包位置特征,比如左对齐还是右对齐。所以修改包包的位置是相当困难的一件事,我自己也曾尝试N久,最后放弃了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-12-22 16:54 , Processed in 0.378128 second(s), 30 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表