现在,我尝试为2D游戏实现引擎。 我已经为游戏成功创建了窗口。 但是有一个问题。当我打电话给 device-> BeginScene()时,它无效。那个功能失败了。
我搜索并知道该功能失败,因为我之前已经调用 device-> BeginScene()而没有调用 device-> EndScene() (这意味着我连续两次调用函数 device-> BeginScene())。 一些代码:
//GameEngine.cpp
void CGameEngine::Draw()
{
// let the state draw the screen
if (!states.empty())
{
this->RenderStart();// this function failed- return 0
this->Render2D_Start();
states.back()->Draw(this);
this->Render2D_Stop();
this->RenderStop();
}
}
我已经多次调试但没有发现错误!!
任何人都可以帮助我吗?
(引擎中的所有类都可以,仅在类CIntroState和CGameEngine上有问题) 下载我的项目:http://mediafire.com/?h3jumchcqujnh69
提前感谢。 Sory因英语不好。
答案 0 :(得分:0)
您是否阅读过the documentation?它指定不允许嵌套BeginScene调用。您必须在EndScene
之后致电BeginScene
,然后再次致电BeginScene
。
在任何连续的调用之间应该有一个IDirect3DDevice9 :: BeginScene / IDirect3DDevice9 :: EndScene对(IDirect3DDevice9 :: Present或IDirect3DSwapChain9 :: Present)。 IDirect3DDevice9 :: BeginScene 应该在执行任何渲染之前调用,并且在将帧的所有渲染都提交到运行时之后,应该调用IDirect3DDevice9 :: EndScene 。在调用present之间存在多个非嵌套的IDirect3DDevice9 :: BeginScene / IDirect3DDevice9 :: EndScene对是合法的,但是如果有多对,可能会导致性能下降。