這裏是代碼爲您Game
類描述(因爲它很容易對我來說)這樣做的XNA 4.0的方法,:
protected override void Update(GameTime gameTime)
{
// Do Nothing!
}
void RealUpdate()
{
const float deltaTime = 1f/60f; // Fixed 60 FPS
// Update your scene here
}
RenderTarget2D screenshot;
protected override void LoadContent()
{
screenshot = new RenderTarget2D(GraphicsDevice, width, height, false, SurfaceFormat.Color, null);
}
protected override void UnloadContent()
{
screenshot.Dispose();
}
int i = 0;
protected override void Draw(GameTime)
{
RealUpdate(); // Do the update once before drawing each frame.
GraphicsDevice.SetRenderTarget(screenshot); // rendering to the render target
//
// Render your scene here
//
GraphicsDevice.SetRenderTarget(null); // finished with render target
using(FileStream fs = new FileStream(@"screenshot"+(i++)[email protected]".png", FileMode.OpenOrCreate)
{
screenshot.SaveAsPng(fs, width, height); // save render target to disk
}
// Optionally you could render your render target to the screen as well so you can see the result!
if(done)
Exit();
}
注:我寫這無需編譯或測試 - 所以有可能是一個小錯誤或兩個。
感謝您的回答!我會嘗試! 您如何建議跟蹤RealUpdate()函數中的時間(當前幀更新)? 我應該實施某種整數計數器併爲每個RealUpdate增加它嗎?或者我應該跟蹤XNA GameTime對象的時間嗎? – Alex 2010-09-03 10:06:52
你可以做任何適合你的動畫。您可以存儲自動畫開始以來的秒數或幀數。或者你可以存儲所有東西的位置,每幀更新一個恆定的數值(就像你在真實的遊戲中一樣)。不要創建'GameTime'對象(通常你只是閱讀它們 - 但在你的情況下,你故意忽略它們)。將時間存儲爲'float'或'double'(以存儲數秒)或'TimeSpan'。 – 2010-09-03 11:30:52