游戏开发论坛

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

FlowControl的新问题

[复制链接]

16

主题

31

帖子

39

积分

注册会员

Rank: 2

积分
39
发表于 2011-4-12 12:31:00 | 显示全部楼层 |阅读模式
经过void CGameControl::Update()
{
        ProcCurState();
}
FlowObject可以正常切换,更新,但是 FlowObject中的Control 管理器 不更新.

class Flow1:public FlowObject
{
  Flow1::Flow1()
  {
     Control += new Button(0,0,100,100);
  }

}

Button不更新了,只能显示,鼠标移上去也不会变化了(引擎默认加入Control中的gui应该都自动更新的)

16

主题

31

帖子

39

积分

注册会员

Rank: 2

积分
39
 楼主| 发表于 2011-4-12 12:36:00 | 显示全部楼层

Re:FlowControl的新问题

//完整的测试代码  , Blue类中增加了一个按钮,但是按钮只能显示,不能更新
using namespace hgl;
class Blue:public FlowObject
{
public:
Blue()
{
Control = new Button(0,0,100,100);
}
void Draw()
{
glClearColor(0,0,1,1);
ClearScreen();
}
};//class Blue

class Red:public FlowObject
{
public:

void Draw()
{
glClearColor(1,0,0,1);
ClearScreen();
}
};//class Red

class GameControl:public FlowControl
{
bool MouseLeftDoubleClickProc(int,int,uint)
{
Exit(new Red);
return(true);
}

public:

GameControl(FlowObject *obj)
{
SetStart(obj);

SetEventCall(onMouseLeftDoubleClick,this,GameControl,MouseLeftDoubleClickProc);
}

void Update()
{
ProcCurState();
}
};//class GameControl

void GameMain(int,wchar_t**)
{
SystemInitInfo sii;
GameApplication app;

sii.info.ProjectName=L"自定义流程控制器";
sii.info.ProjectCode=L"Customize FlowControl";

if(!app.Init(&sii))
return;

app.SetStart(new GameControl(new Blue));

app.Run();
}


16

主题

31

帖子

39

积分

注册会员

Rank: 2

积分
39
 楼主| 发表于 2011-4-12 12:41:00 | 显示全部楼层

Re:FlowControl的新问题

是不是所有消息都被CGameControl接收了,而不是FlowObject中的Control? 如何解决?

2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

积分
66484
QQ
发表于 2011-4-12 16:01:00 | 显示全部楼层

Re:FlowControl的新问题

我不知你为何一定要重载FlowControl,根节点的FlowControl是一个特殊的存在。
如果一定要这样做,则必须手动传递事件

        bool GameFlowControl:roc_MouseWheel            (int x,int y, int wheel)
        {
                FlowObject *obj=ActiveObject;

                if(obj)
                        return obj-&gtroc_MouseWheel(x,y,wheel);
                else
                        return(false);
        }

        #undef PROC
        #define PROC(func_name)        bool GameFlowControl::func_name(int x,int y,uint key)                {                FlowObject *obj=ActiveObject;                                        if(obj)                                return obj->func_name(x,y,key);                        else                                return(false);                }

        PROC(Proc_MouseMove             );
        PROC(Proc_MouseLeftDown         );
        PROC(Proc_MouseLeftUp           );
        PROC(Proc_MouseLeftDoubleClick  );
        PROC(Proc_MouseMidDown          );
        PROC(Proc_MouseMidUp            );
        PROC(Proc_MouseMidDoubleClick   );
        PROC(Proc_MouseRightDown        );
        PROC(Proc_MouseRightUp          );
        PROC(Proc_MouseRightDoubleClick );

        #undef PROC

        #define PROC(func_name)        bool GameFlowControl::func_name(uint key)                {                        FlowObject *obj=ActiveObject;                                        if(obj)                                return obj->func_name(key);                        else                                return(false);                }

        PROC(Proc_JoystickDown        );
        PROC(Proc_JoystickPress        );
        PROC(Proc_JoystickUp        );
        PROC(Proc_KeyDown       );
        PROC(Proc_KeyPress      );
        PROC(Proc_KeyUp         );

        #undef PROC

        bool GameFlowControl::Proc_Char            (wchar_t ch)
        {
                FlowObject *obj=ActiveObject;

                if(obj)
                        return obj->Proc_Char(ch);
                else
                        return(false);
        }
               
        bool GameFlowControl::Proc_Event            (int id,void *event)
        {
                FlowObject *obj=ActiveObject;

                if(obj)
                        return obj->Proc_Event(id,event);
                else
                        return(false);
        }

2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

积分
66484
QQ
发表于 2011-4-12 16:03:00 | 显示全部楼层

Re:FlowControl的新问题

确实第一次碰到你这样的用法,已对引擎做引进,在新版本中会附带。

一、Application在构造时允许使用自定义的流程控制器
二、Application对事件投递不再直接投递给FlowControl::ActiveObject,而是投递给FlowControl,再由FlowControl进行转投
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-5 18:59

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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