feat: 添加游戏核心模块,包括地图、角色、场景和世界管理
实现游戏基础架构,包含以下主要功能: - 地图系统:支持地图加载、图层管理和相机控制 - 角色系统:实现角色装备、动画和行为管理 - 场景系统:提供测试场景和世界场景切换 - 世界管理:处理城镇和区域切换逻辑 - 数据加载:添加角色和装备配置加载器 这些改动为游戏开发奠定了基础框架,支持后续功能扩展
This commit is contained in:
63
Game/src/scene/GameMapTestScene.cpp
Normal file
63
Game/src/scene/GameMapTestScene.cpp
Normal file
@@ -0,0 +1,63 @@
|
||||
#include "scene/GameMapTestScene.h"
|
||||
#include <SDL2/SDL.h>
|
||||
|
||||
namespace frostbite2D {
|
||||
|
||||
namespace {
|
||||
|
||||
constexpr char kTestMapPath[] = "map/elvengard/elvengard.map";
|
||||
|
||||
} // namespace
|
||||
|
||||
GameMapTestScene::GameMapTestScene() = default;
|
||||
|
||||
void GameMapTestScene::onEnter() {
|
||||
Scene::onEnter();
|
||||
if (initialized_) {
|
||||
return;
|
||||
}
|
||||
|
||||
map_ = MakePtr<GameMap>();
|
||||
if (!map_->LoadMap(kTestMapPath)) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"GameMapTestScene: failed to load map %s", kTestMapPath);
|
||||
map_.Reset();
|
||||
return;
|
||||
}
|
||||
AddChild(map_);
|
||||
|
||||
character_ = MakePtr<CharacterObject>();
|
||||
if (!character_->Construction(0)) {
|
||||
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"GameMapTestScene: failed to construct default character");
|
||||
character_.Reset();
|
||||
} else {
|
||||
Vec2 spawnPos = map_->ClampCameraFocus(map_->GetDefaultCameraFocus(), 1.2f);
|
||||
character_->SetCharacterPosition(spawnPos);
|
||||
map_->AddObject(character_);
|
||||
}
|
||||
|
||||
cameraController_.SetMap(map_.Get());
|
||||
cameraController_.SetZoom(1.2f);
|
||||
cameraController_.SetTarget(character_.Get());
|
||||
cameraController_.SetDebugEnabled(false);
|
||||
if (character_) {
|
||||
cameraController_.SetFocus(character_->GetPosition());
|
||||
} else {
|
||||
cameraController_.ClearTarget();
|
||||
cameraController_.SnapToDefaultFocus();
|
||||
}
|
||||
map_->Enter();
|
||||
initialized_ = true;
|
||||
}
|
||||
|
||||
void GameMapTestScene::onExit() {
|
||||
Scene::onExit();
|
||||
}
|
||||
|
||||
void GameMapTestScene::Update(float deltaTime) {
|
||||
Scene::Update(deltaTime);
|
||||
cameraController_.Update(deltaTime);
|
||||
}
|
||||
|
||||
} // namespace frostbite2D
|
||||
Reference in New Issue
Block a user