Posted on 2008-05-08 16:30
RichardHe 閱讀(1929)
評論(4) 編輯 收藏 引用
CEGUI有背景圖片的BUTTON:
昨天聽到刀哥問我對Looknfeel寫東西有沒有什么心德體會.說實話,我還真正的寫過一個wideget.然后突然就有一個沖動想法.很多東西不寫是不會熟悉的.我就參考刀哥的方法寫了一個BUTTON
有兩種方法可以實現(xiàn),一為在Looknfeel文件中直接修改
<WidgetLook name="Vanilla/MyButton">
<PropertyDefinition name="NormalTextColour" initialValue="FFFFFFFF" redrawOnWrite="true" />
<PropertyDefinition name="HoverTextColour" initialValue="FFFFFFFF" redrawOnWrite="true" />
<PropertyDefinition name="PushedTextColour" initialValue="FFFFFFFF" redrawOnWrite="true" />
<PropertyDefinition name="DisabledTextColour" initialValue="FF888888" redrawOnWrite="true" />
<PropertyDefinition name="VertLabelFormatting" initialValue="CentreAligned" />
<PropertyDefinition name="HorzLabelFormatting" initialValue="CentreAligned" />
<PropertyDefinition name="NormalImage" initialValue="" redrawOnWrite="true" />
<PropertyDefinition name="HoverImage" initialValue="" redrawOnWrite="true" />
<PropertyDefinition name="PushedImage" initialValue="" redrawOnWrite="true" />
<PropertyDefinition name="DisabledImage" initialValue="" redrawOnWrite="true" />
<PropertyDefinition name="VertImageFormatting" initialValue="Stretched" redrawOnWrite="true" />
<PropertyDefinition name="HorzImageFormatting" initialValue="Stretched" redrawOnWrite="true" />
<ImagerySection name="label">
<TextComponent>
<Area>
<Dim type="LeftEdge"><AbsoluteDim value="0" /></Dim>
<Dim type="TopEdge"><AbsoluteDim value="0" /></Dim>
<Dim type="Width"><UnifiedDim scale="1" type="Width" /></Dim>
<Dim type="Height"><UnifiedDim scale="1" type="Height" /></Dim>
</Area>
<VertFormatProperty name="VertLabelFormatting" />
<HorzFormatProperty name="HorzLabelFormatting" />
</TextComponent>
</ImagerySection>
<ImagerySection name="normal">
<FrameComponent>
<Area>
<Dim type="LeftEdge"><AbsoluteDim value="0" /></Dim>
<Dim type="TopEdge"><AbsoluteDim value="0" /></Dim>
<Dim type="Width"><UnifiedDim scale="1" type="Width" /></Dim>
<Dim type="Height"><UnifiedDim scale="1" type="Height" /></Dim>
</Area>
<Image type="LeftEdge" imageset="TaharezLook" image="ButtonLeftNormal" />
<Image type="RightEdge" imageset="TaharezLook" image="ButtonRightNormal" />
<Image type="Background" imageset="TaharezLook" image="ButtonMiddleNormal" />
</FrameComponent>
<ImageryComponent>
<Area>
<Dim type="LeftEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="TopEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="Width" ><UnifiedDim scale="1" type="Width" /></Dim>
<Dim type="Height" ><UnifiedDim scale="1" type="Height" /></Dim>
</Area>
<ImageProperty name="NormalImage" />
<VertFormatProperty name="VertImageFormatting" />
<HorzFormatProperty name="HorzImageFormatting" />
</ImageryComponent>
</ImagerySection>
<ImagerySection name="hover">
<FrameComponent>
<Area>
<Dim type="LeftEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="TopEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="Width" ><UnifiedDim scale="1" type="Width" /></Dim>
<Dim type="Height" ><UnifiedDim scale="1" type="Height" /></Dim>
</Area>
<Image type="LeftEdge" imageset="TaharezLook" image="ButtonLeftHighlight" />
<Image type="RightEdge" imageset="TaharezLook" image="ButtonRightHighlight" />
<Image type="Background" imageset="TaharezLook" image="ButtonMiddleHighlight" />
</FrameComponent>
<ImageryComponent>
<Area>
<Dim type="LeftEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="TopEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="Width" ><UnifiedDim scale="1" type="Width" /></Dim>
<Dim type="Height" ><UnifiedDim scale="1" type="Height" /></Dim>
</Area>
<ImageProperty name="HoverImage" />
<VertFormatProperty name="VertImageFormatting" />
<HorzFormatProperty name="HorzImageFormatting" />
</ImageryComponent>
</ImagerySection>
<ImagerySection name="pushed">
<FrameComponent>
<Area>
<Dim type="LeftEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="TopEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="Width" ><UnifiedDim scale="1" type="Width" /></Dim>
<Dim type="Height" ><UnifiedDim scale="1" type="Height" /></Dim>
</Area>
<Image type="LeftEdge" imageset="TaharezLook" image="ButtonLeftPushed" />
<Image type="RightEdge" imageset="TaharezLook" image="ButtonRightPushed" />
<Image type="Background" imageset="TaharezLook" image="ButtonMiddlePushed" />
</FrameComponent>
<ImageryComponent>
<Area>
<Dim type="LeftEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="TopEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="Width" ><UnifiedDim scale="1" type="Width" /></Dim>
<Dim type="Height" ><UnifiedDim scale="1" type="Height" /></Dim>
</Area>
<ImageProperty name="PushedImage" />
<VertFormatProperty name="VertImageFormatting" />
<HorzFormatProperty name="HorzImageFormatting" />
</ImageryComponent>
</ImagerySection>
<StateImagery name="Normal">
<Layer>
<Section section="normal" />
<Section section="label">
<ColourProperty name="NormalTextColour" />
</Section>
</Layer>
</StateImagery>
<StateImagery name="Hover">
<Layer>
<Section section="hover" />
<Section section="label">
<ColourProperty name="HoverTextColour" />
</Section>
</Layer>
</StateImagery>
<StateImagery name="Pushed">
<Layer>
<Section section="pushed" />
<Section section="label">
<ColourProperty name="PushedTextColour" />
</Section>
</Layer>
</StateImagery>
<StateImagery name="PushedOff">
<Layer>
<Section section="hover" />
<Section section="label">
<ColourProperty name="HoverTextColour" />
</Section>
</Layer>
</StateImagery>
<StateImagery name="Disabled">
<Layer>
<Section section="normal">
<Colours topLeft="FF7F7F7F" topRight="FF7F7F7F" bottomLeft="FF7F7F7F" bottomRight="FF7F7F7F" />
</Section>
<Section section="label">
<ColourProperty name="DisabledTextColour" />
</Section>
</Layer>
</StateImagery>
</WidgetLook>
<PropertyDefinition name="NormalImage" initialValue="" redrawOnWrite="true" />
<PropertyDefinition name="HoverImage" initialValue="" redrawOnWrite="true" /> <PropertyDefinition name="PushedImage" initialValue="" redrawOnWrite="true" />定義三個屬性,分別為NormalImage,HoverImage,PushImage;代表三個狀態(tài)下的顯示的圖片
如果想在上面的初始化固定圖片也是可以的
initialValue="set:imagesetname image:對應(yīng)里面的小圖名字"
我的initialValue="set:Vanilla-Images image:ShadowBrush"
另一個方法可以在程序中控制,這樣的話,可以針對不同的BUTTON可以設(shè)置不同的背景圖片.我的程序如下:
WindowManager& winMgr = WindowManager::getSingleton();
Window* button = winMgr.getWindow("root/MyButton"); //"root/Richard"為你的你窗口layout文件中一個BUTTON
button->setProperty("NormalImage","set:Vanilla-Images image:ShadowBrush");
1 <?xml version="1.0" encoding="UTF-8"?>
2
3 <GUILayout >
4 <Window Type="Vanilla/Richard" Name="root/MyButton" >
5 <Property Name="Font" Value="DejaVuSans-10" />
6 <Property Name="Text" Value="MyButton" />
7 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
8 <Property Name="UnifiedAreaRect" Value="{{0.225,0},{0.433333,0},{0.474998,0},{0.556667,0}}" />
9 </GUILayout>
同時對應(yīng)的主題文件.scheme添加一個MAP
1 <?xml version="1.0" ?>
2 <GUIScheme Name="VanillaSkin">
3 <Imageset Name="Vanilla-Images" Filename="Vanilla.imageset" />
4 <LookNFeel Filename="Vanilla.looknfeel" />
5 <WindowRendererSet Filename="CEGUIFalagardWRBase" />
6 <FalagardMapping WindowType="Vanilla/MyButton" TargetType="CEGUI/PushButton" Renderer="Falagard/Button" LookNFeel="Vanilla/MyButton" />
7 </GUIScheme>
以上東西我要十分感覺兩位游戲界新朋友的指點
夏科藝(http://blog.csdn.net/powerkoria/)和
付坤(http://blog.csdn.net/kun1234567/)