青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當自強而不息

Timing in Animation and Movement(3)

Moving with Time

Time−based motion doesn't just apply to animation. Movement is also a major part of your game, and basing movement on time guarantees that all systems will run your game consistently, regardless of how fast or how slow they are.

The most common use for time−based movement is when you want to move an object a set distance over a period of time. For example, suppose a player moves his joystick to the right, so your game responds by moving the on−screen game character to the right a little bit−let's say 64 units over a period of one second, which equates to 0.064 units of movement per millisecond.

Using a small function, you can calculate the number of units (as a floating−point value) to move an object based on the elapsed time between frames.

float CalcMovement(DWORD ElapsedTime, float PixelsPerSec)
{
  return (PixelsPerSec / 1000.0f * (float)ElapsedTime);
}

As you can see in the CalculateMovement function, you are using the following calculation:

PixelsPerSec / 1000.0f * ElapsedTime;

The PixelsPerSec variable contains the number of units you want to move over the period of a second. The 1000.0 value means 1000 milliseconds. Basically, you're breaking down the number of units to move per millisecond. Finally, you need to multiply by ElapsedTime to calculate the total movement to apply.

This sort of movement based on time is very basic, but it should not be overlooked. Knowledge of this function of time−based movement is essential to using more advanced features, such as smoothly moving objects along a pre−determined path.

 

Moving along Paths

As you read in the previous section, time−based movement is determined by taking the distance to travel, dividing it by 1,000, and multiplying the result by the elapsed time. In that section, I used an example in which a player pressed right on the joystick, and his character moved right a set amount of units. But what about those times when you want an object to move without user intervention? For instance, suppose a player pushes a button and bullets fly out of the big gun he is carrying. Those bullets travel along a set path at a set speed. You can set a velocity for each of those bullets, negating the need to use paths, but what about those super−bullets in your game that can swoop through parts of your level, perhaps along a pre−set path?

Those special instances require you to set up the coordinates of the travel paths in advance, and to do some quick calculations to determine where an object can be placed inside those paths. And what about moving objects such as characters, power−ups, and platforms? You guessed it−using paths is the perfect solution for all your movement needs!

I am going to discuss two of the most frequently used types of paths−straight and curved. I will start by explaining how to use straight paths.

 

Following Straight Paths

A straight path is just that−straight. The path moves from the starting point to the ending point with no breaks or turns. Generally, you define a straight line using a pair of coordinates−the starting point and the ending point. To follow a straight path, you only need to walk along the line from Point A to Point B.

To move an object along a straight path, you must calculate the coordinates of a point along the line using some simple formulas. For instance, as Figure 2.2 illustrates, to calculate a point at the midpoint of the line using a scalar value (ranging from 0 to 1), you calculate the difference in the endpoint's coordinates, multiply by the scalar value, and add the result to the starting point's coordinates.

