zoukankan      html  css  js  c++  java
  • List和Combo这样可没算完!

      List和Combo让人头疼,目前我在List中只能根据按钮的编号"i"来修改武器的列表,而不能使用名称。这对以后武器的专向跟踪和描述是十分困难的。

      ComboBox相当于一个按钮,用来显示我目前使用了哪种武器。我不仅仅是要在装备栏中显示当前玩家拥有的武器,同时还需要构造一个商店。Jesus Christ真的头疼。

      在外部有一个按钮打开商店,有一个按钮打开装备栏:

      1.目前找到了一种替换图片的简单形式,获取Example中的"Object 1"名称根据名称在List的RenderObject中指定if(Items[i].Caption=="Object 1") 然后绘制Items[i].Images[0]=Texture'....'

      上述方法非常不直接,不能动态的添加制定的武器。我得重新深度挖掘。

      2.我要实现《无尽之剑》的武器装备列表

      添加Cancel以外的按钮,例如Medicine列表和Golden列表。

      3.实现list的列表的逻辑信息处理,让其读取PlayerController中的Golden引用。

      可以从正向或是逆向入手研究他们的逻辑过程,Example,List和Combo.  

    if(Sender.Tag == "Combo1")
       {
          UDNMobileMenuLabel(FindMenuObject("Title")).Caption = UDNMobileMenuComboBox(FindMenuObject("Combo1")).GetValue();
       }

      FindMenuObject函数就是找Sender.Tag的内容,在Defaultproperties中定义好的,这里定义Title这个UDNMobileMenuLabel类型按钮的值为从Combo1中获取。

      我们倒序来反推这些类的逻辑过程。进入ComboBox中,看他的GetValue函数是怎么读取List中被点选的值,另外Init中起始也给了个值。

      因为Combo外部也会根据选中的List内容来渲染Title的内容,Lable.Caption=Title;或是Label.Caption=GetValue();

      他的GetValue就是

    function string GetValue()
    {
        return list.GetValue();
    }

      现在我们查看GetValue到底在哪里被调用。

      在实现OnPick代理的时候查看list是否bIsOpen,如果打开就传给List.OnPick()让他自己去做处理。否则就让Label做处理(就是外边的Combo打开按钮)。

      返回List.OnPick()是一件很麻烦的事,因为在List中处理了很多超麻烦内容。我们先看看Combo和list有哪些接口。

      InitMenuObject中:

    List.OnChange = OnSelect;
       List.OnCancel = OnCancel;

      List中有一个自带的OnCancel按钮,这里通过Combo的OnCancel来做处理,其实就是ToggleList。

      List中有一个OnChange函数,这里通过OnSelect来做处理。

      我想已经把所有能列出的问题全部摆上了桌面,但是还无法搞清OnSelect到底是什么鬼东西,它里面引用了一个OnChange函数,好像所有问题的中心就在这个OnChange函数处理。

     delegate OnChange();
    
      OnTouch()
    
      {
    
        OnChange();
      }

      咱们进入List中再瞧瞧:

      List中的GetValue返回Items[SelectedIndex].Caption;  现在的任务落到了怎么读取SelectedIndex。对于List他的每一项都是Button,如果是读取Touch任务那么就让每一个Button的OnPick来执行。

      看看Combo中InitMenuObject的List.OnSelect,在List的实现过程,

      遍历所有的Items,Button数组,如果Label是Sender,那么SelectedIndex=i;然后将其高亮显示,OnChange(i,Label.Caption,X,Y);这里发现OnChange是重点。

      在AddItem的地方,NewItem.OnClick=OnSelect;

      我发现OnChange下面的OwnerScene.OnTouch很有意思,进入AntMobileMenuScene中瞧瞧是怎么回事。Scene中有一个List实例

    if(List!=none&&!List.bIsHidden)
    
      {
    
        ITouchable(List).OnPIck(EventType,TouchX,TouchY);
      }

      就是把列表信息传递给List。

      最终我始终都没有搞清楚,OnSelect中的OnChange到底是怎么回事?在ComboBox中也有一个OnChange,list中也有一个,ComboBox中的OnSelect是List的OnChange实现,但是内部还调用了OnChange。这个OnChange是谁的呢?他们都不是一种实现。

      做了一个实验,当List中的OnSelect下作废OnChange,选单将不会被关闭。

      而ComboBox中的OnSelect下OnChange作废并不会产生任何影响,包括功能都是正确的。

      

     

  • 相关阅读:
    以此来励志吧!!!(选自:知乎)
    【P1303】苹果二叉树
    【P1813】8的倍数
    2016.9.4 の 測試
    后缀数组
    个中模板
    基数排序
    【NOIP2014D2T3】解方程
    【HAOI2006】【BZOJ1051】【p1233】最受欢迎的牛
    java安全性-引用-分层-解耦
  • 原文地址:https://www.cnblogs.com/NEOCSL/p/2941907.html
Copyright © 2011-2022 走看看