游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1354|回复: 0

学写游戏1 (读书贴,新手请进)

[复制链接]

3

主题

28

帖子

30

积分

注册会员

Rank: 2

积分
30
发表于 2008-1-6 19:18:00 | 显示全部楼层 |阅读模式
一直想学写游戏,但始终找不到入门的方法,近日看到一篇文章,大受启发,决定写我的第一个游戏(以前也写过方块,挖雷等,但感觉实现的很混乱,离真正的游戏编程差距很远),希望能够借此入门,也希望有相同爱好和想法的人一起学习、讨论。遇到问题的时候也希望高手和版主们能给予指点迷经。

这里是按照下面的一篇文章写一个坦克大战。(开发文档-游戏入门编程里的一篇文章)http://dev.gameres.com/Program/Abstract/Thinking/GameMakeSpeed/GameMakeSpeed.doc

这篇文章提供了一个不错的架构,并介绍了游戏编程的一些基础的东西,可惜的是这并不是一个完整版,谁找到了完整版,请把地址贴出来,谢谢。我的目标就是,学习现有的部分,并尽可能的对未完成的部分进行补充,最终做出一个完整的游戏。

今天就来读第一章
作者使用的是vs2003,我这里只有vs6.0,经试验是可行的。

第一章比较简短,就是建立了一个windows程序。如果你看不懂的话建议先学习《windows程序设计》。
唯一值得讨论的地方是这个消息循环
int AppMsgLoop()
{
    MSG msg;
    ZeroMemory( &msg, sizeof(MSG) );

_AppLoop:
    // 检测是否有消息要处理
    if( PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) )
    {
        // 如果接收不到消息表示要退出程序
        if( !GetMessage( &msg, NULL, 0, 0 ) )
        {
            // 转向结束程序
            goto _ExitApp;
        }

        // 执行消息处理
        TranslateMessage( &msg );
        DispatchMessage( &msg );
    }
    else
    {
        // 如果没有任何消息要处理就调用主循环
        Sleep(1);
    }
goto _AppLoop;

_ExitApp:
    AppTerm();
    return (int)msg.wParam;
}

一个是使用了goto,这里的goto结构比较清晰,不影响可读性,这么用没什么问题。可能是作者认为goto比while的汇编码的效率高。实际上很多时候是while比goto的效率高。

另一个是
    if( PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) )
    {
        // 如果接收不到消息表示要退出程序
        if( !GetMessage( &msg, NULL, 0, 0 ) )
不知道为什么这么写[em5],取两次消息的效率很低,而且感觉也没什么必要,我觉的可以改成这样
    if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
    {
        // 如果接收不到消息表示要退出程序
        if (msg.message == WM_QUIT)
经测试没有问题,而且效率提高了。
欢迎讨论   [em2]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-23 22:37

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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