// Define starting and ending points of straight path
// Scalar = position to calculate (0 to 1)
D3DXVECTOR3 vecStart = D3DXVECTOR3(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 vecEnd = D3DXVECTOR3(10.0f, 20.0f, 30.0f);
D3DXVECTOR3 vecPos = (vecEnd − vecStart) * Scalar + vecStart;

If you were to set Scalar to 0.5, then vecPos would contain the coordinates 5.0, 10.0, 15.0, which happen to be the midpoint of the path. Now suppose you don't want to use a scalar value. What about using 3D units instead? For example, instead of using a scalar value of 0.5, suppose you want to know the coordinates of a point that is 32 units from the starting coordinates.

To calculate the coordinates using 3D units as a measurement, calculate the length of the path using the D3DXVec3Length function, and then divide the position you want to use by the resulting value to obtain a scalar value to use in the previous calculations.

For example, to find the coordinates of the point that is 32 units into the path defined previously, you can use the following code:

// Pos = position (in 3−D units) of point in path to calculate
// Define starting and ending points of straight path
D3DXVECTOR3 vecStart = D3DXVECTOR3(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 vecEnd = D3DXVECTOR3(10.0f, 20.0f, 30.0f);

// Get the length of the path
float Length = D3DXVec3Length(&(vecEnd−vecStart));

// Calculate the scalar by dividing pos by length
float Scalar = Pos / Length;

// Use scalar to calculate coordinates
D3DXVECTOR3 vecPos = (vecEnd − vecStart) * Scalar + vecStart;

Now that you can calculate the exact position of any point along the path, you can use this knowledge to move an object along the path. Following the time−based theory of movement, suppose you want to move an object from one point to another over a period of 1,000 milliseconds. The following code (processed once per frame) will accomplish this, continuously looping back from the end to the start of the path in an endless cycle.

// vecPoints[2] = path's starting and ending coordinate vectors
// Every frame, use the following code to position an object along the straight path based on the current time.
float Scalar = (float)(timeGetTime() % 1001) / 1000.0f;

D3DXVECTOR3 vecPos = (vecPoints[1] − vecPoints[0]) * Scalar + vecPoints[0];

// Use vecPos.x, vecPos.y, and vecPos.z coordinates for object


posted on 2008-04-16 14:16 lovedday 閱讀(417) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導航

統計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美午夜理伦三级在线观看| 国产精品嫩草影院av蜜臀| 国产一区二区三区四区hd| 亚洲综合成人在线| 亚洲在线不卡| 伊人精品视频| 亚洲国产乱码最新视频| 免费久久精品视频| 亚洲伦理网站| 亚洲一区二区三区国产| 国内外成人在线视频| 免费av成人在线| 欧美激情视频免费观看| 亚洲中字在线| 欧美一区二区三区免费在线看| 一区在线影院| 日韩视频在线一区| 国产伦一区二区三区色一情| 久色婷婷小香蕉久久| 欧美大片91| 欧美有码在线观看视频| 久久综合九色综合欧美狠狠| 一区二区三区精品在线| 欧美一级在线视频| 99精品99| 久久精品免费播放| 亚洲网址在线| 久久久综合香蕉尹人综合网| 亚洲特色特黄| 久久午夜精品一区二区| 亚洲综合清纯丝袜自拍| 久久婷婷激情| 欧美亚洲免费| 欧美韩国一区| 麻豆国产精品一区二区三区| 欧美日韩综合不卡| 欧美国产日本在线| 国产一区二区三区日韩| 亚洲狼人综合| 亚洲国产另类精品专区| 午夜精品福利一区二区蜜股av| 日韩视频在线观看国产| 欧美中文字幕不卡| 亚洲欧美日韩另类| 欧美精品观看| 亚洲国产91| 在线高清一区| 久久精品国产亚洲aⅴ| 亚洲欧美精品伊人久久| 欧美精品一区二区三区一线天视频 | 亚洲人成网站色ww在线| 国产一区二区av| 亚洲一区免费观看| 中国成人黄色视屏| 欧美日韩成人综合天天影院| 欧美高清不卡| 亚洲国产高清一区| 久久久久高清| 农村妇女精品| 亚洲电影毛片| 巨乳诱惑日韩免费av| 久久深夜福利| 激情av一区| 久久女同互慰一区二区三区| 久久久午夜视频| 国产一区二区三区自拍| 欧美一区二区三区四区夜夜大片| 亚洲欧美一区二区三区久久| 国产精品对白刺激久久久| 夜色激情一区二区| 亚洲天堂成人在线观看| 欧美午夜理伦三级在线观看| 一区二区三区精品| 欧美亚洲在线| 狠狠色丁香婷婷综合| 久久精品免费电影| 欧美不卡福利| 亚洲精品一区二区在线观看| 欧美激情视频在线播放 | 久久免费视频在线| 狠狠v欧美v日韩v亚洲ⅴ| 久久一二三四| 亚洲国产精品精华液2区45| 99视频精品| 国产精品女同互慰在线看| 亚洲欧美在线x视频| 久久精品视频在线观看| 亚洲夫妻自拍| 欧美日韩午夜精品| 午夜在线视频观看日韩17c| 美女主播一区| 这里是久久伊人| 国产日韩精品久久久| 久久综合色影院| 日韩午夜三级在线| 久久久国产精品亚洲一区 | 欧美日韩三区| 欧美与黑人午夜性猛交久久久| 欧美不卡三区| 亚洲欧美偷拍卡通变态| 激情五月***国产精品| 欧美日韩另类在线| 欧美亚洲综合久久| 亚洲欧洲精品一区二区三区不卡| 午夜国产一区| 亚洲人成亚洲人成在线观看图片| 欧美日韩综合另类| 久久久久久久久久久久久久一区 | 羞羞答答国产精品www一本| 亚洲国产精品va在线看黑人动漫 | 欧美成人一区二区三区在线观看| 亚洲视频免费看| 亚洲国产老妈| 久久视频国产精品免费视频在线| 亚洲最快最全在线视频| 国内成人精品2018免费看| 欧美日韩一级大片网址| 久热精品视频在线观看| 午夜欧美电影在线观看| 亚洲日本中文| 欧美国产日韩一区二区| 欧美一区二区三区免费观看| 99这里有精品| 亚洲国产一成人久久精品| 国产日韩在线看片| 国产精品久久久久久户外露出| 欧美不卡福利| 久久亚洲精品中文字幕冲田杏梨| 亚洲欧美精品| 亚洲免费在线| 亚洲男女毛片无遮挡| 99re6这里只有精品视频在线观看| 欧美成人伊人久久综合网| 久久久久久久97| 欧美一区午夜精品| 先锋亚洲精品| 欧美一区二区私人影院日本 | 1024欧美极品| 尤物九九久久国产精品的分类| 国产女精品视频网站免费 | 欧美日韩国产电影| 欧美精品一区二区精品网 | 亚洲一区www| 一区二区福利| 一区二区日韩| 亚洲午夜视频在线| 亚洲男同1069视频| 亚洲免费一在线| 午夜欧美视频| 久久av二区| 久久精品日韩| 免费在线观看日韩欧美| 女同性一区二区三区人了人一| 久久综合国产精品| 欧美福利一区二区| 欧美日韩一区二区三区在线看| 欧美日韩91| 国产精品国产三级国产a| 国产精品一区二区在线| 国产亚洲一区二区三区| 一区在线免费| 一区二区电影免费观看| 亚洲淫性视频| 久久午夜精品| 亚洲国产日韩在线一区模特| 日韩系列欧美系列| 亚洲女ⅴideoshd黑人| 久久九九精品| 欧美激情视频网站| 国产酒店精品激情| 一区二区三区在线免费观看 | 国产精品成人免费| 国产一区二区激情| 亚洲欧洲视频在线| 亚洲免费影院| 免费短视频成人日韩| 日韩午夜剧场| 久久激情五月丁香伊人| 欧美成人综合| 国产精品自拍网站| 亚洲国产精品高清久久久| 亚洲一区二区视频在线| 久久综合导航| 亚洲午夜视频| 欧美成人资源| 国产婷婷色一区二区三区在线| 亚洲精品1区| 欧美伊人久久| 亚洲精品中文字幕有码专区| 欧美亚洲一区二区三区| 欧美日韩国产一区二区三区| 国产亚洲欧美日韩精品| 国产精品99久久99久久久二8| 久久久精品午夜少妇| 亚洲美女中出| 欧美不卡在线视频| 精品99视频| 久久免费黄色| 亚洲男同1069视频| 国产精品wwwwww|