听dj战歌,就上傲气战歌网!2015年传奇家族玩家最喜爱的家族战歌网
战歌推荐:战歌网 战歌网dj Mc战歌网 DJ战歌网下载 激情战歌-冰雪战歌网 客服Q:350317
新闻搜索:

C++跨平台游戏开发之ClanLib SDK(2)

作者:     来源:    发表时间:2011-04-07 19:07



32
33 public:
34  virtual int Boxes::main(int, char **);
35 } app;
36
37 using namespace std;
40
41 int Boxes::main(int, char **)
42 {
43  int winsize = spacing * (boardsize - 1) + border * 2;
44  try {
45   Boxes::init();
46   while (!CL_Keyboard::get_keycode(CL_KEY_ESCAPE)) {
47    Boxes::drawBoard();
48    if (fullup) break;
49     CL_System::keep_alive(20);
50   }
51   Boxes::endOfGame();
52
53   CL_SetupVorbis::deinit();
54   CL_SetupSound::deinit();
55   CL_SetupGL::deinit();
56   CL_SetupDisplay::deinit();
57   CL_SetupCore::deinit();
58  }
59  catch (CL_Error err) {
60   std::cout << "Exception caught: "<< err.message.c_str() << std::endl;
61  }
62
63  return 0;
64 }
  关于这个应用程序,应注意的第一事情是main()函数(见行41)并不是一个最顶层的函数,而是嵌入到一个从CL_ClanApplication派生的对象中。该对象封装了不少难以避免的平台依赖性-这可能包含一个传统的::main()实现(例如在Win32应用程序中必须使用WinMain())。 本文来自数据大全网

  而且还应注意,事实上所有的可执行的代码(行43-58)被封装在一个try{}/catch{}异常处理器块中。如果需要的话,ClanLib将引发异常,你可以重启一游戏,等等。基本上,所有的游戏逻辑包含在init(),drawBoard(),endOfGame()和inputHandler()这几个方法中。如果board不再移动(fullup==true),则退出游戏循环(行48)。CL_System::keep_alive()更新所有的输入和系统事件(象关闭窗口或者移动它)。这在老式的Win16 API ::Yield()或者Linux上的sleep()中将会释放CPU周期。

66 void Boxes::init()
67 {
68  CL_SetupCore::init();
69  CL_SetupDisplay::init();
70  CL_SetupGL::init();
71  CL_SetupSound::init();
72  CL_SetupVorbis::init();
73
74  CL_DisplayWindow window("Boxes", winsize, winsize);
75  CL_SoundOutput output(44100); //选择44Khz采样
76
77  CL_Surface *cursimg = new CL_Surface("cursor.tga");
78  cursimg->set_alignment(origin_center);
79  CL_Surface *redpict = new CL_Surface("handtransp.tga");
80  redpict->set_alignment(origin_center);
81  redpict->set_scale(float(spacing)/float(redpict->get_width()), 本文来自数据大全网
82  float(spacing)/float(redpict->get_height()));
83  CL_Surface *bluepict = new CL_Surface("circlehandtransp.tga");
84  bluepict->set_alignment(origin_center);
85  bluepict->set_scale(float(spacing) / float(bluepict->get_width()),
86  float(spacing) / float(bluepict->get_height()));
87
  这里的init()方法完成大部分的游戏初始化工作。当然,在此需要ClanLib子系统以用于处理图形和声音(行68-72),然后构建一个窗口用于显示所有的图形(行75)。

  CL_Surface(行77-87)是一个2D位图类,用于绘制光标,用蓝色填充的方格和用红色填充的方格。

  TGA文件是一种位图文件格式。ClanLib有一个集成的PNG库,因此它可以读写最流行的位图文件格式化。

  下一步,你必须把板子初始化成一个空状态(行87-103)并执行类似的其它的清理工作以实现新的游戏计数器。

89
90 redturn = true;
91 curs.vert = false;
92 fullup = false;
93 curs.x = curs.y = 1;
94
95 srand(CL_System::get_time()); //启动随机数字生成器
96
97 for (int x = 0; x < boardsize - 1; x++) {
98  for (int y = 0; y < boardsize; y++)
99  hor[x][y] = ver[y][x] = false;
100
101  for (int y = 0; y < boardsize - 1; y++)
102   squares[x][y] = off;
103
104

本文来自数据大全网

  ClanLib的一个特别突出的方面是它避开传统型应用于许多框架中的回调模型,而引入了"信号和槽"模型。这种模型广泛应用于Boost C++库中,并在QT中得到实现。信号代表具有多个目标的回调函数,又在一些类似的系统中称作"出版者"或者"事件"。信号被连接到一些槽上,它们是回调函数接收器(也称作事件目标或者订户),当信号被"发出"时即被调用。信号具有类型安全的优点,它们避开了在传统型的框架中的不可避免的cast操作。 【网站首页】 【关于我们】 【合作说明】 【广告指南】 【联系方式】 【版权声明】 【网站地图】 【收藏本站】 【设为首页】

数据大全网、数据联盟网:www.sql163.com    E-Mail:oksql@126.com    备案号:皖ICP备06001263号        点击这里给我发消息

Powered by SQL163.COM © 2004-2009 数据大全 版权所有 推荐使用分辨率1024*768

数据统计中!!

看过该文章的网友还看过

最新评论共有  位网友发表了评论
发表评论(评论内容:请文明参与评论,禁止谩骂攻击!)
不能超过250字节,请自觉遵守互联网相关政策法规.
昵称:    发表评论 (Ctrl+Enter快速回复)

关于本站 | 合作加盟 | 合作说明 | 免责声明 | 广告服务 | 网站地图

健康游戏忠告:抵制不良游戏 拒绝盗版游戏 注意自我保护 谨防受骗上当 适度游戏益脑 沉迷游戏伤身 合理安排时间 享受健康生活

如有意见和建议,请惠赐E-mail至350317@qq.com 联系QQ:350317

Copyright © 2010-2013 Www.27zG.CoM
苏ICP备11049833号