找回密码
 点一下
查看: 3191|回复: 17

如何动态改变命令面板说明条的位置?

[复制链接]
发表于 2017-7-11 20:25:24 | 显示全部楼层 |阅读模式
尝试了衔接标准对话框控件动作,无效。试着先用衔接标准对话框控件衔接命令面板,然后再用衔接对话框控件动作衔接它的说明条,仍然无效。
猜测有3种可能:
1.在鼠标指向按钮之前,说明条未被创建,所以无法被衔接。这种可能性不大。
2.每次说明条显示的时候,都会被重置为默认值。
3.系统不允许衔接说明条。

但不论怎么说吧,没法动态控制说明条出现的位置这个问题我解决不了。求助各位大神,看大家有什么办法没?
发表于 2017-7-12 10:08:57 | 显示全部楼层
说明条自己是一个对话框模板,不是附属于某个面板下的。

很简单的一个道理:

1.你创建的对话框,为什么不用创建说明条直接可以设置提示文本?
2.你没发现通过设置提示条 出现的对话框提示条 只有一个嘛。(不会出现重叠的两个说明条)

说明条的工作方式是在悬浮时:设置坐标+显示+设置文本
在取消时隐藏,所以它是一个独立的对话框。

命令面板的说明条是独立创建的,但是只能用UI编辑器重载来改变位置。
衔接不能修改,因为你每次鼠标悬浮的时候,他会"刷新'一次坐标,所以你衔接时设置坐标是没用的。

刷新的坐标位置在UI编辑器里设置。
回复

使用道具 举报

发表于 2017-7-12 10:16:13 | 显示全部楼层
本帖最后由 东方油瓶 于 2017-7-12 10:19 编辑

干货:
    <Frame type="CommandPanel" name="GameUI/UIContainer/ConsoleUIContainer/CommandPanel" file="GameUI">
        <Frame type="CommandTooltip" name="CommandTooltip">
            <Anchor side="Bottom" relative="$parent/CommandPanel" pos="Max" offset="0"/>
            <Anchor side="Right" relative="$parent/CommandPanel" pos="Max" offset="0"/>
            <MinWidth val="600"/>
            <Width val="600"/>
            <Height val="600"/>
        </Frame>
   </Frame>
这一条命令会让提示条就像 触发器对话框的提示条一样工作,跟着CommandPanel的位置设置自己的坐标。

而默认的是这样的:

   <Frame type="CommandPanel" name="CommandPanelTemplate">
        <Batch val="true"/>

        <Frame type="CommandTooltip" name="CommandTooltip" template="CommandButton/CommandTooltipTemplate">
            <Anchor side="Bottom" relative="$parent" pos="Max" offset="-270"/>
            <Anchor side="Right" relative="$parent" pos="Max" offset="0"/>
        </Frame>
   </Frame>

可见,commandTooltip的父级是整个UI界面,而非创建他的父级。

使用$parent衔接的位置总是位于屏幕右下向上偏移270的位置。而不是跟随commandPanel的右下向上偏移270的位置。


不过我也就会这一招了,因为原来试过衔接到其他的面板附近,有一些问题...年代久远忘了。不过衔接到父级应该适用于大多数情况。







回复

使用道具 举报

 楼主| 发表于 2017-7-12 23:12:06 | 显示全部楼层
本帖最后由 yxxiaobin 于 2017-7-12 23:18 编辑

像触发器一样的跟着鼠标走倒是有一些方法,比如附着到任意命令按钮(实际上它不会附着到按钮,而是跟着鼠标)。
但是依然是预先定义,无法动态改变,比如:我想让说明条总是出现在对话框的左侧。
-------------------------------------------
另,你的附着路径不对吧,它的父级就是命令面板,父级下的命令面板,是什么东东?

-------------------------------------------
后来我做了一些测试,我觉得说明条是不让衔接,或者不允许设置位置的这个说法比较靠谱。
假设说明条只是在每次出现时都设置一次位置,那么我在触发器中用周期性时间作为事件是可以不完美的控制它的位置的。但实测结果是:完全无法控制。除非说明条在每个显示周期都要重设位置,而不是在显示初设置一次,但是这么做似乎没有道理啊。所以我猜测,其实说明条是不允许衔接,或者不允许设置位置的,正如说明条里的文本内容无法动态改变一样。

点评

