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作废并不会产生任何影响,包括功能都是正确的。