完成玩家与其他对象交互-2

This commit is contained in:
Ziyu
2025-06-16 14:44:47 +08:00
parent e5399af1d6
commit 5e4f6c587f
7 changed files with 115 additions and 6 deletions
+26
View File
@@ -55,6 +55,7 @@ void GameScene::init() {
void GameScene::update(float delta_time) {
Scene::update(delta_time);
handleObjectCollisions();
handleTileTriggers();
}
void GameScene::render() {
@@ -190,6 +191,31 @@ void GameScene::handleObjectCollisions()
} else if (obj2->getName() == "player" && obj1->getTag() == "item") {
PlayerVSItemCollision(obj2, obj1);
}
// 处理玩家与"hazard"对象碰撞
else if (obj1->getName() == "player" && obj2->getTag() == "hazard") {
obj1->getComponent<game::component::PlayerComponent>()->takeDamage(1);
spdlog::debug("玩家 {} 受到了 HAZARD 对象伤害", obj1->getName());
} else if (obj2->getName() == "player" && obj1->getTag() == "hazard") {
obj2->getComponent<game::component::PlayerComponent>()->takeDamage(1);
spdlog::debug("玩家 {} 受到了 HAZARD 对象伤害", obj2->getName());
}
}
}
void GameScene::handleTileTriggers()
{
const auto& tile_trigger_events = context_.getPhysicsEngine().getTileTriggerEvents();
for (const auto& event : tile_trigger_events) {
auto* obj = event.first; // 瓦片触发事件的对象
auto tile_type = event.second; // 瓦片类型
if (tile_type == engine::component::TileType::HAZARD) {
// 玩家碰到到危险瓦片,受伤
if (obj->getName() == "player") {
obj->getComponent<game::component::PlayerComponent>()->takeDamage(1);
spdlog::debug("玩家 {} 受到了 HAZARD 瓦片伤害", obj->getName());
}
// TODO: 其他对象类型的处理,目前让敌人无视瓦片伤害
}
}
}