📄 usingevents.html
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta http-equiv="Content-Language" content="zh-cn">
<title>使用SDL:事件</title>
</head>
<body bgcolor="#FFF8DC" text="#000000">
<TABLE>
<TR><!--#include file="../menu.tmpl" -->
<TD>
<p align="center">
[<a href="usingvideo.html">前一页</a>]
<a href="toc.html"><font color="#8B0000">目录</font> </a>
[<a href="usingsound.html">后一页</a>]
</p>
<h1><font color="#8B0000">使用SDL</font></h1>
<h2>事件</h2>
<table border="0" cellpadding="4">
<tr>
<td valign="top"><ul>
<li><strong>等待事件</strong></li>
</ul>
<blockquote>
<p>调用SDL_WaitEvent()等待事件。
</p>
</blockquote>
</td>
<td valign="top" width="300" bgcolor="#D3D3D3"><b>提示:</b><br>
SDL支持国际键盘,解释键盘事件,并支持UNICODE(置于event.key.keysym.unicode)。由于Unicode支持需要额外的处理,当需要Unicode时必须先调用
SDL_EnableUNICODE()。</td>
</tr>
</table>
<table border="0" cellpadding="50">
<tr>
<td valign="top"><font color="#000080"><strong>例程:</strong></font><pre>
{
SDL_Event event;
SDL_WaitEvent(&event);
<font color="#0000FF">switch</font> (event.type) {
<font color="#0000FF">case</font> SDL_KEYDOWN:
printf("<font color="#000000">键 %s 按下了!\n</font>",
SDL_GetKeyName(event.key.keysym.sym));
break;
<font color="#0000FF">case</font> SDL_QUIT:
exit(0);
}
}
</pre>
</td>
</tr>
</table>
<table border="0" cellpadding="4">
<tr>
<td valign="top"><ul>
<li><strong>事件轮询</strong> </li>
</ul>
<blockquote>
<p>事件轮询调用SDL_PollEvent()函数。 </p>
</blockquote>
</td>
<td valign="top" width="300" bgcolor="#D3D3D3"><b>提示:</b><br>
如果只要查看(peek)事件,而不需要从事件队列中移走,你可以用SDL_PEEKEVENT作为参数调用SDL_PeepEvents()。 </td>
</tr>
</table>
<table border="0" cellpadding="50">
<tr>
<td valign="top"><font color="#000080"><strong>例程:</strong></font><pre>
{
SDL_Event event;
<font color="#0000FF">while</font> ( SDL_PollEvent(&event) ) {
<font color="#0000FF">switch</font> (event.type) {
<font color="#0000FF">case</font> SDL_MOUSEMOTION:
printf("<font color="#000000">鼠标移动了</font><font color="#000000">%d,%d 到 (%d,%d)\n</font>",
event.motion.xrel, event.motion.yrel,
event.motion.x, event.motion.y);
break;
<font color="#0000FF">case</font> SDL_MOUSEBUTTONDOWN:
printf("<font color="#000000">鼠标</font><font color="#000000"> %d </font><font color="#000000">点击</font><font color="#000000">在 (%d,%d)\n</font>",
event.button.button, event.button.x, event.button.y);
break;
<font color="#0000FF">case</font> SDL_QUIT:
exit(0);
}
}
}
</pre>
</td>
</tr>
</table>
<table border="0" cellpadding="4">
<tr>
<td valign="top"><ul>
<li><strong>事件状态轮询</strong></li>
</ul>
<blockquote>
<p>除了直接处理事件,每种类型的事件都有一个相应的函数可以用作检查事件的状态。如果你需要独占使用,应该调用
SDL_EventState() 忽略所有的事件,并且定期的调用SDL_PumpEvents()更新程序的事件状态。</p>
</blockquote>
</td>
<td valign="top" width="300" bgcolor="#D3D3D3"><b>提示:</b><br>
SDL_ShowCursor()可以显示或者隐藏光标/鼠标。 </td>
</tr>
</table>
<table border="0" cellpadding="50">
<tr>
<td valign="top"><font color="#000080"><strong>例程:</strong></font><pre>
{
SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE);
}
<font color="#008000">void</font> CheckMouseHover(void)
{
<font color="#008000">int</font> mouse_x, mouse_y;
SDL_PumpEvents();
SDL_GetMouseState(&mouse_x, &mouse_y);
<font color="#0000FF">if</font> ( (mouse_x < 32) && (mouse_y < 32) ) {
printf("鼠标在左上角!<font color="#000000">\n</font>");
}
}
</pre>
</td>
</tr>
</table>
<p align="center">
[<a href="usingvideo.html">前一页</a>]
<a href="toc.html"><font color="#8B0000">目录</font> </a>
[<a href="usingsound.html">后一页</a>]
</p>
</TABLE>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -