游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5724|回复: 4

盖莫游戏引擎-UI-Slider截图

[复制链接]

56

主题

94

帖子

98

积分

注册会员

Rank: 2

积分
98
发表于 2010-6-20 19:11:00 | 显示全部楼层 |阅读模式
如下:

56

主题

94

帖子

98

积分

注册会员

Rank: 2

积分
98
发表于 2010-6-20 19:11:00 | 显示全部楼层

Re:盖莫游戏引擎-UI-Slider截图

对应代码:
/*!==========================================================================
*
*  盖莫游戏引擎(GaiMo Game Engine)
*
*  版权所有 (C) 2009-2009 成都盖莫软件技术工作室 保留所有权利
*  Copyright (C) 成都盖莫软件技术工作室.  All Rights Reserved.
*
*  了解更多情况,请访问 http://www.gaimo.net
****************************************************************************/
#include <GEngine/Archive/Serialization.hpp>
#include <GEngine/Gaimo.hpp>
#include <GEngine/UI_Header.hpp>
#include <GEngine/textdesc.hpp>
#include <GEngine/ui/ui_brush.hpp>


//! 使用盖莫游戏引擎内核命名空间
using namespace core;

REGISTER_CLASS(TextDesc);

void RenderGUI();

RefPtr<Device> device;
RefPtr<Input>  input;
Panel *panel = NULL;
ProgressBar *progressbar = NULL;
Button *button1 = NULL;
Button *button2 = NULL;
Button *button3 = NULL;
Button *button4 = NULL;
Slider *slider  = NULL;  

void G_CALL MouseStateCallBack(int mouse,int action)
{
    int x,y;
    input->GetMousePosition(x,y);
    if(action == KEY_PRESS && mouse == MOUSE_BUTTON_LEFT)
    {
        UIWidgetManager::Instance().OnLeftButtonDown(x,y);         
    }
    else if(action == KEY_PRESS && mouse == MOUSE_BUTTON_RIGHT)
    {
        UIWidgetManager::Instance().OnRightButtonDown(x,y);  
    }
    else if(action == KEY_RELEASE && mouse == MOUSE_BUTTON_LEFT)
    {
        UIWidgetManager::Instance().OnLeftButtonUp(x,y);
    }
    else if(action == KEY_RELEASE && mouse == MOUSE_BUTTON_RIGHT)
    {
        UIWidgetManager::Instance().OnRightButtonUp(x,y);   
    }
}

void G_CALL MousePosCallBack(int x,int y)
{
    UIWidgetManager::Instance().OnMouseMove(x, y);
}

bool G_CALL IsShiftPressed()
{
    return false;
}

bool G_CALL IsAltPressed()
{
    return false;
}

bool G_CALL IsCtrlPressed()
{
    return false;
}

void SettingPanel();

int main()
{
    device = InitDevice("UI测试1");
    input = device->GetInput();
    input->AttachMouseState(&MouseStateCallBack);
    input->AttachMousePos(&MousePosCallBack);
    core::TextDesc::SetDefaultFont(engine_string("..\\font//simhei.ttf"));
   
    UIWidgetManager::Instance().Initialize(&IsShiftPressed,&IsAltPressed,&IsCtrlPressed);
    UIWidgetManager::Instance().AppResized(640,480);
    SettingPanel();
    BEGIN_LOOP(device)
       glClearColor(0.1,0.1,0.2,1.0f);
       glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );   
       RenderGUI();   
    END_LOOP(device)
   
    return 0;
}

