add samples

This commit is contained in:
Nomango 2019-02-03 21:45:56 +08:00 committed by Nomango
parent 5a4279c15c
commit 70a5aff6e9
19 changed files with 616 additions and 131 deletions

View File

@ -1,12 +1,13 @@
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013 # Visual Studio 15
VisualStudioVersion = 12.0.21005.1 VisualStudioVersion = 15.0.28307.271
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HelloWorld", "HelloWorld\HelloWorld.vcxproj", "{3561A359-F9FD-48AB-A977-34E7E568BC8E}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HelloWorld", "HelloWorld\HelloWorld.vcxproj", "{3561A359-F9FD-48AB-A977-34E7E568BC8E}"
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Easy2D", "Easy2D\Easy2D.vcxproj", "{FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Easy2D", "Easy2D\Easy2D.vcxproj", "{FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}"
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Samples", "Samples\Samples.vcxproj", "{45F5738D-CDF2-4024-974D-25B64F9043DE}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32 Debug|Win32 = Debug|Win32
@ -15,6 +16,14 @@ Global
Release|x64 = Release|x64 Release|x64 = Release|x64
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{3561A359-F9FD-48AB-A977-34E7E568BC8E}.Debug|Win32.ActiveCfg = Debug|Win32
{3561A359-F9FD-48AB-A977-34E7E568BC8E}.Debug|Win32.Build.0 = Debug|Win32
{3561A359-F9FD-48AB-A977-34E7E568BC8E}.Debug|x64.ActiveCfg = Debug|x64
{3561A359-F9FD-48AB-A977-34E7E568BC8E}.Debug|x64.Build.0 = Debug|x64
{3561A359-F9FD-48AB-A977-34E7E568BC8E}.Release|Win32.ActiveCfg = Release|Win32
{3561A359-F9FD-48AB-A977-34E7E568BC8E}.Release|Win32.Build.0 = Release|Win32
{3561A359-F9FD-48AB-A977-34E7E568BC8E}.Release|x64.ActiveCfg = Release|x64
{3561A359-F9FD-48AB-A977-34E7E568BC8E}.Release|x64.Build.0 = Release|x64
{FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Debug|Win32.ActiveCfg = Debug|Win32 {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Debug|Win32.ActiveCfg = Debug|Win32
{FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Debug|Win32.Build.0 = Debug|Win32 {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Debug|Win32.Build.0 = Debug|Win32
{FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Debug|Win32.Deploy.0 = Debug|Win32 {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Debug|Win32.Deploy.0 = Debug|Win32
@ -25,14 +34,14 @@ Global
{FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Release|Win32.Build.0 = Release|Win32 {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Release|Win32.Build.0 = Release|Win32
{FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Release|x64.ActiveCfg = Release|x64 {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Release|x64.ActiveCfg = Release|x64
{FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Release|x64.Build.0 = Release|x64 {FF7F943D-A89C-4E6C-97CF-84F7D8FF8EDF}.Release|x64.Build.0 = Release|x64
{3561A359-F9FD-48AB-A977-34E7E568BC8E}.Debug|Win32.ActiveCfg = Debug|Win32 {45F5738D-CDF2-4024-974D-25B64F9043DE}.Debug|Win32.ActiveCfg = Debug|Win32
{3561A359-F9FD-48AB-A977-34E7E568BC8E}.Debug|Win32.Build.0 = Debug|Win32 {45F5738D-CDF2-4024-974D-25B64F9043DE}.Debug|Win32.Build.0 = Debug|Win32
{3561A359-F9FD-48AB-A977-34E7E568BC8E}.Debug|x64.ActiveCfg = Debug|x64 {45F5738D-CDF2-4024-974D-25B64F9043DE}.Debug|x64.ActiveCfg = Debug|x64
{3561A359-F9FD-48AB-A977-34E7E568BC8E}.Debug|x64.Build.0 = Debug|x64 {45F5738D-CDF2-4024-974D-25B64F9043DE}.Debug|x64.Build.0 = Debug|x64
{3561A359-F9FD-48AB-A977-34E7E568BC8E}.Release|Win32.ActiveCfg = Release|Win32 {45F5738D-CDF2-4024-974D-25B64F9043DE}.Release|Win32.ActiveCfg = Release|Win32
{3561A359-F9FD-48AB-A977-34E7E568BC8E}.Release|Win32.Build.0 = Release|Win32 {45F5738D-CDF2-4024-974D-25B64F9043DE}.Release|Win32.Build.0 = Release|Win32
{3561A359-F9FD-48AB-A977-34E7E568BC8E}.Release|x64.ActiveCfg = Release|x64 {45F5738D-CDF2-4024-974D-25B64F9043DE}.Release|x64.ActiveCfg = Release|x64
{3561A359-F9FD-48AB-A977-34E7E568BC8E}.Release|x64.Build.0 = Release|x64 {45F5738D-CDF2-4024-974D-25B64F9043DE}.Release|x64.Build.0 = Release|x64
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

36
project/Samples/Demo1.h Normal file
View File

@ -0,0 +1,36 @@
// Copyright (C) 2019 Nomango
#pragma once
#include "common.h"
class Demo1
: public Scene
{
public:
static ScenePtr Create()
{
return new Demo1;
}
Demo1()
{
// 创建文本
auto text = E_NEW Text(L"Hello Easy2D!");
// 让文本显示在屏幕中央
text->SetPosition(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2);
text->SetAnchor(0.5, 0.5);
// 添加到场景
this->AddChild(text);
// 执行动画
text->AddAction(
Tween::Spawn({ // Action5: 同时执行 Action1 和 Action4, 并无限循环
Tween::RotateBy(60).SetDuration(1000), // Action1: 1秒旋转 60 度
Tween::Sequence({ // Action4: 顺序执行 Action2 和 Action3
Tween::FadeOut(500), // Action2: 500毫秒淡出动画
Tween::FadeIn(500) // Action3: 500毫秒淡入动画
})
}).SetLoopCount(-1)
);
}
};

91
project/Samples/Demo2.h Normal file
View File

@ -0,0 +1,91 @@
// Copyright (C) 2019 Nomango
#pragma once
#include "common.h"
class Man
: public Sprite
{
public:
Man()
{
// 加载图片
Load(L"res/man.png");
// 缩小图片
SetScale(0.5f);
}
// 每帧更新时
void OnUpdate(Duration dt) override
{
// 获取输入设备
auto input = Input::Instance();
// 按下左右键
if (input->IsDown(KeyCode::Left))
{
this->Move(-2, 0);
}
else if (input->IsDown(KeyCode::Right))
{
this->Move(2, 0);
}
// 按下上下键
if (input->IsDown(KeyCode::Up))
{
this->Move(0, -2);
}
else if (input->IsDown(KeyCode::Down))
{
this->Move(0, 2);
}
// 按下鼠标左键,顺时针旋转小人
if (input->IsDown(MouseButton::Left))
{
// 获取当前旋转角度
float rotation = this->GetRotation();
// 设置角度值+2
this->SetRotation(rotation + 2);
}
// 点击鼠标右键,隐藏或显示小人
if (input->WasPressed(MouseButton::Right))
{
// 获取当前显示状态
bool visible = this->IsVisible();
// 设置相反的显示状态
this->SetVisible(!visible);
}
}
};
class Demo2
: public Scene
{
public:
static ScenePtr Create()
{
return new Demo2;
}
Demo2()
{
// 创建人物
auto man = E_NEW Man;
// 在屏幕上居中显示
man->SetAnchor(0.5f, 0.5f);
man->SetPosition(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2);
// 创建说明文字
auto text = E_NEW Text(L"按上下左右键移动\n按鼠标左键旋转\n点击鼠标右键隐藏");
// 设置文字位置
text->SetAnchor(0.5f, 0.5f);
text->SetPosition(WINDOW_WIDTH / 2, WINDOW_HEIGHT - 50);
text->SetAlignment(TextAlign::Center);
// 添加到场景
this->AddChild(man);
this->AddChild(text);
}
};

87
project/Samples/Demo3.h Normal file
View File

@ -0,0 +1,87 @@
// Copyright (C) 2019 Nomango
#pragma once
#include "common.h"
class Demo3
: public Scene
{
MusicPtr music; // 音乐对象
TextPtr volume_text; // 音量文字
TextPtr state_text; // 播放状态文字
public:
static ScenePtr Create()
{
return new Demo3;
}
Demo3()
{
// 加载音乐
music = E_NEW Music;
if (!music->Load(L"res/music.wav"))
{
music = nullptr;
auto err = E_NEW Text(L"音频文件加载失败");
this->AddChild(err);
}
// 播放音乐(参数用来设置播放循环次数,-1 表示循环播放)
music->Play(-1);
// 创建说明文字
auto intro_text = E_NEW Text(L"按上下键调整音量\n按空格键暂停或继续");
intro_text->SetAnchor(0.5f, 0.5f);
intro_text->SetPosition(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2 - 50);
// 创建音量文字
volume_text = E_NEW Text(L"当前音量:");
volume_text->SetAnchor(0.5f, 0.5f);
volume_text->SetPosition(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2 + 30);
// 创建状态文字
state_text = E_NEW Text(L"当前状态:");
state_text->SetAnchor(0.5f, 0.5f);
state_text->SetPosition(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2 + 60);
// 添加到场景
this->AddChild(intro_text);
this->AddChild(volume_text);
this->AddChild(state_text);
}
void OnUpdate(Duration dt) override
{
if (music == nullptr)
return;
// 获取音量和播放状态
float volume = music->GetVolume();
bool playing = music->IsPlaying();
// 修改文本
volume_text->SetText(L"当前音量:" + std::to_wstring(volume));
state_text->SetText(playing ? L"当前状态:正在播放" : L"当前状态:停止播放");
// 获取输入设备
auto input = Input::Instance();
// 按空格键暂停或继续
if (input->WasPressed(KeyCode::Space))
{
music->IsPlaying() ? music->Pause() : music->Resume();
}
// 按上下键调整音量
if (input->WasPressed(KeyCode::Up))
{
music->SetVolume(volume + 0.1f);
}
else if (input->WasPressed(KeyCode::Down))
{
music->SetVolume(volume - 0.1f);
}
}
};

View File

@ -0,0 +1,153 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>15.0</VCProjectVersion>
<ProjectGuid>{45F5738D-CDF2-4024-974D-25B64F9043DE}</ProjectGuid>
<RootNamespace>Samples</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>../../src</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>../../src</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>../../src</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>../../src</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="common.h" />
<ClInclude Include="Demo1.h" />
<ClInclude Include="Demo2.h" />
<ClInclude Include="Demo3.h" />
<ClInclude Include="include-forwards.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Easy2D\Easy2D.vcxproj">
<Project>{ff7f943d-a89c-4e6c-97cf-84f7d8ff8edf}</Project>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="include-forwards.h" />
<ClInclude Include="Demo1.h" />
<ClInclude Include="common.h" />
<ClInclude Include="Demo2.h" />
<ClInclude Include="Demo3.h" />
</ItemGroup>
</Project>

9
project/Samples/common.h Normal file
View File

@ -0,0 +1,9 @@
// Copyright (C) 2019 Nomango
#pragma once
#include "easy2d.h"
using namespace easy2d;
const int WINDOW_WIDTH = 640;
const int WINDOW_HEIGHT = 480;

View File

@ -0,0 +1,7 @@
// Copyright (C) 2019 Nomango
#pragma once
#include "common.h"
#include "Demo1.h"
#include "Demo2.h"
#include "Demo3.h"

82
project/Samples/main.cpp Normal file
View File

@ -0,0 +1,82 @@
// Copyright (C) 2019 Nomango
#include "include-forwards.h"
namespace
{
struct Demo
{
String title;
ScenePtr(*Create)();
};
Demo s_Demos[] = {
{ L"动画示例", Demo1::Create },
{ L"输入示例", Demo2::Create },
{ L"音频播放示例", Demo3::Create },
};
int s_DemoIndex = 0;
int s_DemoNum = sizeof(s_Demos) / sizeof(Demo);
}
class DemoApp
: public Application
{
public:
DemoApp()
{
Options options;
options.title = L"Easy2D示例程序";
options.width = WINDOW_WIDTH;
options.height = WINDOW_HEIGHT;
Init(options);
}
void OnStart() override
{
ChangeDemoScene();
}
void ChangeDemoScene()
{
Window::Instance()->SetTitle(s_Demos[s_DemoIndex].title);
ScenePtr scene = s_Demos[s_DemoIndex].Create();
EnterScene(scene);
// 添加按键监听
scene->AddListener(KeyboardEvent::Up, Closure(this, &DemoApp::KeyPressed));
// 显示提示文字
TextPtr intro = new Text(L"Key 1~3 to select demo");
intro->SetFontSize(16.f);
scene->AddChild(intro);
}
void KeyPressed(Event const& evt)
{
E2D_ASSERT(evt.type == KeyboardEvent::Up);
if (evt.key.code > KeyCode::Num0 &&
evt.key.code <= (KeyCode::Num0 + s_DemoNum))
{
s_DemoIndex = evt.key.code - KeyCode::Num1;
ChangeDemoScene();
}
}
};
int main()
{
try
{
DemoApp app;
app.Run();
}
catch (std::exception& e)
{
::MessageBoxA(nullptr, e.what(), "An exception has occurred!", MB_ICONERROR | MB_TASKMODAL);
}
return 0;
}

BIN
project/Samples/res/man.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 702 KiB

Binary file not shown.

View File

@ -154,6 +154,13 @@ namespace easy2d
Window::Instance()->Destroy(); Window::Instance()->Destroy();
} }
void Application::Destroy()
{
transition_ = nullptr;
next_scene_ = nullptr;
curr_scene_ = nullptr;
}
void Application::EnterScene(ScenePtr const & scene) void Application::EnterScene(ScenePtr const & scene)
{ {
E2D_ASSERT(scene && "Application::EnterScene failed, NULL pointer exception"); E2D_ASSERT(scene && "Application::EnterScene failed, NULL pointer exception");
@ -218,6 +225,8 @@ namespace easy2d
next_scene_ = nullptr; next_scene_ = nullptr;
} }
OnUpdate(dt);
if (curr_scene_) if (curr_scene_)
curr_scene_->Update(dt); curr_scene_->Update(dt);
@ -284,7 +293,7 @@ namespace easy2d
if (!app->transition_ && app->curr_scene_) if (!app->transition_ && app->curr_scene_)
{ {
Event evt((msg == WM_KEYDOWN) ? KeyboardEvent::Down : KeyboardEvent::Up); Event evt((msg == WM_KEYDOWN) ? KeyboardEvent::Down : KeyboardEvent::Up);
evt.key.code = KeyCode(wparam); evt.key.code = static_cast<int>(wparam);
evt.key.count = static_cast<int>(lparam & 0xFF); evt.key.count = static_cast<int>(lparam & 0xFF);
app->curr_scene_->Dispatch(evt); app->curr_scene_->Dispatch(evt);

View File

@ -74,12 +74,18 @@ namespace easy2d
// 销毁时 // 销毁时
virtual void OnDestroy() {} virtual void OnDestroy() {}
// 更新时
virtual void OnUpdate(Duration dt) { E2D_NOT_USED(dt); }
// 运行 // 运行
void Run(); void Run();
// 结束 // 结束
void Quit(); void Quit();
// 销毁
void Destroy();
// 切换场景 // 切换场景
void EnterScene( void EnterScene(
ScenePtr const& scene /* 场景 */ ScenePtr const& scene /* 场景 */

View File

@ -52,7 +52,7 @@ namespace easy2d
struct struct
{ {
MouseButton button; // 仅当消息类型为 Down | Up | Click 时有效 int button; // 仅当消息类型为 Down | Up | Click 时有效
}; };
struct struct
@ -79,7 +79,7 @@ namespace easy2d
Last Last
}; };
KeyCode code; int code; // enum KeyCode
int count; int count;
static inline bool Check(UINT type) static inline bool Check(UINT type)

View File

@ -49,7 +49,7 @@ namespace easy2d
public: public:
Font( Font(
const String& family = L"", const String& family = L"",
float size = 22, float size = 18,
unsigned int weight = FontWeight::Normal, unsigned int weight = FontWeight::Normal,
bool italic = false bool italic = false
) )

View File

@ -72,34 +72,22 @@ namespace easy2d
want_update_ = true; want_update_ = true;
} }
bool Input::IsDown(KeyCode code) bool Input::IsDown(int code_or_btn)
{ {
return keys_[static_cast<int>(code)]; E2D_ASSERT(code_or_btn >= 0 && code_or_btn < 256);
return keys_[code_or_btn];
} }
bool Input::IsDown(MouseButton btn) bool Input::WasPressed(int code_or_btn)
{ {
return keys_[static_cast<int>(btn)]; E2D_ASSERT(code_or_btn >= 0 && code_or_btn < 256);
return keys_pressed_[code_or_btn];
} }
bool Input::WasPressed(KeyCode code) bool Input::WasReleased(int code_or_btn)
{ {
return keys_pressed_[static_cast<int>(code)]; E2D_ASSERT(code_or_btn >= 0 && code_or_btn < 256);
} return keys_released_[code_or_btn];
bool Input::WasPressed(MouseButton btn)
{
return keys_pressed_[static_cast<int>(btn)];
}
bool Input::WasReleased(KeyCode code)
{
return keys_released_[static_cast<int>(code)];
}
bool Input::WasReleased(MouseButton btn)
{
return keys_released_[static_cast<int>(btn)];
} }
float Input::GetMouseX() float Input::GetMouseX()

View File

@ -31,34 +31,19 @@ namespace easy2d
E2D_DECLARE_SINGLETON(Input); E2D_DECLARE_SINGLETON(Input);
public: public:
// 检测键盘按键是否正被按下 // 检测键盘或鼠标按键是否正被按下
bool IsDown( bool IsDown(
KeyCode code int code_or_btn
); );
// 检测鼠标按键是否正被按下 // 检测键盘或鼠标按键是否刚被点击
bool IsDown(
MouseButton btn
);
// 检测键盘按键是否刚被点击
bool WasPressed( bool WasPressed(
KeyCode code int code_or_btn
); );
// 检测鼠标按键是否刚被点击 // 检测键盘或鼠标按键是否刚抬起
bool WasPressed(
MouseButton btn
);
// 检测键盘按键是否刚抬起
bool WasReleased( bool WasReleased(
KeyCode code int code_or_btn
);
// 检测鼠标按键是否刚抬起
bool WasReleased(
MouseButton btn
); );
// 資誼報炎 x 恫炎 // 資誼報炎 x 恫炎

View File

@ -119,7 +119,7 @@ namespace easy2d
String const& family String const& family
); );
// 设置字号(默认值为 22 // 设置字号(默认值为 18
void SetFontSize( void SetFontSize(
float size float size
); );

View File

@ -24,88 +24,98 @@
namespace easy2d namespace easy2d
{ {
// 報炎梓囚 // 報炎梓囚
enum class MouseButton : int struct MouseButton
{ {
Left = VK_LBUTTON, // 報炎恣囚 typedef int Value;
Right = VK_RBUTTON, // 報炎嘔囚
Middle = VK_MBUTTON // 報炎嶄囚 enum : int
{
Left = VK_LBUTTON, // 報炎恣囚
Right = VK_RBUTTON, // 報炎嘔囚
Middle = VK_MBUTTON // 報炎嶄囚
};
}; };
// 梓囚囚峙 // 梓囚囚峙
enum class KeyCode : int struct KeyCode
{ {
Unknown = 0, typedef int Value;
Up = VK_UP,
Left = VK_LEFT,
Right = VK_RIGHT,
Down = VK_DOWN,
Enter = VK_RETURN,
Space = VK_SPACE,
Esc = VK_ESCAPE,
Ctrl = VK_CONTROL,
Shift = VK_SHIFT,
A = 0x41, enum : int
B, {
C, Unknown = 0,
D, Up = VK_UP,
E, Left = VK_LEFT,
F, Right = VK_RIGHT,
G, Down = VK_DOWN,
H, Enter = VK_RETURN,
I, Space = VK_SPACE,
J, Esc = VK_ESCAPE,
K, Ctrl = VK_CONTROL,
L, Shift = VK_SHIFT,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
Num0 = 0x30, A = 0x41,
Num1, B,
Num2, C,
Num3, D,
Num4, E,
Num5, F,
Num6, G,
Num7, H,
Num8, I,
Num9, J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
Numpad0 = VK_NUMPAD0, Num0 = 0x30,
Numpad1, Num1,
Numpad2, Num2,
Numpad3, Num3,
Numpad4, Num4,
Numpad5, Num5,
Numpad6, Num6,
Numpad7, Num7,
Numpad8, Num8,
Numpad9, Num9,
F1 = VK_F1, Numpad0 = VK_NUMPAD0,
F2, Numpad1,
F3, Numpad2,
F4, Numpad3,
F5, Numpad4,
F6, Numpad5,
F7, Numpad6,
F8, Numpad7,
F9, Numpad8,
F10, Numpad9,
F11,
F12, F1 = VK_F1,
F2,
F3,
F4,
F5,
F6,
F7,
F8,
F9,
F10,
F11,
F12,
};
}; };
} }