如何使用使用鼠标拖动时变化的位图(例如旋转旋钮)进行控制?这使用Win32 API?
答案 0 :(得分:2)
编写代码以识别控件窗口过程中的WM_MOUSEWHEEL消息。
答案 1 :(得分:0)
以下是您在简单游戏中看到的典型循环。这不是一个好的做法,而是一个很好的基础:
while(!quit) {
while(evt = events_left_for_processing) {
react_to_event(evt);
}
draw_frame();
}
特别注意第二个“while”,这样做比做“if”更好,你将能够更准确地处理组合事件。
过了一段时间,你可能需要基于时间的物理,它会变得更复杂(使用累加器)。我正在写一个相当简单的游戏的样本:
/* Time-based animation loop.
* Accumulator idea picked from an article by Glenn Fiedler on gafferongames.com */
while(!done) {
/* Input */
while(SDL_PollEvent(&evt)) {
window_event(evt, &done);
}
/* Physics */
newTime = time();
deltaTime = newTime - currentTime;
if(deltaTime > 0.0f) {
currentTime = newTime;
accumulator += deltaTime;
while(accumulator >= dt) {
window_update(t, dt);
accumulator -= dt;
t += dt;
}
}
#ifdef FPS_CAPPED
drawTime = newTime - currentDrawTime;
/* Draw */
if(drawTime >= FPS_CAPPED) {
currentDrawTime = newTime;
#endif
window_draw();
SDL_GL_SwapBuffers();
#ifdef FPS_CAPPED
}
#endif
}
window_update
等是通用函数(它们使用函数指针在游戏状态下执行函数)。
在您的情况下,方块的转换将在事件处理程序中更改,该处理程序捕获mouse_move事件并具有捕获mouse_press / release事件的状态。在 update 中,您将更改方块的位置/ etc数据。在 draw 例程中,你会对方块进行blit。 (除非您使用其他框架,如OpenGL在渲染管道中使用矩阵变换)