fSpeedX= 15.f;//向右的时候X方向的速度为正值 break;
}
4) 调用函数设置鱼的速度:
m_pMyFish->SetSpriteLinearVelocity(fSpeedX, fSpeedY);
5) 在Main.cpp中OnKeyDown函数里面添加对该自定义函数的调用:
g_GameMain.OnKeyDown(iKey,bAltPress,bShiftPress,bCtrlPress);
5、 处理键盘释放消息需要添加一个自定义函数OnKeyUp:
1) 在LessonX.h中添加该函数的声明: void OnKeyUp( const int iKey );
2) 在LessonX.cpp中添加该函数的定义:
void CGameMain::OnKeyUp( const int iKey ) { }
3) 判断按下的按键键值并设置速度值为0,在上面的函数里面添加如下代码:
float fSpeedX, fSpeedY; switch(iKey) {
case KEY_W: case KEY_A: case KEY_S: case KEY_D: fSpeedX = 0.f; fSpeedY = 0.f; } 4) 调用函数设置鱼的速度:
m_pMyFish->SetSpriteLinearVelocity(fSpeedX, fSpeedY);
5) 在Main.cpp中OnKeyUp函数里面添加对该自定义函数的调用: g_GameMain.OnKeyUp(iKey);
实验七键盘控制鱼的图片翻转
【实验内容】
步骤、响应系统按键消息使鱼游动,同时如果往反方向游则翻转鱼的图片
【实验思路】
定义四个变量m_fSpeedLeft、m_fSpeedRight、m_fSpeedTop、m_fSpeedBottom表示鱼往四个方向游动的速度,因此只要控制这四个变量的正负就可以控制鱼的游动了,同时判断按键按下了反方向的键值时就翻转鱼的图。例如当按下A使鱼往左游动,如果此时按下D则将鱼翻转往右游。
【实验指导】
1、 在LessonX.h中添加如下变量声明:
float m_fSpeedLeft ;// 鱼4个方向的速度 float m_fSpeedRight ;
float m_fSpeedTop ; float m_fSpeedBottom ;
2、 在LessonX.cpp中的构造函数里面添加以上变量的初始化代码:
m_fSpeedBottom= 0.f; m_fSpeedLeft= 0.f; m_fSpeedRight= 0.f; m_fSpeedTop= 0.f;
3、 判断按下的键值,分情况处理与的速度,在OnKeyDown中将原来的代码注释掉,
同时添加以下代码:
1) 根据不同键值设置鱼不同的速度:
switch(iKey) {
case KEY_W: m_fSpeedTop = -10.f; break; case KEY_A: m_fSpeedLeft = -15.f; break; case KEY_S: m_fSpeedBottom = 10.f; break; case KEY_D: m_fSpeedRight = 15.f; break; }
2) 因为每次键值转换的时候鱼会停止下来,即速度为0,此时根据按键重新给鱼赋新的速度,所以此时只要判断m_fSpeedLeft + m_fSpeedRight与0的大小就可以决定是否翻转图片了。
if((m_fSpeedLeft + m_fSpeedRight) > 0) m_pMyFish->SetSpriteFlipX( false); else if((m_fSpeedLeft + m_fSpeedRight) < 0) m_pMyFish->SetSpriteFlipX( true); 3) 最后给鱼设置速度:
m_pMyFish->SetSpriteLinearVelocity( m_fSpeedLeft + m_fSpeedRight, m_fSpeedTop + m_fSpeedBottom);
4、 判断释放的键值,将鱼所有方向的速度设置为0,在OnKeyUp中将原来的代码注释
掉,同时添加以下代码:
1) 将鱼所有方向速度设置为0
switch(iKey) {
case KEY_W: m_fSpeedTop = 0.f; break;
}
case KEY_A: m_fSpeedLeft = 0.f; break; case KEY_S: m_fSpeedBottom = 0.f; break; case KEY_D: m_fSpeedRight = 0.f; break;
2) 由于玩家可能释放了非WASD中的一个键,因此这里同样需要再次判断m_fSpeedLeft + m_fSpeedRight的值;来决定是否翻转鱼的图片
if((m_fSpeedLeft + m_fSpeedRight) > 0) m_pMyFish->SetSpriteFlipX( false); else if((m_fSpeedLeft + m_fSpeedRight) < 0) m_pMyFish->SetSpriteFlipX( true); 3) 最后给鱼设置速度:
m_pMyFish->SetSpriteLinearVelocity( m_fSpeedTop + m_fSpeedBottom);
m_fSpeedLeft
+
m_fSpeedRight,
实验八封装键盘控制鱼游动的代码
【实验内容】
步骤、将键盘控制鱼游动的动作独立写成一个函数
【实验思路】
类中多个函数中处理了键盘控制鱼游动的代码,因此可以将其写成一个函数供其他函数调用。
【实验指导】
1、 添加一个自定义函数Swimming处理键盘控制鱼游动的动作。在LessonX.h中添加该
函数的声明: void Swimming(); 2、 在LessonX.cpp中添加该函数的定义: void CGameMain::Swimming() { }
3、 最后处理键盘判断鱼是否翻转以及赋给鱼速度的动作,在上面的定义中添加如下代
码: if((m_fSpeedLeft + m_fSpeedRight) > 0)
m_pMyFish->SetSpriteFlipX(false);
else if((m_fSpeedLeft + m_fSpeedRight) < 0)
m_pMyFish->SetSpriteFlipX(true);
m_pMyFish->SetSpriteLinearVelocity( m_fSpeedLeft + m_fSpeedRight, m_fSpeedTop +
m_fSpeedBottom);
4、 最后将OnKeyDown和OnKeyUp函数中的如下代码注释并添加Swimming函数的调
用代码:
1) 注释掉以下代码:
if((m_fSpeedLeft + m_fSpeedRight) > 0) m_pMyFish->SetSpriteFlipX(false); else if((m_fSpeedLeft + m_fSpeedRight) < 0) m_pMyFish->SetSpriteFlipX(true);
m_pMyFish->SetSpriteLinearVelocity( m_fSpeedTop + m_fSpeedBottom); 2) 添加Swimming函数调用
Swimming(); 至此,本实验结束。
m_fSpeedLeft + m_fSpeedRight,