游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3439|回复: 6

FlowControl问题

[复制链接]

16

主题

31

帖子

39

积分

注册会员

Rank: 2

积分
39
发表于 2011-4-12 11:32:00 | 显示全部楼层 |阅读模式
class GameControl : public FlowControl
class Flow1 : public FlowObject  // 重载了Draw()  作用:背景蓝色
class Flow2 : public FlowObject  // 重载了Draw()  作用:背景红色


app.SetStart(new GameControl(new Flow1));   //显示正常 ,显示了Flow1的背景蓝色

然后我在 GameControl 的双击事件中,调用了 this->Exit(new Flow2);  //仍然显示Flow1的兰色,但是程序的确有运行Flow2的构造函数,但是执行不到Flow2的Draw函数,怎么回事啊

能给个FlowControl
示例吗

2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

积分
66489
QQ
发表于 2011-4-12 11:37:00 | 显示全部楼层

Re:FlowControl问题

请给出更为详尽的代码

16

主题

31

帖子

39

积分

注册会员

Rank: 2

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

Re:FlowControl问题

class CGameControl : public FlowControl
{
public:
        CGameControl(FlowObject* ob) // ob 实际传入的是Flow1做为开始流程
           {
             this->SetStart(ob);
          SetEventCall(this->OnMouseLeftDoubleClick,this,CGameControl::OnMouseLeftDClick);
            };
        virtual ~CGameControl(){};

public:
        void OnMouseLeftDClick(int,int,uint)
           {
              this->Exit(new Flow2);  //双击前,显示的是Flow1的蓝色背景,双击后屏幕没有任何改变,但是可以执行到这,Flow2构造函数也执行到了
            };
       
};


main函数中 app.SetStart(new CGameControl(new Flow1));   
//Flow1,Flow2 只是重载了Draw() 一个蓝色背景,一个红色背景


因为没有相关示例,手册又不全,只能自己琢磨研究,还望尽快完善开发手册,增加点示例

16

主题

31

帖子

39

积分

注册会员

Rank: 2

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

Re:FlowControl问题

等待ING

2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

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

Re:FlowControl问题

需要再调用一次ProcCurState()

最标准的做法应该是在gameControl类中增加以下代码
        void Update()
        {
                ProcCurState();
        }

2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

积分
66489
QQ
发表于 2011-4-12 12:13:00 | 显示全部楼层

Re:FlowControl问题

完整测试示例

using namespace hgl;
class Blue:public FlowObject
{
public:

        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:17:00 | 显示全部楼层

Re:FlowControl问题

好的,非常感谢
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-22 09:37

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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