97 lines
1.7 KiB
C++
97 lines
1.7 KiB
C++
// Copyright (C) 2019 Nomango
|
|
|
|
#pragma once
|
|
#include "common.h"
|
|
|
|
// 角色
|
|
KGE_DECLARE_SMART_PTR(Hero);
|
|
class Hero
|
|
: public GifImage
|
|
{
|
|
public:
|
|
Hero()
|
|
{
|
|
// 加载图片
|
|
Load(L"res/Kusanagi.gif");
|
|
// 设置 GIF 动图无限循环
|
|
SetLoopCount(-1);
|
|
}
|
|
|
|
// 每帧渲染前执行 OnUpdate
|
|
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()
|
|
{
|
|
// 创建角色
|
|
HeroPtr hero = new Hero;
|
|
// 在屏幕上居中显示
|
|
hero->SetAnchor(0.5f, 0.5f);
|
|
hero->SetPosition(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2);
|
|
|
|
// 创建说明文字
|
|
TextPtr text = new Text(L"按上下左右键移动\n按鼠标左键旋转\n点击鼠标右键隐藏");
|
|
// 设置节点大小为文字布局大小
|
|
text->SetSize(text->GetLayoutSize());
|
|
// 设置文字位置
|
|
text->SetAnchor(0.5f, 0.5f);
|
|
text->SetPosition(WINDOW_WIDTH / 2, WINDOW_HEIGHT - 50);
|
|
text->SetAlignment(TextAlign::Center);
|
|
|
|
// 添加到场景
|
|
this->AddChild(hero);
|
|
this->AddChild(text);
|
|
}
|
|
};
|