#include "..\\..\\include\\游戏过程\\Scene.h"
void Scene :: SoundJudge()
{
static bool modified1 = false;
static bool modified2 = false;
int Dimen_id = background -> GetPicNum();
if(scene_id == 3)
{
if(Dimen_id == 4)
{
if(!modified1)
{
WaterEffect = ResourceManager ::getEffect("WaterEffect");
WaterChannel = hge -> Effect_PlayEx(WaterEffect, 100, 0, 1, true);
modified1 = true;
}
else
hge -> Channel_Resume(WaterChannel);
}
else
hge -> Channel_Pause(WaterChannel);
}
else
{
if((!modified2) && (scene_id == 4))
{
hge -> Channel_Stop(WaterChannel);
hge -> Effect_Free(WaterEffect);
modified2 = true;
}
}
//播放背景音乐
if(!(hge->Channel_IsPlaying(SceneBgMusic)) )
SceneBgStream = hge ->Stream_Play(SceneBgMusic, true, 100);
}
bool FrameFunc_scene()
{
float dt = hge -> Timer_GetDelta();
static float time = 0;
if( time <= 5.000 )
{
time += dt;
HDMenu::GetInstance( Account::getLevelId() )->ResetGuan( Account::getLevelId() );
gui -> Enter();
if( Account::getLevelId() == 2 )
{
time = 5.1;
}
}
else
{
HDMenu::GetInstance(Account::getLevelId())->spr_before = NULL;
gui -> SetNavMode( HGEGUI_NONAVKEYS );
////此处暂定为按“E”键切换场景“scene”
int level_id = Account :: getLevelId();
//侧边栏的逻辑判断
SideMenuLogic();
if(hge -> Input_GetKeyState(HGEK_E))
{
Account :: setLevelId(++level_id);
time = 0;
HDMenu::GetInstance( Account::getLevelId())->SetCask();
if( Account :: getLevelId() == 3 )
gui ->DelCtrl(2);
if( Account :: getLevelId() == 4 )
{
gui ->DelCtrl(2);
gui ->DelCtrl(3);
gui ->DelCtrl(4);
}
}
//暂时将此作为开启道具的方法
//开启升降梯的钥匙:
if(hge -> Input_GetKeyState(HGEK_K))
Account :: getAccount()->getProperty(_KEY) -> setUsing(true);
//使用木桶
if(hge -> Input_GetKeyState(HGEK_C))
Account :: getAccount()->getProperty(_CASK) -> setUsing(true);
//使用可移动的梯子
if(hge -> Input_GetKeyState(HGEK_M))
Account :: getAccount()->getProperty(_MOBILE_LADDER) -> setUsing(true);
//使用杀虫剂
if(hge -> Input_GetKeyState(HGEK_P))
Account :: getAccount()->getProperty(_PESTICIDE) -> setUsing(true);
//通过单件模式取得场景、小人的实例
Scene* SceneNow = Scene :: getScene(level_id);
Player* thePlayer = Player :: getPlayer(level_id);
//鼠标手势的检测,依托于当前场景的调用
SceneNow -> TransformJudge(thePlayer);
//取得当前的维度
Dimensionality* DimenNow = SceneNow -> getDimenNow();
//声音效果的函数
SceneNow -> SoundJudge();
//小人的输入检测
thePlayer -> KeyboardInput();
//小人撞墙检测
HitMap(thePlayer, DimenNow -> getMap());
level_id = Account :: getLevelId();
//如果当前没有进行维度转换,则正常进行逻辑处理
if (SceneNow -> getState() == NORMAL)
{
//此处是当前维度的所有可用机关的逻辑调用
GameState gs = DimenNow -> DoohLogic(thePlayer);
switch(gs)
{
case SUCCESS :
//如果过关了,就将关卡数加1
Account :: setLevelId(++level_id);
time = 0;
HDMenu::GetInstance( Account::getLevelId())->SetCask();
if( Account :: getLevelId() == 3 )
gui ->DelCtrl(2);
if( Account :: getLevelId() == 4 )
{
gui ->DelCtrl(2);
gui ->DelCtrl(3);
gui ->DelCtrl(4);
}
break;
case DEAD :
//如果死了,切换渲染函数,之后等三秒,重新开始
hge -> System_SetState(HGE_FRAMEFUNC, FrameFunc_dead);
hge -> System_SetState(HGE_RENDERFUNC, RenderFunc_dead);
break;
case OVER :
hge -> System_SetState(HGE_FRAMEFUNC, FrameFunc_over);
hge -> System_SetState(HGE_RENDERFUNC, RenderFunc_over);
break;
case GOON :
default :
break;
}
//道具的逻辑判断
Account :: getAccount() -> PropertyLogic(thePlayer, DimenNow->getMap());
}
//根据状态的不同,更新小人的位置
thePlayer -> UpdatePos(dt);
}
return false;
}
bool FrameFunc_dead()
{
static float time = 0;
if(++time >= 3.0f)
{
int id_now = Account ::getLevelId();
int id = id_now - 1;
Scene::getScene(id_now) ->setSceneID(id);
Scene::getScene(id_now);
Scene::getScene(id_now)->setState(NORMAL);
Player :: getPlayer(id_now) -> setLevelID(id);
Player :: getPlayer(id_now);
hge -> System_SetState(HGE_FRAMEFUNC, FrameFunc_scene);
hge -> System_SetState(HGE_RENDERFUNC, RenderFunc_scene);
}
return false;
}
bool RenderFunc_dead()
{
hge->Gfx_BeginScene();
hge->Gfx_Clear(0);
Scene ::getScene() ->getDeadSprite() ->Render(500, 400);
hge->Gfx_EndScene();
return false;
}
bool FrameFunc_over()
{
static float time = 0;
if((time += 0.02) >= 5.0)
{
Scene ::getScene(Account ::getLevelId()) ->deleteBook();
hge->System_SetState(HGE_RENDERFUNC, RenderFunc_menu);
hge->System_SetState(HGE_FRAMEFUNC, FrameFunc_menu);
}
return false;
}
bool RenderFunc_over()
{
hge->Gfx_BeginScene();
hge->Gfx_Clear(0);
hgeSprite* book = Scene :: getScene(Account :: getLevelId()) ->getBook();
if(book != NULL)
book -> Render(500, 400);
hge->Gfx_EndScene();
return false;
}
char* get(int x ,int y, Dimensionality* DimenNow)
{
char* s = NULL;
DoohSpecies species = DimenNow -> MapSpecies(x, y);
if(species == AIR)
s = "AIR";
else if(species == ROCK)
s = "ROCK";
else if(species == SOFTLAND)
s = "SOFTLAND";
else if(species == LADDER)
s = "LADDER";
else if(species == SEED)
s = "Seed";
return s;
}
void SideMenuLogic()
{
float dt = hge -> Timer_GetDelta();
if( dt < 0.02 )
{
Sleep( 20 - ( int )( 1000 * dt ) );
}
static float t = 0.0f;
static int lastid = 0;
int id;
id = gui -> Update( dt );
if( id == -1 )
{
switch( lastid )
{
case 1:
//返回主菜单
hge->System_SetState(HGE_RENDERFUNC, RenderFunc_menu);
hge->System_SetState(HGE_FRAMEFUNC, FrameFunc_menu);
hge->Channel_Pause(SceneBgStream);
//此处再加释放GUI资源的相关函数
gui ->DelCtrl(1);
gui ->DelCtrl(2);
gui ->DelCtrl(3);
gui ->DelCtrl(4);
gui ->DelCtrl(5);
gui ->DelCtrl(7);
HDMenu::GetInstance(Account::getLevelId())->numberOfGUI = 0;
break;
case 2:
/*HDMenu::GetInstance( Account::getLevelId() ) -> DelItem( 2 );*/
break;
case 3:
//制作人员名单,显示
/*HDMenu::GetInstance( Account::getLevelId() ) -> DelItem( 3 );*/
break;
case 4:
break;
default :
gui -> Enter();
break;
}
}
else if( id == 2 )
{
HDMenu::GetInstance( Account::getLevelId() ) -> DelItem( id );//
gui -> ShowCtrl( id, false );
}
else if( id == 1 )
{
//返回主菜单
hge->System_SetState(HGE_RENDERFUNC, RenderFunc_menu);
hge->System_SetState(HGE_FRAMEFUNC, FrameFunc_menu);
//此处再加释放GUI资源的相关函数
gui ->DelCtrl(1);
gui ->DelCtrl(2);
gui ->DelCtrl(3);
gui ->DelCtrl(4);
gui ->DelCtrl(5);
gui ->DelCtrl(6);
gui ->DelCtrl(7);
HDMenu::GetInstance(Account::getLevelId())->numberOfGUI = 0;
}
else if( id == 3 )
{
HDMenu::GetInstance( Account::getLevelId() ) -> DelItem( id );
gui -> ShowCtrl( id, false );
}
else if( id == 4 )
{
HDMenu::GetInstance( Account::getLevelId() ) -> DelItem( id );
gui -> ShowCtrl( id, false );
}
else if( id == 5 )
{
HDMenu::GetInstance( Account::getLevelId() ) -> DelItem( id );
gui -> ShowCtrl( id, false );
}
//else if( id )
//{
// //lastid = id;
// //gui -> Leave();
//}
}
bool RenderFunc_scene()
{
unsigned int level_id = Account :: getLevelId();
Scene* SceneNow = Scene :: getScene(level_id);
Player* thePlayer = Player :: getPlayer(level_id);
float x = thePlayer -> getX();
float y = thePlayer -> getY();
hge->Gfx_BeginScene();
hge->Gfx_Clear(0);
//场景地图的渲染
SceneNow->background->BackGroundRender();
//维度的渲染
if(SceneNow -> get
li19890328
- 粉丝: 0
- 资源: 5
最新资源
- 滑膜控制下的差动制动防侧翻稳定性精准控制 通过上层滑膜控制产生横摆力矩,结合下层制动力矩分配策略,实现车辆防侧翻稳定控制 联合仿真验证其有效性,资料完备 ,基于滑膜控制的差动制动防侧翻稳定性控制,上
- "移相全桥电源系统仿真建模:全面解析Matlab Simulink仿真与参数设计学习资料集",2KW移相全桥整机Matlab Simulink仿真模型电源学习资料,报告mathcad参数设计,模型搭建
- 基于风光不确定性及信息间隙决策理论的碳捕集综合能源系统鲁棒调度优化策略研究,考虑风光不确定性和IGDT信息间隙决策的综合能源系统优化调度 参考文献:基于信息间隙决策理论的碳捕集电厂调度 非完全复献
- CRUISE纯电动车仿真模型与Simulink DLL联合仿真:电制动优先能量回收策略详解与搭建指南(附详细文档),CRUISE纯电动车仿真模型,simulink DLL联合仿真,实现电制动优先能量回
- 车辆紧急防避撞AEB控制算法实现原理与仿真步骤详解:制动模型、模糊控制、逆动力学及阻力计算,车辆紧急防避撞AEB控制,模型包含建立驾驶员制动模型来模拟制动过程,同时加入模糊控制实现期望减速度的计算,加
- 基于LQR算法的横摆角速度跟踪控制技术研究:四轮独立驱动与动力学模型应用,四轮独立驱动横摆角速度控制,LQR 基于LQR算法的 基于二自由度动力学方程,通过主动转向afs和直接横摆力矩dyc实现的横摆
- 西门子S7-1200与S7-1500的动态加密功能块程序管理:设定停机运行时间,专防不守信客户实用指南及发货清单 ,西门子S7-1200 1500动态加密功能块程序,可以设置停机运行时间,时间到达设备
- MATLAB环境下深度学习预测NASA涡扇发动机退化仿真数据集剩余寿命方法,MATLAB环境下一种基于深度学习的NASA涡扇发动机 化仿真数据集剩余使用寿命预测方法 算法运行环境为matlab r2
- 异步电机矢量控制的Simulink模型设计与实现,异步电机矢量控制simulink模型 ,核心关键词:异步电机;矢量控制;Simulink模型;控制策略;仿真模型;电力传动系统 ,"异步电机矢量控制的
- 基于动态窗口算法的AGV仿真避障:起点至目标点的实时路径规划与障碍物处理,基于动态窗口算法的AGV仿真避障 可设置起点目标点,设置地图,设置移动障碍物起始点目标点,未知静态障碍物 动态窗口方法(Dyn
- 基于三菱PLC的定长送料程序:触摸屏操作,伺服与步进驱动,精准点动与定位控制,定长送料程序,三菱PLC加显触摸屏 伺服或者步进都可以 点动 相对定位 绝对定位 ,定长送料程序; 三菱PLC; 显触摸
- 基于A*算法的三维路径规划算法在无人机中的MATLAB实现,基于A* 算法的无人机三维路径规划算法,MATLAB编程实现 ,核心关键词:A*算法; 无人机; 三维路径规划; MATLAB编程实现
- PID与LQR主动悬架模型对比:汽车平顺性仿真及源代码详解,【PID和LQR主动悬架模型对比】 分别建立了PID控制和LQR控制的的主动悬架模型,比较两种控制器的控制效果 以悬架主动力
- 一维光子晶体态密度案例解析与探讨:理论与实践结合的研究实践,一维光子晶体态密度案例 ,一维光子晶体; 态密度; 案例; 实验结果; 理论分析,一维光子晶体态密度案例:光子态密度的研究与应用
- 级联H桥并网系统性能测试:精准电流控制下的电压稳定性与畸变率优化,级联H桥并网 10KV 每相12个H桥,单个H桥直流电压为850V,采用电流闭环控制 为了测试系统控制性能效果,在1s时,控制输出
- 级联H桥三相逆变器:离散化仿真下的开闭环控制策略与电压电流双闭环控制实现,级联H桥 离网三相逆变器采用级联H桥多电平拓扑,每个H桥直流测电压为24V,5个H桥串联(电压,H桥个数可以自己调加),系统
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