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 GifSprite
 | 
						|
{
 | 
						|
public:
 | 
						|
	Hero(GifImagePtr image)
 | 
						|
	{
 | 
						|
		// 加载图片
 | 
						|
		Load(image);
 | 
						|
		// 设置 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(g_Loader.GetGifImage(L"Kusanagi"));
 | 
						|
		// 在屏幕上居中显示
 | 
						|
		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);
 | 
						|
	}
 | 
						|
};
 |