这个按预期工作:
if (clu.raw.butsnum) {
int i;
for (i=0;i<clu.raw.butsnum;i++){
if (clu.raw.buts[i] & RI_MOUSE_BUTTON_1_DOWN)
Com_QueueEvent( 0, SE_KEY, K_MOUSE1, qtrue, 0, NULL );
if (clu.raw.buts[i] & RI_MOUSE_BUTTON_2_DOWN)
Com_QueueEvent( 0, SE_KEY, K_MOUSE2, qtrue, 0, NULL );
if (clu.raw.buts[i] & RI_MOUSE_BUTTON_3_DOWN)
Com_QueueEvent( 0, SE_KEY, K_MOUSE3, qtrue, 0, NULL );
if (clu.raw.buts[i] & RI_MOUSE_BUTTON_4_DOWN)
Com_QueueEvent( 0, SE_KEY, K_MOUSE4, qtrue, 0, NULL );
if (clu.raw.buts[i] & RI_MOUSE_BUTTON_5_DOWN)
Com_QueueEvent( 0, SE_KEY, K_MOUSE5, qtrue, 0, NULL );
if (clu.raw.buts[i] & RI_MOUSE_BUTTON_1_UP)
Com_QueueEvent( 0, SE_KEY, K_MOUSE1, qfalse, 0, NULL );
if (clu.raw.buts[i] & RI_MOUSE_BUTTON_2_UP)
Com_QueueEvent( 0, SE_KEY, K_MOUSE2, qfalse, 0, NULL );
if (clu.raw.buts[i] & RI_MOUSE_BUTTON_3_UP)
Com_QueueEvent( 0, SE_KEY, K_MOUSE3, qfalse, 0, NULL );
if (clu.raw.buts[i] & RI_MOUSE_BUTTON_4_UP)
Com_QueueEvent( 0, SE_KEY, K_MOUSE4, qfalse, 0, NULL );
if (clu.raw.buts[i] & RI_MOUSE_BUTTON_5_UP)
Com_QueueEvent( 0, SE_KEY, K_MOUSE5, qfalse, 0, NULL );
}
clu.raw.butsnum = 0;
Run Code Online (Sandbox Code Playgroud)
但是这一个,
if (clu.raw.butsnum) {
short int down = qfalse;
int but = 0, i;
for (i = 0; i < clu.raw.butsnum; i++) {
switch( clu.raw.buts[i]) {
case RI_MOUSE_BUTTON_1_DOWN: down = qtrue; but = K_MOUSE1; break;
case RI_MOUSE_BUTTON_2_DOWN: down = qtrue; but = K_MOUSE2; break;
case RI_MOUSE_BUTTON_3_DOWN: down = qtrue; but = K_MOUSE3; break;
case RI_MOUSE_BUTTON_4_DOWN: down = qtrue; but = K_MOUSE4; break;
case RI_MOUSE_BUTTON_5_DOWN: down = qtrue; but = K_MOUSE5; break;
case RI_MOUSE_BUTTON_1_UP: down = qfalse; but = K_MOUSE1; break;
case RI_MOUSE_BUTTON_2_UP: down = qfalse; but = K_MOUSE2; break;
case RI_MOUSE_BUTTON_3_UP: down = qfalse; but = K_MOUSE3; break;
case RI_MOUSE_BUTTON_4_UP: down = qfalse; but = K_MOUSE4; break;
case RI_MOUSE_BUTTON_5_UP: down = qfalse; but = K_MOUSE5; break;
}
Com_QueueEvent( 0, SE_KEY, but, down, 0, NULL );
}
}
clu.raw.butsnum = 0;
Run Code Online (Sandbox Code Playgroud)
..有时候"失去它",如果某些"鼠标按钮"(在那段代码中)被按下时速度太快就不会被按下.
无论如何,我猜代码本身的相关性很小.
为什么这些代码片段不能完全相同?
开关就像写作
if ( clu.raw.buts[i] == VALUE )
Run Code Online (Sandbox Code Playgroud)
这与...不同
if ( clu.raw.buts[i] & VALUE )
Run Code Online (Sandbox Code Playgroud)
显然,第一个"捕获"值如果它是唯一保留的事件clu.raw.buts[i].相反,所有RI_stuff都是位或者是clu.raw.buts[i],因此查看它们是设置(1)还是清除(0)的唯一方法是&(按位和)运算符.
例如,如果clu.raw.buts[i]是0100且VALUE是0100,则可以捕获它.如果clu.raw.buts[i]是0110,你将不会"看到"带有==的0100,而你将"看到"它& 0100.
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |