游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1695|回复: 1

关于书《DIRECTX角色扮演游戏编程第2版》中第8章的问题?

[复制链接]

5

主题

19

帖子

31

积分

注册会员

Rank: 2

积分
31
发表于 2006-9-17 16:18:00 | 显示全部楼层 |阅读模式
在P317中有如下代码:
BOOL cApp::Frame()
{
  static DWORD  Timer = timeGetTime();
  unsigned long Elapsed;
  float         XMove, ZMove;
  short         i;

  // Calculate elapsed time (plus speed boost)
  Elapsed = (timeGetTime() - Timer) * 2;
  Timer = timeGetTime();

  // Get input
  m_Keyboard.Read();
  m_Mouse.Read();

  // Process input and update everything.
  // ESC quits program
  if(m_Keyboard.GetKeyState(KEY_ESC) == TRUE)
    return FALSE;

  // Process movement
  XMove = ZMove = 0.0f;

  // Process keyboard input to move view

  // Move viewpoint forward
  if(m_Keyboard.GetKeyState(KEY_UP) == TRUE) {
    XMove = (float)sin(m_Camera.GetYRotation()) * Elapsed;
    ZMove = (float)cos(m_Camera.GetYRotation()) * Elapsed;
  }

  // Move viewpoint backward
  if(m_Keyboard.GetKeyState(KEY_DOWN) == TRUE) {
    XMove = -(float)sin(m_Camera.GetYRotation()) * Elapsed;
    ZMove = -(float)cos(m_Camera.GetYRotation()) * Elapsed;
  }

  // Strafe left
  if(m_Keyboard.GetKeyState(KEY_LEFT) == TRUE) {
    XMove=(float)sin(m_Camera.GetYRotation()-1.57f)*Elapsed;
    ZMove=(float)cos(m_Camera.GetYRotation()-1.57f)*Elapsed;
  }

  // Strafe right
  if(m_Keyboard.GetKeyState(KEY_RIGHT) == TRUE) {
    XMove=(float)sin(m_Camera.GetYRotation()+1.57f)*Elapsed;
    ZMove=(float)cos(m_Camera.GetYRotation()+1.57f)*Elapsed;
  }

  // Update view coordinates
  m_XPos += XMove;
  m_ZPos += ZMove;

  // Position camera and rotate based on mouse position
  m_Camera.Move(m_XPos + XMove, 400.0f, m_ZPos + ZMove);
  m_Camera.RotateRel((float)m_Mouse.GetYDelta() / 200.0f,
                     (float)m_Mouse.GetXDelta() / 200.0f,
                     0.0f);

  // Set camera
  m_Graphics.SetCamera(&m_Camera);

  // Render everything
  m_Graphics.Clear(D3DCOLOR_RGBA(0,64,128,255));
  if(m_Graphics.BeginScene() == TRUE) {
    // Render each room
    for(i=0;i<8;i++)
      m_RoomObjects.Render();
    m_Graphics.EndScene();
  }
  m_Graphics.Display();

  return TRUE;
}

其中 if(m_Keyboard.GetKeyState(KEY_UP) == TRUE) {
    XMove = (float)sin(m_Camera.GetYRotation()) * Elapsed;
    ZMove = (float)cos(m_Camera.GetYRotation()) * Elapsed;
  }

  // Move viewpoint backward
  if(m_Keyboard.GetKeyState(KEY_DOWN) == TRUE) {
    XMove = -(float)sin(m_Camera.GetYRotation()) * Elapsed;
    ZMove = -(float)cos(m_Camera.GetYRotation()) * Elapsed;
  }

  // Strafe left
  if(m_Keyboard.GetKeyState(KEY_LEFT) == TRUE) {
    XMove=(float)sin(m_Camera.GetYRotation()-1.57f)*Elapsed;
    ZMove=(float)cos(m_Camera.GetYRotation()-1.57f)*Elapsed;
  }

  // Strafe right
  if(m_Keyboard.GetKeyState(KEY_RIGHT) == TRUE) {
    XMove=(float)sin(m_Camera.GetYRotation()+1.57f)*Elapsed;
    ZMove=(float)cos(m_Camera.GetYRotation()+1.57f)*Elapsed;
  }
是什么意思呢?看了很久也没弄明白。。唉。。
另外,P320中,出现的那段代码也不明白是什么意思。。

希望高手们帮帮小弟。 [em17]

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2006-9-18 12:44:00 | 显示全部楼层

Re:关于书《DIRECTX角色扮演游戏编程第2版》中第8章的问题?

这段程序的大概意思是:用“上、下、左、右”键控制移动。取得每贞的移动量,并将其加到当前位置上。将位置作为摄象机的参数,让摄象机跟着走,边走边渲染。所以效果应该是类似于CS那种游戏第一人称的控制。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 11:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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