void SettingPanel()
{
    panel = new Panel(Rectf(10,15,180,300),NULL);
   
    button1 = new Button(panel,L"寮

56

主题

94

帖子

98

积分

注册会员

Rank: 2

积分
98
发表于 2010-6-20 19:11:00 | 显示全部楼层

Re:盖莫游戏引擎-UI-Slider截图

  button1 = new Button(panel,L"寮€濮?娓告??);
    button2 = new Button(panel,L"淇?瀛?娓告??");
    button3 = new Button(panel,L"杞藉?ユ父??");
    button4 = new Button(panel,L"?€?烘父??);
    progressbar = new ProgressBar(panel,Rectf(150,90,40,220),UI_DIRECTION_VERTICAL);
    progressbar->SetPercentage(65.0f);
      
    panel->AddChildWidget(button1);
    panel->AddChildWidget(button2);
    panel->AddChildWidget(button3);
    panel->AddChildWidget(button4);

    panel->AddChildWidget(progressbar);
   
    button1->SetSize(Vector2f(120,40));
    button2->SetSize(Vector2f(120,40));
    button3->SetSize(Vector2f(120,40));
    button4->SetSize(Vector2f(120,40));
    button1->SetPosition(Vector2f(20,90));
    button2->SetPosition(Vector2f(20,150));
    button3->SetPosition(Vector2f(20,210));
    button4->SetPosition(Vector2f(20,270));  
   
    slider = new Slider(panel,UI_DIRECTION_HORIZONTAL,Rectf(20,30,175,32));
    slider->SetTickFrequency(2)
            .SetTickPlacement(Slider::TICK_PLACEMENT_BOTH)
            .SetMax(20)
            .SetBlockIncrement(4)
            ;
    panel->AddChildWidget(slider);   
   
    UIWidgetManager::Instance().AddWidget(panel);      
}

void RenderGUI()
{
    float precent = progressbar->GetPercentage();
    precent += 1.0f;
    if(precent >= 100.0f)
        precent = 0.0f;
    progressbar->SetPercentage(precent);   
    UIWidgetManager::Instance().Update();      
}

56

主题

94

帖子

98

积分

注册会员

Rank: 2

积分
98
发表于 2010-6-20 19:11:00 | 显示全部楼层

Re:盖莫游戏引擎-UI-Slider截图

UI 滑块代码:
////////////////////////////////////////////////////////////
/// 简单滑块对象
////////////////////////////////////////////////////////////
class G_DLL_API Slider : public Slideable
{
public:
    //! 点击位置
    enum TICK_PLACEMENT
        {   
            TICK_PLACEMENT_NONE = 0,
            TICK_PLACEMENT_LEFT = 1,
                TICK_PLACEMENT_BELOW = TICK_PLACEMENT_LEFT,
                TICK_PLACEMENT_RIGHT = 2,
                TICK_PLACEMENT_ABOVE = TICK_PLACEMENT_RIGHT,
                TICK_PLACEMENT_BOTH
        };
public:
    ////////////////////////////////////////////////////////
    /// 构造滑块
    ////////////////////////////////////////////////////////
    Slider(Widget* parent,UI_DIRECTION direction,const Rectf& rect);
    virtual ~Slider();
public:
        ////////////////////////////////////////////////////////
        /// 进度条方向
        ////////////////////////////////////////////////////////
    UI_DIRECTION GetDirection()const{return direction_;}

        ////////////////////////////////////////////////////////
        /// 点击方位
        ////////////////////////////////////////////////////////
    TICK_PLACEMENT GetTickPlacement()const{return tickplacement_;}
    Slider& SetTickPlacement(TICK_PLACEMENT tickplacement)
    {
            tickplacement_ = tickplacement;
                return *this;
        }

        ////////////////////////////////////////////////////////
        /// 点击频率设置和获取
        ////////////////////////////////////////////////////////
    Slider& SetTickFrequency(int frequency){tick_frequency_ = frequency; return *this; }
    int GetTickFrequency()const{return tick_frequency_;}
public:
        ////////////////////////////////////////////////////////
        /// 事件处理
        ////////////////////////////////////////////////////////
    virtual bool Process(const UIEvent& message);

public:
    virtual Vector2f GetRecommendedSize() const;
    virtual Widget&  Load(const engine_string& xml,const engine_string& widget);
protected:
    virtual void OnResize();
    virtual void OnMove();
    virtual Widget& Draw();
    float   GetTrackLength()const;
    Vector2f GetButtonSize()const;

private:
        ////////////////////////////////////////////////////////
        /// 重新布局
        ////////////////////////////////////////////////////////
    Slider& Arrange();

    SliderButton*  button_;
    UI_DIRECTION   direction_;
    TICK_PLACEMENT tickplacement_;
    int            tick_frequency_;
    SliderMouseListener* mouse_listener_;
    SliderDesc* render_desc_;

    friend class SliderMouseListener;
    friend class SliderButton;
    void ButtonPressed(){slider_pressed();}
    void ButtonReleased(){slider_released();}
};

56

主题

94

帖子

98

积分

注册会员

Rank: 2

积分
98
发表于 2010-6-20 19:12:00 | 显示全部楼层

Re:盖莫游戏引擎-UI-Slider截图

以上代码只是中间货 没有最后定稿喔
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-3-14 03:19

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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