urho3d的helloworld合并成单个文件(存粹copy)
来源:互联网 发布:网络直播间策划方案 编辑:程序博客网 时间:2024/06/05 08:20
这个嘛存粹是抄一下,省的每次还要继承啊,太多东西,不好去修改,一个文件做修改方便点,留这样,以备后面copy用
#pragma once#include <Urho3D/Engine/Application.h>#include <Urho3D/Input/Input.h>#include <Urho3D/Engine/Application.h>#include <Urho3D/Graphics/Camera.h>#include <Urho3D/Engine/Console.h>#include <Urho3D/UI/Cursor.h>#include <Urho3D/Engine/DebugHud.h>#include <Urho3D/Engine/Engine.h>#include <Urho3D/IO/FileSystem.h>#include <Urho3D/Graphics/Graphics.h>#include <Urho3D/Input/Input.h>#include <Urho3D/Input/InputEvents.h>#include <Urho3D/Graphics/Renderer.h>#include <Urho3D/Resource/ResourceCache.h>#include <Urho3D/Scene/Scene.h>#include <Urho3D/Scene/SceneEvents.h>#include <Urho3D/UI/Sprite.h>#include <Urho3D/Graphics/Texture2D.h>#include <Urho3D/Core/Timer.h>#include <Urho3D/UI/UI.h>#include <Urho3D/Resource/XMLFile.h>#include <Urho3D/IO/Log.h>#include <Urho3D/Core/CoreEvents.h>#include <Urho3D/Core/ProcessUtils.h>#include <Urho3D/Input/Input.h>#include <Urho3D/UI/Font.h>#include <Urho3D/UI/Text.h>#include <Urho3D/UI/UI.h>#include <Urho3D/DebugNew.h>namespace Urho3D{ class Node; class Scene; class Sprite;}using namespace Urho3D;const float TOUCH_SENSITIVITY = 2.0f;class Game : public Application{ URHO3D_OBJECT(Game, Application);public: Game(Context *context); virtual void Setup(); virtual void Start(); virtual void Stop();protected: virtual String GetScreenJoystickPatchString() const { return String::EMPTY; } void InitTouchInput(); void InitMouseMode(MouseMode mode); void SetLogoVisible(bool enable); SharedPtr<Sprite> logoSprite_; SharedPtr<Scene> scene_; SharedPtr<Node> cameraNode_; float yaw_; float pitch_; bool touchEnabled_; MouseMode useMouseMode_;private: void HandleMouseModeRequest(StringHash eventType, VariantMap& eventData); void HandleMouseModeChange(StringHash eventType, VariantMap& eventData); void HandleKeyDown(StringHash eventType, VariantMap& eventData); void HandleKeyUp(StringHash eventType, VariantMap& eventData); void HandleSceneUpdate(StringHash eventType, VariantMap& eventData); void HandleTouchBegin(StringHash eventType, VariantMap& eventData); void HandleUpdate(StringHash eventType, VariantMap& eventData); unsigned screenJoystickIndex_; unsigned screenJoystickSettingsIndex_; bool paused_;};URHO3D_DEFINE_APPLICATION_MAIN(Game)Game::Game(Context* context) :Application(context),yaw_(0.0f),pitch_(0.0f),touchEnabled_(false),screenJoystickIndex_(M_MAX_UNSIGNED),screenJoystickSettingsIndex_(M_MAX_UNSIGNED),paused_(false),useMouseMode_(MM_ABSOLUTE){}void Game::Setup(){ engineParameters_["WindowTitle"] = GetTypeName(); engineParameters_["LogName"] = GetSubsystem<FileSystem>()->GetAppPreferencesDir("urho3d", "logs") + GetTypeName() + ".log"; engineParameters_["FullScreen"] = false; engineParameters_["Headless"] = false; engineParameters_["Sound"] = false; if (!engineParameters_.Contains("ResourcePrefixPaths")) engineParameters_["ResourcePrefixPaths"] = ";../share/Resources;../share/Urho3D/Resources";}void Game::Start(){ if (GetPlatform() == "Android" || GetPlatform() == "iOS") InitTouchInput(); else if (GetSubsystem<Input>()->GetNumJoysticks() == 0) SubscribeToEvent(E_TOUCHBEGIN, URHO3D_HANDLER(Game, HandleTouchBegin)); ResourceCache* cache = GetSubsystem<ResourceCache>(); Texture2D* logoTexture = cache->GetResource<Texture2D>("Textures/LogoLarge.png"); if (!logoTexture) return; UI* ui = GetSubsystem<UI>(); logoSprite_ = ui->GetRoot()->CreateChild<Sprite>(); logoSprite_->SetTexture(logoTexture); int textureWidth = logoTexture->GetWidth(); int textureHeight = logoTexture->GetHeight(); logoSprite_->SetScale(256.0f / textureWidth); logoSprite_->SetSize(textureWidth, textureHeight); logoSprite_->SetHotSpot(0, textureHeight); logoSprite_->SetAlignment(HA_LEFT, VA_BOTTOM); logoSprite_->SetOpacity(0.75f); logoSprite_->SetPriority(-100); Graphics* graphics = GetSubsystem<Graphics>(); Image* icon = cache->GetResource<Image>("Textures/UrhoIcon.png"); graphics->SetWindowIcon(icon); graphics->SetWindowTitle("Urho3D Game"); XMLFile* xmlFile = cache->GetResource<XMLFile>("UI/DefaultStyle.xml"); Console* console = engine_->CreateConsole(); console->SetDefaultStyle(xmlFile); console->GetBackground()->SetOpacity(0.8f); DebugHud* debugHud = engine_->CreateDebugHud(); debugHud->SetDefaultStyle(xmlFile); SubscribeToEvent(E_KEYDOWN, URHO3D_HANDLER(Game, HandleKeyDown)); SubscribeToEvent(E_KEYUP, URHO3D_HANDLER(Game, HandleKeyUp)); SubscribeToEvent(E_SCENEUPDATE, URHO3D_HANDLER(Game, HandleSceneUpdate)); //======================================================================== // hello world SharedPtr<Text> helloText(new Text(context_)); helloText->SetText("Hello World from Urho3D!"); helloText->SetFont(cache->GetResource<Font>("Fonts/Anonymous Pro.ttf"), 30); helloText->SetColor(Color(0.0f, 1.0f, 0.0f)); helloText->SetHorizontalAlignment(HA_CENTER); helloText->SetVerticalAlignment(VA_CENTER); ui->GetRoot()->AddChild(helloText); //======================================================================== SubscribeToEvent(E_UPDATE, URHO3D_HANDLER(Game, HandleUpdate)); InitMouseMode(MM_FREE);}void Game::HandleUpdate(StringHash eventType, VariantMap& eventData){}void Game::Stop(){ engine_->DumpResources(true);}void Game::InitTouchInput(){ touchEnabled_ = true; ResourceCache* cache = GetSubsystem<ResourceCache>(); Input* input = GetSubsystem<Input>(); XMLFile* layout = cache->GetResource<XMLFile>("UI/ScreenJoystick_Simple.xml"); const String& patchString = GetScreenJoystickPatchString(); if (!patchString.Empty()) { SharedPtr<XMLFile> patchFile(new XMLFile(context_)); if (patchFile->FromString(patchString)) layout->Patch(patchFile); } screenJoystickIndex_ = input->AddScreenJoystick(layout, cache->GetResource<XMLFile>("UI/DefaultStyle.xml")); input->SetScreenJoystickVisible(screenJoystickSettingsIndex_, true);}void Game::InitMouseMode(MouseMode mode){ useMouseMode_ = mode; Input* input = GetSubsystem<Input>(); if (GetPlatform() != "Web") { if (useMouseMode_ == MM_FREE) input->SetMouseVisible(true); Console* console = GetSubsystem<Console>(); if (useMouseMode_ != MM_ABSOLUTE) { input->SetMouseMode(useMouseMode_); if (console && console->IsVisible()) input->SetMouseMode(MM_ABSOLUTE, true); } } else { input->SetMouseVisible(true); SubscribeToEvent(E_MOUSEBUTTONDOWN, URHO3D_HANDLER(Game, HandleMouseModeRequest)); SubscribeToEvent(E_MOUSEMODECHANGED, URHO3D_HANDLER(Game, HandleMouseModeChange)); }}void Game::SetLogoVisible(bool enable){ if (logoSprite_) logoSprite_->SetVisible(enable);}void Game::HandleKeyUp(StringHash eventType, VariantMap& eventData){ using namespace KeyUp; int key = eventData[P_KEY].GetInt(); if (key == KEY_ESCAPE) { Console* console = GetSubsystem<Console>(); if (console->IsVisible()) console->SetVisible(false); else { if (GetPlatform() == "Web") { GetSubsystem<Input>()->SetMouseVisible(true); if (useMouseMode_ != MM_ABSOLUTE) GetSubsystem<Input>()->SetMouseMode(MM_FREE); } else engine_->Exit(); } }}void Game::HandleKeyDown(StringHash eventType, VariantMap& eventData){ using namespace KeyDown; int key = eventData[P_KEY].GetInt(); if (key == KEY_F1) GetSubsystem<Console>()->Toggle(); else if (key == KEY_F2) GetSubsystem<DebugHud>()->ToggleAll(); else if (!GetSubsystem<UI>()->GetFocusElement()) { Renderer* renderer = GetSubsystem<Renderer>(); if (key == KEY_SELECT && touchEnabled_) { paused_ = !paused_; Input* input = GetSubsystem<Input>(); if (screenJoystickSettingsIndex_ == M_MAX_UNSIGNED) { ResourceCache* cache = GetSubsystem<ResourceCache>(); screenJoystickSettingsIndex_ = input->AddScreenJoystick(cache->GetResource<XMLFile>("UI/ScreenJoystickSettings_Samples.xml"), cache->GetResource<XMLFile>("UI/DefaultStyle.xml")); } else input->SetScreenJoystickVisible(screenJoystickSettingsIndex_, paused_); } else if (key == '1') { int quality = renderer->GetTextureQuality(); ++quality; if (quality > QUALITY_HIGH) quality = QUALITY_LOW; renderer->SetTextureQuality(quality); } else if (key == '2') { int quality = renderer->GetMaterialQuality(); ++quality; if (quality > QUALITY_HIGH) quality = QUALITY_LOW; renderer->SetMaterialQuality(quality); } else if (key == '3') renderer->SetSpecularLighting(!renderer->GetSpecularLighting()); else if (key == '4') renderer->SetDrawShadows(!renderer->GetDrawShadows()); else if (key == '5') { int shadowMapSize = renderer->GetShadowMapSize(); shadowMapSize *= 2; if (shadowMapSize > 2048) shadowMapSize = 512; renderer->SetShadowMapSize(shadowMapSize); } else if (key == '6') { ShadowQuality quality = renderer->GetShadowQuality(); quality = (ShadowQuality)(quality + 1); if (quality > SHADOWQUALITY_BLUR_VSM) quality = SHADOWQUALITY_SIMPLE_16BIT; renderer->SetShadowQuality(quality); } else if (key == '7') { bool occlusion = renderer->GetMaxOccluderTriangles() > 0; occlusion = !occlusion; renderer->SetMaxOccluderTriangles(occlusion ? 5000 : 0); } else if (key == '8') renderer->SetDynamicInstancing(!renderer->GetDynamicInstancing()); else if (key == '9') { Graphics* graphics = GetSubsystem<Graphics>(); Image screenshot(context_); graphics->TakeScreenShot(screenshot); screenshot.SavePNG(GetSubsystem<FileSystem>()->GetProgramDir() + "Data/Screenshot_" + Time::GetTimeStamp().Replaced(':', '_').Replaced('.', '_').Replaced(' ', '_') + ".png"); } }}void Game::HandleSceneUpdate(StringHash eventType, VariantMap& eventData){ if (touchEnabled_ && cameraNode_) { Input* input = GetSubsystem<Input>(); for (unsigned i = 0; i < input->GetNumTouches(); ++i) { TouchState* state = input->GetTouch(i); if (!state->touchedElement_) // Touch on empty space { if (state->delta_.x_ || state->delta_.y_) { Camera* camera = cameraNode_->GetComponent<Camera>(); if (!camera) return; Graphics* graphics = GetSubsystem<Graphics>(); yaw_ += TOUCH_SENSITIVITY * camera->GetFov() / graphics->GetHeight() * state->delta_.x_; pitch_ += TOUCH_SENSITIVITY * camera->GetFov() / graphics->GetHeight() * state->delta_.y_; cameraNode_->SetRotation(Quaternion(pitch_, yaw_, 0.0f)); } else { Cursor* cursor = GetSubsystem<UI>()->GetCursor(); if (cursor && cursor->IsVisible()) cursor->SetPosition(state->position_); } } } }}void Game::HandleTouchBegin(StringHash eventType, VariantMap& eventData){ InitTouchInput(); UnsubscribeFromEvent("TouchBegin");}void Game::HandleMouseModeRequest(StringHash eventType, VariantMap& eventData){ Console* console = GetSubsystem<Console>(); if (console && console->IsVisible()) return; Input* input = GetSubsystem<Input>(); if (useMouseMode_ == MM_ABSOLUTE) input->SetMouseVisible(false); else if (useMouseMode_ == MM_FREE) input->SetMouseVisible(true); input->SetMouseMode(useMouseMode_);}void Game::HandleMouseModeChange(StringHash eventType, VariantMap& eventData){ Input* input = GetSubsystem<Input>(); bool mouseLocked = eventData[MouseModeChanged::P_MOUSELOCKED].GetBool(); input->SetMouseVisible(!mouseLocked);}
阅读全文
0 0
- urho3d的helloworld合并成单个文件(存粹copy)
- 文件的copy与合并
- copy单个文件
- Git合并单个文件
- 为什么硬盘中保存不下单个较大的文件呢?
- trcsess的使用--将多个跟踪文件合并为单个文件
- copy合并文件命令
- COPY合并文件及思考
- 记录安装Urho3D的过程
- MySQL数据库将多条记录的单个字段合并成
- 自己写的Python脚本 用于文件按照小时合并且单个文件不超过200M
- 用ILmerge工具将C#中的EXE和DLL文件合并成单个文件
- 有word vba 读取excel中存的word待合并路径,合并word文件
- Android 复制单个文件到指定目录,Android copy file
- 用 COPY 命令合并文件隐藏秘密
- 用 COPY 命令合并文件隐藏秘密
- DOS中Copy命令合并文件
- urho3D编译文档工程出现的BUG
- 属性前缀
- html中文字滚动
- JedisCommand接口说明
- LintCode(回文数)
- Gradle编译指定目录下的源码命令参数
- urho3d的helloworld合并成单个文件(存粹copy)
- 使用@ResponseBody的一些问题以及解决方法
- 【Android】【Activity生命周期】Activity生命周期
- 关于Unix第二卷60页的mq_open 函数的参数非法问题
- jquery 判断input框中不能输入特殊字符(#¥%……&*@)
- spring注解大全
- 对consumer instance(消费者实例)的思考
- ZooKeeper 基础知识、部署和应用程序
- 对于java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I错误解决