void CglWnd::updateBubblesF() { signed char xAxis, yAxis; int dxa,dya; //顶点受外力 GLfloat aacfx = 0, aacfy = 0; MzAccGetY(&xAxis); dxa = xAxis - m_LastXAxis; if (abs(dxa) > MAX_ACC_F) dxa = getSng(dxa)*MAX_ACC_F; m_LastXAxis = xAxis; MzAccGetX(&yAxis); dya = yAxis - m_LastYAxis; if (abs(dya) > MAX_ACC_F) dxa = getSng(dya)*MAX_ACC_F; m_LastYAxis = yAxis; if (abs(dxa) > MIN_ACC_F) aacfx = dxa * ACC_F_RATE; if (abs(dya) > MIN_ACC_F) aacfy = dya * ACC_F_RATE; for (int i = 0; i < MAX_BUBBLES; i++) { if (m_bubbles[i].eState == ST_NORMAL) { if (m_bubbles[i].bSelect) continue; if (aacfx != 0) m_bubbles[i].fx = aacfx; if (aacfy != 0) m_bubbles[i].fy = aacfy; } } }
void CglWnd::setActive( bool bActive ) { if (m_bActive == bActive) return; m_bActive = bActive; //printf("Debug: SetActive %s\n", bActive ? "true" : "false"); //x,y是反的,因为m8工作在正旋90的状态 MzAccGetX(&m_LastYAxis); MzAccGetY(&m_LastXAxis); }
// 窗口的初始化 virtual BOOL OnInitDialog() { // 必须先调用基类的初始化 if (!CMzWndEx::OnInitDialog()) { return FALSE; } //开启acc功能 MzAccOpen(); //获取XYZ轴加速度值 1 == 18mg, 56 == 1g //注意以下几点, //1 要先调用MzAccGetXYZ,再调用 //MzAccGetX/MzAccGetY/MzAccGetZ后,才能获得正确的值 //2 获得的加速度值范围是-55~+55, 绝对值起大,加速度越大. // MzAccGetXYZ(&m_XAxis, &m_YAxis, &m_ZAxis); MzAccGetX(&m_XAxis); //获得Y轴加速度 MzAccGetY(&m_YAxis); MzAccGetZ(&m_ZAxis); RECT rRect = MzGetWorkArea(); m_XButton.SetPos(0, 0, 150, 100); AddUiWin(&m_XButton); m_nMaxXPos = RECT_WIDTH(rRect) - m_XButton.GetWidth(); m_nMinXPos = 0; m_nMaxYPos = RECT_HEIGHT(rRect) - m_XButton.GetHeight(); m_nMinYPos = 0; SetTimer(m_hWnd, 10, 10, NULL); //设置初始的速度和位置 m_XPos = m_nMinXPos; m_YPos = m_nMinYPos; m_YSpeed = 0; m_XSpeed = 0; m_nCount = 0; return TRUE; }
virtual void OnTimer(UINT_PTR nIDEvent) { switch(nIDEvent) { case 10: { //获得X轴加速度 MzAccGetX(&m_XAxis); //获得Y轴加速度 MzAccGetY(&m_YAxis); m_nCount++; if ( (m_nCount%10) == 0) { m_XSpeed += 2; m_YSpeed += 2; } if (IsXDirectionChange(m_XAxis)) { m_YSpeed = 0; } if (IsYDirectionChange(m_YAxis)) { m_XSpeed = 0; } //计算控件的Y位置,注意用的是加X轴的坐标 if (m_XAxis < 0) { m_XAxis = -m_XAxis; m_YPos = m_YPos + m_YSpeed + m_XAxis; } else { m_YPos = m_YPos - m_YSpeed - m_XAxis; } if (m_YPos < m_nMinYPos)//最底端 { m_YSpeed = 0;//注意这里要重置,防止溢出 m_YPos = m_nMinYPos; } if (m_YPos > m_nMaxYPos)//滑动到最顶端 { m_YPos = m_nMaxYPos; m_YSpeed = 0; //SetTimer(m_hWnd, 11, 10, NULL); } //计算控件的X位置 if (m_YAxis < 0) { m_YAxis = - m_YAxis; m_XPos = m_XPos - m_XSpeed - m_YAxis; } else { m_XPos = m_XPos + m_XSpeed + m_YAxis; } if (m_XPos < m_nMinXPos) { m_XSpeed = 0; m_XPos = m_nMinXPos; } if (m_XPos > m_nMaxXPos) { m_XSpeed = 0; m_XPos = m_nMaxXPos; } //重新设定控件的位置 m_XButton.SetPos(m_XPos, m_YPos, 150, 100); Invalidate(); //UpdateWindow(); } break; default: break; } }