1

我有两个类,都继承自同一个基类。这是一个游戏循环,根据你所处的“状态”,它应该在 CALLBACK 方法中发送一个指向活动对象的指针——但它没有。它只发送第二个对象的指针。

如果我首先通过 PostMessage() 设置 ObjectA,然后设置 ObjectB,然后 ObjectB 不起作用,则它不会获得指向该对象的指针。

如果我设置相反,ObjectB 有效,而 ObjectA 无效。

这是循环的一般布局:(我错过了什么?)

游戏循环:

PostMessage( hwnd, WM_USER, 0, (LPARAM)&ObjectA );
PostMessage( hwnd, WM_USER, 0, (LPARAM)&ObjectB );

while(running)
{
    while( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )
    {
        /* ... */
    }

    if (STATE == StateA)
    Update(&ObjectA);

    if (STATE == StateB)
    Update(&ObjectB);
}

在回调方法中:

static ObjectA* objA;
static ObjectB* objB;

if (objA || objB)
{
    // Do stuff to objA or objB
}
else
    switch(msg)
    {
        case WM_USER:

        if (STATE == StateA)
            objA = (ObjectA*) lparam;

        if (STATE == StateB)
            objB = (ObjectB*) lparam;
        break;

        // default and WM_CLOSE
    }
}
4

1 回答 1

0
while( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )
{
    /* ... */
}

经过审查,您的代码很可能会执行以下操作:

  1. 遍历所有消息,一一丢弃
  2. 在“处理”完所有消息后,使用最后一条消息的参数调用 Update,这些参数(我假设)在“/* ... */”块中读取。

你能试试这个变化吗?

while(running)
{
    while( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )
    {
        /* ... */

        if (STATE == StateA)
        Update(&ObjectA);

        if (STATE == StateB)
        Update(&ObjectB); // Note the "Update" callbacks moved to inner loop
    }
}
于 2012-11-12T07:16:14.153 回答