获取键盘和鼠标输入
2018-02-11 本文已影响0人
N景波
C4D API中有两种方法获取键盘和鼠标输入, GetInputStatus, GetInputEvent。 两者都是全局的(C++ c4d_gui, python c4d.gui),在GeDialog和GeUserArea类中,这些方法COFFEE中木有。
GetInputState拉取输入设备的当前状态(查看当前鼠标键是否按下,或者某个键当前被按下)
GetInputEvent 获取时间队列中的下一个事件。
在两种情况下,结果都是基于常量存在BaseContainer中,这些常量存在c++和python api中的event页面
例子
Python: 某个脚本执行时检测某个按键是否按下
import c4d
def main():
# Check any one key
bc =c4d.BaseContainer()
if c4d.gui.GetInputState(c4d.BFM_INPUT_KEYBOARD, c4d.KEY_F10,bc):
if bc[c4d.BFM_INPUT_VALUE] ==1:
print "F10 PRESSED"
else:
print "F10 NOT PRESSED"
Python: 脚本执行时检测哪个修改器被按下
import c4d
def main():
# Check all keys
bc =c4d.BaseContainer()
if c4d.gui.GetInputState(c4d.BFM_INPUT_KEYBOARD,c4d.BFM_INPUT_CHANNEL,bc):
print "Qualifier Bitwise:",bc[c4d.BFM_INPUT_QUALIFIER]
if bc[c4d.BFM_INPUT_QUALIFIER] & c4d.QSHIFT:
print "SHIFT PRESSED"
if bc[c4d.BFM_INPUT_QUALIFIER] & c4d.QCTRL:
print "CONTROL PRESSED"
if bc[c4d.BFM_INPUT_QUALIFIER] & c4d.QALT:
print "ALT PRESSED"
注意此例中,BFM_INPUT_QUALIFIER 是一个bit掩码。掩码允许一个int中体现多个二进制状态,掩码中,每个二进制槽可以是开或者关,第一个槽中的值需要诚意1(2的0次方),第二个乘以2
2(2的1次方)以此类推。
检测某个槽是否为真,使用bit的AND操作符,python和c++中都是&操作符。针对int检测那个槽,这里使用QSHIFT, QCTRL, QALT表示。