if(KeyCode == 2){//上 Change = Change?0:1; }里面的Change = Change?0:1是什么意思
时间: 2024-02-11 16:10:06 浏览: 20
这行代码的意思是当按键的 KeyCode 等于 2(表示按下了上箭头键)时,将 Change 变量的值从 0 切换到 1 或从 1 切换到 0。这是一个简洁的写法,等价于以下代码:
```
if (KeyCode == 2) {
if (Change == 0) {
Change = 1;
} else {
Change = 0;
}
}
```
其中 `Change = Change ? 0 : 1` 是一个三目运算符,它的意思是如果 `Change` 的值为真(即非零),则将其赋值为 0,否则赋值为 1。所以这行代码的效果就是将 `Change` 的值从 0 切换到 1 或从 1 切换到 0。
相关问题
void key_change_proc(void) {u8 key0 = kb_event.keycode[0]; u8 key_buf[8] = {0,0,0,0,0,0,0,0}; key_not_released = 1; if (kb_event.cnt == 2) //two key press, do not process { } else if(kb_event.cnt == 1) { if(key0 >= CR_VOL_UP ) //volume up/down { key_type = CONSUMER_KEY; u16 consumer_key; if(key0 == CR_VOL_UP){ //volume up consumer_key = MKEY_VOL_UP; } else if(key0 == CR_VOL_DN){ //volume down consumer_key = MKEY_VOL_DN; } blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE,HID_CONSUME_REPORT_INPUT_DP_H, (u8 *)&consumer_key, 2); } else { key_type = KEYBOARD_KEY; key_buf[2] = key0; blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE,HID_NORMAL_KB_REPORT_INPUT_DP_H, key_buf, 8); } } else //kb_event.cnt == 0, key release { key_not_released = 0; if(key_type == CONSUMER_KEY) { u16 consumer_key = 0; blc_gatt_pushHandleValueNotify ( BLS_CONN_HANDLE,HID_CONSUME_REPORT_INPUT_DP_H, (u8 *)&consumer_key, 2); } else if(key_type == KEYBOARD_KEY) { key_buf[2] = 0; blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE,HID_NORMAL_KB_REPORT_INPUT_DP_H, key_buf, 8); //release } } }按条分析各语句的作用
这段代码是一个函数,功能是根据键盘事件发送 HID 报文给 BLE 连接的主机。下面是各语句的作用:
1. `void key_change_proc(void)`:函数定义,返回值类型为 `void`,函数名为 `key_change_proc`,没有输入参数。
2. `u8 key0 = kb_event.keycode[0];`:从 `kb_event` 结构体中取出按下的第一个键的键码并存储在 `key0` 变量中。
3. `u8 key_buf[8] = {0,0,0,0,0,0,0,0};`:初始化一个长度为 8 的数组 `key_buf`,每个元素的值都为 0。
4. `key_not_released = 1;`:将 `key_not_released` 的值设为 1,表示键还没有松开。
5. `if (kb_event.cnt == 2)`:如果按下了两个键,则不处理。
6. `else if(kb_event.cnt == 1)`:如果只按下了一个键,则执行下面的代码块。
7. `if(key0 >= CR_VOL_UP )`:如果按下的键码大于或等于 `CR_VOL_UP`,则说明按下了音量加或音量减键。
8. `key_type = CONSUMER_KEY;`:将 `key_type` 变量的值设为 `CONSUMER_KEY`,表示这是一个消费者键。
9. `u16 consumer_key;`:定义一个 `u16` 类型的变量 `consumer_key`。
10. `if(key0 == CR_VOL_UP){ consumer_key = MKEY_VOL_UP; }`:如果按下的是音量加键,则将 `consumer_key` 的值设为 `MKEY_VOL_UP`。
11. `else if(key0 == CR_VOL_DN){ consumer_key = MKEY_VOL_DN; }`:如果按下的是音量减键,则将 `consumer_key` 的值设为 `MKEY_VOL_DN`。
12. `blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE,HID_CONSUME_REPORT_INPUT_DP_H, (u8 *)&consumer_key, 2);`:调用 Beken BLE Stack 提供的函数 `blc_gatt_pushHandleValueNotify`,将消费者键报文发送给 BLE 连接的主机。
13. `else`:如果按下的不是音量加或音量减键,则执行下面的代码块。
14. `key_type = KEYBOARD_KEY;`:将 `key_type` 变量的值设为 `KEYBOARD_KEY`,表示这是一个普通键。
15. `key_buf[2] = key0;`:将按下的键码存储在 `key_buf` 数组的第 3 个元素中,因为 HID 报文的前两个字节是保留位。
16. `blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE,HID_NORMAL_KB_REPORT_INPUT_DP_H, key_buf, 8);`:调用 Beken BLE Stack 提供的函数 `blc_gatt_pushHandleValueNotify`,将普通键报文发送给 BLE 连接的主机。
17. `else`:如果没有按键事件,则执行下面的代码块。
18. `key_not_released = 0;`:将 `key_not_released` 的值设为 0,表示键已经松开。
19. `if(key_type == CONSUMER_KEY)`:如果前一个按键是消费者键,则执行下面的代码块。
20. `u16 consumer_key = 0;`:将 `consumer_key` 的值设为 0。
21. `blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE,HID_CONSUME_REPORT_INPUT_DP_H, (u8 *)&consumer_key, 2);`:调用 Beken BLE Stack 提供的函数 `blc_gatt_pushHandleValueNotify`,发送一个空的消费者键报文。
22. `else if(key_type == KEYBOARD_KEY)`:如果前一个按键是普通键,则执行下面的代码块。
23. `key_buf[2] = 0;`:将 `key_buf` 数组的第 3 个元素设为 0,表示键已经松开。
24. `blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE,HID_NORMAL_KB_REPORT_INPUT_DP_H, key_buf, 8);`:调用 Beken BLE Stack 提供的函数 `blc_gatt_pushHandleValueNotify`,发送一个空的普通键报文。
public class Control_Player : MonoBehaviour { //前进速度 public float m_ForwardSpeeed = 7.0f; //动画组件 // private Animator m_Anim; //动画现在状态 //private AnimatorStateInfo m_CurrentBaseState; //动画状态参照 static int m_jumpState = Animator.StringToHash("Base Layer.jump"); static int m_slideState = Animator.StringToHash("Base Layer.slide"); //场景控制对象 Control_Scenes m_ControlScenes; //游戏结束 bool m_IsEnd = false; public int roadIndex; // Use this for initialization void Start() { roadIndex = 1; SetPos(); //m_Anim = GetComponent<Animator>(); m_ControlScenes = GameObject.Find("Control_Scenes").GetComponent<Control_Scenes>(); } // Update is called once per frame void Update() { MoveByDir(); }public float moveSpeed = 1; void MoveByDir() { float h = Input.GetAxis("Horizontal"); transform.position += new Vector3 (-m_ForwardSpeeed,0,h * moveSpeed) *Time.deltaTime ; //Change_PlayerZ(true); transform.position = new Vector3(transform.position.x, transform.position.y, Mathf.Clamp(transform.position.z, -16, -3.88f)); } void moveByRoad() { transform.position += Vector3.left * m_ForwardSpeeed * Time.deltaTime; if (Input.GetKeyDown(KeyCode.A)) { if (roadIndex > 1) { roadIndex -= 1; } } else if (Input.GetKeyDown(KeyCode.D)) { if (roadIndex < 3) { roadIndex += 1; } } SetPos(); } public void Change_PlayerZ(bool IsAD)
这是一个控制玩家移动的脚本,其中包括了通过方向键移动和通过道路移动两种方式。在通过方向键移动时,玩家会向前移动,同时可以通过左右箭头调整玩家的位置。在通过道路移动时,玩家会沿着道路向前移动,同时可以通过按下 A 或 D 键切换道路位置。函数 Change_PlayerZ(bool IsAD) 的具体实现需要看完整代码。