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

天行健 君子當自強而不息

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)  編輯 收藏 引用


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


公告

導航

統(tǒng)計

常用鏈接

隨筆分類(178)

3D游戲編程相關(guān)鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美在线观看一区| 妖精视频成人观看www| 欧美视频日韩| 蜜桃久久av| 国产区二精品视| 99伊人成综合| 最新精品在线| 久久久久久97三级| 午夜精品久久久久久久久| 美女被久久久| 久久久久亚洲综合| 国产精品高潮在线| 亚洲国产精品久久久久秋霞蜜臀| 欧美日韩免费观看一区二区三区 | 一本色道久久综合亚洲精品高清| 一区免费在线| 亚洲男人的天堂在线aⅴ视频| 一区二区三区精品久久久| 美脚丝袜一区二区三区在线观看 | 欧美α欧美αv大片| 国产精品一区二区三区四区五区| 亚洲精品视频在线观看免费| 亚洲人成高清| 猫咪成人在线观看| 久久在精品线影院精品国产| 国产综合av| 欧美专区第一页| 久久久国产精品亚洲一区| 国产日韩精品在线| 亚洲男人第一网站| 欧美亚洲色图校园春色| 国产精品v日韩精品| 一区二区三区国产精品| 亚洲在线黄色| 国产精品美女久久久久久免费| av成人激情| 亚洲欧美国产va在线影院| 欧美色精品天天在线观看视频 | 久久精品日产第一区二区| 久久经典综合| 狠狠综合久久| 久久久久久亚洲精品中文字幕| 蜜桃精品久久久久久久免费影院| 亚洲国产福利在线| 欧美成人一区二区三区片免费| 亚洲国产日日夜夜| 一区二区三区www| 欧美新色视频| 亚洲欧美成人一区二区三区| 久久精品99国产精品| 尤物九九久久国产精品的分类| 久久久亚洲精品一区二区三区| 欧美成人一区在线| 一区二区三区你懂的| 国产精品美女诱惑| 欧美在线观看视频| 猛干欧美女孩| 亚洲午夜国产成人av电影男同| 国产日韩欧美精品一区| 久久性色av| 日韩亚洲综合在线| 久久成人18免费网站| **性色生活片久久毛片| 欧美日韩亚洲91| 欧美一区免费| 亚洲经典在线| 欧美一区二区三区婷婷月色| 在线日韩日本国产亚洲| 国产精品久久久久久av福利软件| 欧美一区二区三区精品| 亚洲国产导航| 久久精品中文| 正在播放欧美一区| 国产自产2019最新不卡| 欧美日本一区| 鲁鲁狠狠狠7777一区二区| 99精品久久久| 欧美成人国产| 欧美一区午夜精品| 一区二区三区 在线观看视频 | 国产精品欧美一区二区三区奶水| 久久久久中文| 亚洲永久免费视频| 亚洲人成网站777色婷婷| 欧美一区二区视频观看视频| 亚洲美女中文字幕| 在线播放中文字幕一区| 国产精品私拍pans大尺度在线| 蜜桃久久av一区| 欧美一区二区精品在线| 一本大道久久精品懂色aⅴ| 你懂的网址国产 欧美| 久久精品99| 亚洲欧美另类在线| 99热这里只有成人精品国产| 国内偷自视频区视频综合| 欧美网站在线| 欧美日韩国产综合久久| 免费久久精品视频| 欧美在线一区二区| 亚洲一区二区三区中文字幕| 亚洲久色影视| 亚洲国产另类精品专区 | 久久精品一本| 午夜久久一区| 羞羞漫画18久久大片| 亚洲小视频在线| 9i看片成人免费高清| 最新高清无码专区| 欧美激情综合色| 欧美二区在线播放| 美女主播一区| 免费一级欧美在线大片| 久久在线观看视频| 久久久久国产一区二区| 久久黄色小说| 久久精品国产清高在天天线 | 日韩亚洲欧美综合| 亚洲日韩视频| 日韩一级精品| 在线视频日本亚洲性| 夜夜嗨av一区二区三区四区| 日韩视频在线一区| 一区二区久久久久久| 亚洲片在线观看| 日韩视频在线一区二区| 亚洲少妇最新在线视频| 亚洲尤物视频网| 欧美一区二区精品久久911| 久久精品30| 噜噜噜躁狠狠躁狠狠精品视频| 欧美福利视频在线观看| 欧美日韩国产限制| 国产精品久久久久永久免费观看| 国产九九精品视频| 很黄很黄激情成人| 亚洲欧洲在线观看| 中文在线不卡视频| 欧美在线黄色| 免费在线日韩av| 亚洲卡通欧美制服中文| 亚洲影院色无极综合| 久久久久久久久久久久久9999| 久久噜噜噜精品国产亚洲综合| 欧美国产另类| 国产精品日韩欧美一区二区| 狠狠爱成人网| 日韩一区二区免费看| 欧美在线日韩精品| 暖暖成人免费视频| 亚洲天堂网站在线观看视频| 久久久精品日韩欧美| 欧美精品精品一区| 国产精品影片在线观看| 亚洲成色777777在线观看影院| 一区二区三区精品| 美日韩精品视频免费看| 亚洲伦理在线免费看| 久久精品女人| 国产精品久久91| 亚洲国产一区二区三区在线播 | 国产目拍亚洲精品99久久精品| 在线免费观看日韩欧美| 亚洲淫性视频| 欧美激情bt| 久久国产88| 欧美午夜视频网站| 亚洲国产精品热久久| 欧美一区二区三区精品电影| 亚洲国产激情| 久久久99国产精品免费| 国产精品国产自产拍高清av| 亚洲国产精品久久久久久女王| 久久电影一区| 一区二区三区免费观看| 免费观看久久久4p| 国产日韩欧美另类| 亚洲一区国产精品| 欧美福利电影在线观看| 久久成人精品视频| 国产精品久久久久久一区二区三区| 亚洲国产精品成人一区二区 | 欧美精品aa| 亚洲二区在线视频| 久久精品av麻豆的观看方式| 一区二区欧美日韩| 欧美日韩精品免费观看| 亚洲国产精品一区二区第一页| 久久久久久久久久码影片| 一区二区三区视频在线| 欧美日韩国产成人高清视频| 亚洲国产精品一区二区第一页 | 欧美成人在线免费视频| 欧美伊人久久| 国产日韩欧美视频| 久久久久久久久综合| 欧美亚洲一区二区在线| 国产精品一二三四| 午夜久久一区| 亚洲欧美成人一区二区在线电影|