【TomoEngine】 第五讲 【MOBA制作日记一】 角色
来源:互联网 发布:美工刀片自动装盒机 编辑:程序博客网 时间:2024/04/29 12:36
用TomoEngine制作一款MOBA是近期的一个计划,从一个简单的场景开始,逐步丰富场景内容。
工程文件(VS2013)下载 工程bin 下载
场景从一个角色开始,作者制作了一个角色动画模型 功夫熊猫,看上去有点简陋,以后会一点点完善它。
正常运行结果如图:点击键盘 Z X C V 切换动画,点击 W A S D做简单移动
程序架构解析
01 main函数 App3DMoba类
#include "App3DMoba.h"void main(){App3DFramework* app = new App3DMoba_NS::App3DMoba;app->go();delete app;}
02 场景元素创建 Player
void App3DMoba::LoadRes(){LOGINFO("load_res thread begin");ResourceGroupManager::GetSingleton().InitialiseResourceGroup("Popular");m_pPlayer = new Player(m_pCurrentScene);m_pPlayer->SetupBody("Jack", "panda.meshml");m_pActiveCamera->SetAutoTracking(true,m_pPlayer->GetPlayerNode());m_pCurrentScene->SetSkyBox(true, "SpaceSkyBox", 2000.f);//BuildTerrain();LOGINFO("load_res thread end");}
void Player::SetupBody(const string& playerName,const string& meshName){m_humanNode = m_sceneMgr->GetRootSceneNode()->CreateChildSceneNode(playerName);m_humanEnt = m_sceneMgr->CreateEntity(playerName, meshName);m_humanEnt->SetAnimationState("front_walk");Vector3 pos = Vector3(0.f, 0.f, -400.f);m_humanNode->SetPosition(pos);m_humanNode->AttachObject(m_humanEnt);Quaternion quat;Vector3 xaxis(1.f, 0.f, 0.f);Vector3 yaxis(0.f, 1.f, 0.f);quat.FromAngleAxis(-PI / 2, xaxis);m_humanNode->SetQuaternion(quat);}
03 Player动画切换控制 (具体攻击行为相关的部分请期待下一讲)
bool Player::OnKeyReleased(const KeyEvent& arg){if (arg.key == KC_Z){AnimationState* m_pAnimState = m_humanEnt->GetAnimationState("idle");m_humanEnt->SetAnimationState(m_pAnimState);}else if(arg.key == KC_C){AnimationState* m_pAnimState = m_humanEnt->GetAnimationState("front_walk");m_humanEnt->SetAnimationState(m_pAnimState);}else if (arg.key == KC_V){AnimationState* m_pAnimState = m_humanEnt->GetAnimationState("attack");m_humanEnt->SetAnimationState(m_pAnimState);}m_BodyMove = false;return true;}bool Player::OnKeyPressed(const KeyEvent& arg){m_curKey = arg.key;m_BodyMove = true;return true;}void Player::Update(float frameTimeSinceLastFrame){if(m_Move){Vector3 dir = Vector3::UNIT_X;dir = m_Velocity*dir;m_attackNode->Translate(dir, Tomo::Node::TS_LOCAL);}if(m_BodyMove){float velocity = PI / 200.f;//LOGINFO(TOSTRING(m_humanNode->GetDerivedPosition()));if (m_curKey == KC_A){Vector3 dir = -Vector3::UNIT_X;dir = m_Velocity*dir;m_humanNode->Translate(dir);}else if (m_curKey == KC_D){Vector3 dir = Vector3::UNIT_X;dir = m_Velocity*dir;m_humanNode->Translate(dir);}else if (m_curKey == KC_W){Vector3 dir = -Vector3::UNIT_Z;dir = m_Velocity*dir;m_humanNode->Translate(dir);}else if (m_curKey == KC_S){Vector3 dir = Vector3::UNIT_Z;dir = m_Velocity*dir;m_humanNode->Translate(dir);}else if (m_curKey == KC_LEFT){if (m_humanNode){Quaternion quat;quat.FromAngleAxis(velocity, Vector3::UNIT_Y);m_humanNode->Rotate(quat);quat.FromAngleAxis(velocity, Vector3::UNIT_X);m_humanNode->Rotate(quat);}}else if (m_curKey == KC_RIGHT){if (m_humanNode){Quaternion quat;quat.FromAngleAxis(-velocity, Vector3::UNIT_Y);m_humanNode->Rotate(quat);quat.FromAngleAxis(-velocity, Vector3::UNIT_X);m_humanNode->Rotate(quat);}}}}
0 0
- 【TomoEngine】 第五讲 【MOBA制作日记一】 角色
- 【TomoEngine】 第七讲 【MOBA制作日记二】 角色攻击
- 【TomoEngine】 第十讲 【MOBA制作日记五】 角色技能响应
- 【TomoEngine】 第八讲 【MOBA制作日记三】 角色行走
- 【TomoEngine】 第十二讲 【MOBA制作日记七】 角色电击效果
- 【TomoEngine】 第十一讲 【MOBA制作日记六】 字体渲染
- 【TomoEngine】 第九讲 【MOBA制作日记四】 GLES2.0在iPhone5s真机上的纹理限制和GLSLES问题
- 【UE4】 第03讲 【MOBA制作日记】 FSocket联网及角色位置同步
- 【UE4】 第01讲 【MOBA制作日记】 角色攻击事件及发射物
- 【UE4】 第06讲 【MOBA制作日记】 碰撞事件响应
- 【UE4】 第02讲 【MOBA制作日记】 安卓打包
- 【UE4】 第05讲 【MOBA制作日记】 发射物方向调整
- 【UE4】 第07讲 【MOBA制作日记】 实现自定义的行走控件
- 【UE4】 第04讲 【MOBA制作日记】 隐藏新建工程自带的操作控件
- 【UE4】 第08讲 【MOBA制作日记】 实现全方位的行走
- 【UE4】 第09讲 【MOBA制作日记】 隐藏默认创建的DefaultPawn
- 【UE4】 第10讲 【MOBA制作日记】 Matinee相机过场动画
- 【UE4】 第11讲 【MOBA制作日记】 HTC Vive设备安装使用及手柄控制漫游
- 网页性能之HTML、CSS、JS
- 5个JavaScript经典面试题
- Java学习之——线程非安全单利模式到线程安全单利模式
- iOS——NSThread
- Myeclipse2015 隐藏jar包
- 【TomoEngine】 第五讲 【MOBA制作日记一】 角色
- C++作业6
- Fragment全解析系列(二):正确的使用姿势
- Phpcms v9搜索结果不全少内容的解决方法
- Internal Sorting Algorithms Part 2/2: Advanced Sorts
- sed 正则表达式的'转义问题
- 23种设计模式(10)--Flyweight模式
- c++第六次上机实验
- Java成长笔记——有关“包”