游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1702|回复: 7

请帮看看这段代码 , 我咋也看不明白

[复制链接]

32

主题

116

帖子

122

积分

注册会员

Rank: 2

积分
122
发表于 2005-10-14 15:38:00 | 显示全部楼层 |阅读模式
俺是初学D3D,看到下面的消息循环时 很是不理解 请指教一下
其实就是安下上下左右时 3D物体旋转 但下面的代码能实现吗 我看了半天也看不懂
重点是循环这块 假如当我按下左键后 是进入IF这块把吧  但display函数却在ELSE里 咋回事啊
while(msg.message != WM_QUIT)
        {
                if(:eekMessage(&msg, 0, 0, 0, PM_REMOVE))
                {
                        ::TranslateMessage(&msg);
                        :ispatchMessage(&msg);
                }
                else
                                         {       
                        float currTime  = (float)timeGetTime();
                        float timeDelta = (currTime - lastTime)*0.001f;

                        display(timeDelta);

                        lastTime = currTime;
                                         }


display是渲染等一系列主操作的函数 定义如下
static float angle  = (3.0f * D3DX_PI) / 2.0f;
                static float height = 5.0f;
       
                if( ::GetAsyncKeyState(VK_LEFT) & 0x8000f )
                        angle -= 0.5f * timeDelta;

                if( ::GetAsyncKeyState(VK_RIGHT) & 0x8000f )
                        angle += 0.5f * timeDelta;

                if( ::GetAsyncKeyState(VK_UP) & 0x8000f )
                        height += 5.0f * timeDelta;

                if( ::GetAsyncKeyState(VK_DOWN) & 0x8000f )
                        height -= 5.0f * timeDelta;
                                 ...................
                                ....................等等

我想弄明白假如当我按下左键后这个循环是怎样执行的
下面的是回调函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
        switch( msg )
        {
        case WM_DESTROY:
                ::PostQuitMessage(0);
                break;
               
        case WM_KEYDOWN:
                if( wParam == VK_ESCAPE )
                        ::DestroyWindow(hwnd);
                break;
        }
        return ::DefWindowProc(hwnd, msg, wParam, lParam);
}


20

主题

398

帖子

398

积分

中级会员

Rank: 3Rank: 3

积分
398
发表于 2005-10-14 16:02:00 | 显示全部楼层

Re:请帮看看这段代码 , 我咋也看不明白

唉......用D3D也有一段时间了,可是却只是从SDK中抄来了消息处理的代码,从来都没有仔细分析过,惭愧啊!^_^

2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

积分
66489
QQ
发表于 2005-10-14 16:07:00 | 显示全部楼层

Re:请帮看看这段代码 , 我咋也看不明白

这是非常、一般、正常的手法!

32

主题

116

帖子

122

积分

注册会员

Rank: 2

积分
122
 楼主| 发表于 2005-10-14 16:41:00 | 显示全部楼层

Re:请帮看看这段代码 , 我咋也看不明白

请告我大体的流程 谢谢          if(:eekMessage(&msg, 0, 0, 0, PM_REMOVE))是在有值返回时执行吧   当我按下->右键时  有值返回吧  执行if这块吧  但display在 else里 咋回事啊

5

主题

217

帖子

222

积分

中级会员

Rank: 3Rank: 3

积分
222
发表于 2005-10-14 17:35:00 | 显示全部楼层

Re:请帮看看这段代码 , 我咋也看不明白

我晕....如果有消息,处理消息...不然就render到屏幕啊....我晕...这个还用问

1

主题

42

帖子

52

积分

注册会员

Rank: 2

积分
52
发表于 2005-10-14 19:21:00 | 显示全部楼层

Re:请帮看看这段代码 , 我咋也看不明白

优先处理消息,没有消息的时候就render

3

主题

105

帖子

105

积分

注册会员

Rank: 2

积分
105
发表于 2005-10-14 20:53:00 | 显示全部楼层

Re:请帮看看这段代码 , 我咋也看不明白

按左键执行下面这段代码
if( ::GetAsyncKeyState(VK_LEFT) & 0x8000f )
angle -= 0.5f * timeDelta;

201

主题

1437

帖子

1963

积分

金牌会员

Rank: 6Rank: 6

积分
1963
QQ
发表于 2005-10-15 12:36:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-28 03:06

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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