这是物品栏的说明条设置: 他使用的模板是 commandButton。 同样,他的  详情 回复 发表于 2017-7-12 23:54
...... 如果他的父级是command,为什么relative="$parent/CommandPanel"可以让他附着到命令面板,relative="$parent"却让他附着到整个屏幕呢。? 说明条的创建位置就不是在写的位置里面,这更类似于一种声明。  详情 回复 发表于 2017-7-12 23:44
回复

使用道具 举报

发表于 2017-7-12 23:44:42 | 显示全部楼层
yxxiaobin 发表于 2017-7-12 23:12
像触发器一样的跟着鼠标走倒是有一些方法,比如附着到任意命令按钮(实际上它不会附着到按钮,而是跟着鼠标 ...

......

如果他的父级是command,为什么relative="$parent/CommandPanel"可以让他附着到命令面板,relative="$parent"却让他附着到整个屏幕呢。?

说明条的创建位置就不是在写的位置里面,这更类似于一种声明。
说明条可能共享的是一个对话框项,而写在下面的,只是声明他说明条的位置以及结构。
并不是真的创建一个说明条,创建应该是在他显示时创建,或者系统默认有一个,显示时修改数值。

至于不允许衔接...不是不允许...更像是这个对话框不存在,写在UI编辑器里的只是一个参数声明,比较特殊的一类对话框。

但是触发器里创建的说明条类型对话框不是共享的,因为它可以一直存在,并且与默认的说明条重叠,你可以试试,看看效果就知道我表达的意思了。
回复

使用道具 举报

发表于 2017-7-12 23:54:36 | 显示全部楼层
本帖最后由 东方油瓶 于 2017-7-12 23:56 编辑
yxxiaobin 发表于 2017-7-12 23:12
像触发器一样的跟着鼠标走倒是有一些方法,比如附着到任意命令按钮(实际上它不会附着到按钮,而是跟着鼠标 ...

    <Frame type="CommandButton" name="CommandButtonTemplate" template="CommandButton/CommandButtonTemplate">
        <CollapseLayout val="true"/>
        <Width val="48"/>
        <Height val="48"/>
        <TooltipFrame val="InventoryTooltip"/>
    </Frame>

这是物品栏的说明条设置:

    <Frame type="InventoryPanel" name="InventoryPanelTemplate">
        <Batch val="true"/>

        <Frame type="CommandTooltip" name="InventoryTooltip" template="CommandButton/CommandTooltipTemplate">
            <Anchor side="Bottom" relative="$parent" pos="Max" offset="-340"/>
            <Anchor side="Right" relative="$parent" pos="Max" offset="0"/>
        </Frame>

    </Frame>

他使用的模板是 commandButton。
同样,他的坐标是根据整个屏幕的范围设置的。
如果,他的父级是inventory,那么relative="$parent" 指向的应该是 InventoryPanel。
应该是在 InventoryPanel 的底部右侧,向上 340 位置。可是显示出来并不是这样。
可是如果重载为 relative="$parent/InventoryPanel",那么便会根据物品栏的位置设置坐标。

另,如果我的附着路径不对,那么,为什么产生的结果与我预期的相同。
回复

使用道具 举报

 楼主| 发表于 2017-7-12 23:56:05 | 显示全部楼层
复制了你的代码
  1.     <Frame type="CommandPanel" name="GameUI/UIContainer/ConsoleUIContainer/CommandPanel" file="GameUI">
  2.         <Frame type="CommandTooltip" name="CommandTooltip">
  3.             <Anchor side="Bottom" relative="$parent/CommandPanel" pos="Max" offset="0"/>
  4.             <Anchor side="Right" relative="$parent/CommandPanel" pos="Max" offset="0"/>
  5.             <MinWidth val="600"/>
  6.             <Width val="600"/>
  7.             <Height val="600"/>
  8.         </Frame>
  9.    </Frame>
复制代码

很显然,说明条是在命令面板的下级,所以他的父级应该是GameUI/UIContainer/ConsoleUIContainer/CommandPanel所以说明条的全路径:GameUI/UIContainer/ConsoleUIContainer/CommandPanel/CommandTooltip

点评

UI编辑器: 在重载时,创建一个无用的对话框项。 tooltip附着到这个无用的对话框项的坐标位置。 触发器: 触发器衔接这个无用的对话框项,改变这个无用对话框项的位置,tooltip的位置就会随着改变了。  详情 回复 发表于 2017-7-13 00:02
常规的UI控件的确是这样,可是,说明条不是常规的UI控件。 我喜欢用结果来判定事实,而不是开始。  详情 回复 发表于 2017-7-12 23:57
回复

使用道具 举报

发表于 2017-7-12 23:57:31 | 显示全部楼层
yxxiaobin 发表于 2017-7-12 23:56
复制了你的代码

很显然,说明条是在命令面板的下级,所以他的父级应该是GameUI/UIContainer/ConsoleUICo ...

常规的UI控件的确是这样,可是,说明条不是常规的UI控件。

我喜欢用结果来判定事实,而不是开始。
回复

使用道具 举报

发表于 2017-7-13 00:02:52 | 显示全部楼层
yxxiaobin 发表于 2017-7-12 23:56
复制了你的代码

很显然,说明条是在命令面板的下级,所以他的父级应该是GameUI/UIContainer/ConsoleUICo ...

UI编辑器:
在重载时,创建一个无用的对话框项。

tooltip附着到这个无用的对话框项的坐标位置。

触发器:
触发器衔接这个无用的对话框项,改变这个无用对话框项的位置,tooltip的位置就会随着改变了。

点评

如何移动背包UI?  详情 回复 发表于 2017-7-18 13:30
这主意不错。  发表于 2017-7-13 00:06
回复

使用道具 举报

 楼主| 发表于 2017-7-13 00:04:00 | 显示全部楼层
我觉得如果说明条试图绑定到一个错误的地方,则出现鼠标跟随。我的地图里选择的位置是一个命令按钮,比如按钮00,但实测结果并没有绑定到按钮,而是鼠标跟随。我仔细查看了说明条的定义,发现所有按钮定义都在它的后边,猜测:创建说明条时还没有创建按钮呐,所以无法绑定,结果出现了鼠标跟随。但是这种猜测本身是毫无证据的,我自己对UI又一知半解,所以一直也没有一个很明确的答案。

点评

哈哈哈哈哈哈哈哈哈哈哈哈,你是对的。  详情 回复 发表于 2017-7-13 00:09
回复

使用道具 举报

发表于 2017-7-13 00:09:47 | 显示全部楼层
yxxiaobin 发表于 2017-7-13 00:04
我觉得如果说明条试图绑定到一个错误的地方,则出现鼠标跟随。我的地图里选择的位置是一个命令按钮,比如按 ...

哈哈哈哈哈哈哈哈哈哈哈哈,你是对的。
回复

使用道具 举报

发表于 2017-7-18 13:30:27 | 显示全部楼层
东方油瓶 发表于 2017-7-13 00:02
UI编辑器:
在重载时,创建一个无用的对话框项。

如何移动背包UI?
回复

使用道具 举报

发表于 2021-2-15 11:58:26 | 显示全部楼层
本帖最后由 Nostalie 于 2021-2-20 01:08 编辑

挖个坟

框架树(实际的位置)和描述树(文件中定义的位置)不同。
总之UI重载的是描述树。但$parent指代的框架树的上一级。

commandtooltip的框架树位于最上一级第一个Unamed下和GameUI平级。$parent指的就是这个Unamed。
描述树位于GameUI/UIContainer/ConsoleUIContainer/CommandPanel没有问题。UI重载的也是这个。

但无论如何$parent都不会是ConsoleUIContainer,毕竟运行都报错误信息了。
$parent/CommandPanel之所以能起作用是因为Anchor设置失败。导致变成默认的Anchor(控件右上角)。CommandPanel随便瞎打一个也能起到这个效果。
事实上

该代码将CommandTooltip送到小地图上。
        <Frame type="CommandPanel" name="GameUI/UIContainer/ConsoleUIContainer/CommandPanel" file="GameUI">
            <Frame type="CommandTooltip" name="CommandTooltip">
                <Anchor side="Bottom" relative="$parent/GameUI/UIContainer/ConsoleUIContainer/MiniMapPanel" pos="Min" offset="0"/>
                <Anchor side="Right" relative="$parent/GameUI/UIContainer/ConsoleUIContainer/MiniMapPanel" pos="Max" offset="0"/>
            </Frame>
       </Frame>

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 10:51 , Processed in 0.243429 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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