Example #1
0
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;
		}
	}
}
Example #2
0
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);
}
Example #3
0
	// 窗口的初始化
	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;
	}
Example #4
0
	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;
		}
	}