首页 > 其他分享 >39. 对战胜负逻辑

39. 对战胜负逻辑

时间:2024-03-12 09:48:06浏览次数:20  
标签:39 场景 逻辑 对战 事件 战胜 UIManager 监听 CardDeck

本节目标

让用户从地图场景进入对战场景,然后对战胜利或失败之后收起卡牌

实现过程

让用户从地图场景进入对战场景

Persistent 场景隐藏 Player 和 Gameplay Panel

Hierarchy 窗口中移除对战场景,添加map场景

清除 MapLayoutSO 中的数据

然后启动游戏,将 Map 场景设置为激活

然后点击第一排图片的房间,因为它们上面绑定了 Room 脚本,所以会广播LoadRoomEvent事件

Persistent 场景中有两个地方监听了LoadRoomEvent事件,它们分别是SceneLoadManagerUIManager

SceneLoadManager.OnLoadRoomEvent方法中,会记下当前房间和房间的编号,卸载当前激活的场景,加载房间场景,产生afterRoomLoadedEvent事件

UIManager.OnLoadRoomEvent方法中,会将gameplayPanel显示出来

afterRoomLoadedEvent事件又会被两个对象监听,它们分别是TurnBaseManagerGameManager

TurnBaseManager.OnRoomLoadedEvent中,会根据房间的类型显示玩家,如果是对战房间还会调用GameStart方法

GameManager.OnRoomLoadedEvent方法会找到当前场景中所有的敌人,然后添加到aliveEnemyList

最后呈现出下图的样子

胜利之后的逻辑

玩家打败敌人之后,敌人就会广播CharacterDeadEvent事件

GameManager.OnCharacterDeadEvent监听了这个事件,然后判断是不是敌人,如果是敌人的话,就把它从aliveEnemyList中移除掉,当敌人数量为0之后,就产生游戏胜利的事件

有两个地方监听了游戏胜利的事件,分别是UIManagerCardDeck

UIManager在收到GameWinEvent事件之后,会调用UIManager.OnGameWinEvent,这个方法会隐藏gameplayPanel,并显示gameWinPanel

CardDeck在收到GameWinEvent事件之后,会调用CardDeck.ReleaseAllCards,这个方法会丢弃当前手上的所有卡牌,并初始化牌堆

失败之后的逻辑

Player 死亡的时候,也会广播characterDeadEvent

GameManager.OnCharacterDeadEvent监听了这个事件,然后判断是不是玩家,如果是玩家的话,就会广播gameOverEvent

GameWinEvent类似,GameOverEvent会被UIManagerCardDeck监听

UIManager.OnGameOverEvent会隐藏gameplayPanel,并显示gameOverPanel

CardDeck在收到GameOverEvent事件之后,会移除当前手上所有卡牌

项目相关代码

代码仓库:https://gitee.com/nbda1121440/DreamOfTheKingdom.git

标签:20240312_0844

标签:39,场景,逻辑,对战,事件,战胜,UIManager,监听,CardDeck
From: https://www.cnblogs.com/hellozjf/p/18067624

相关文章

  • Unity3D 逻辑服的ECS框架设计架构与原理详解
    ECS(Entity-Component-System)是一种游戏开发架构模式,它将游戏对象划分为实体(Entity)、组件(Component)和系统(System),并通过数据驱动的方式来实现游戏逻辑。在Unity3D中,ECS框架的设计架构与原理是非常重要的,本文将详细介绍Unity3D逻辑服的ECS框架设计架构与原理,并给出技术详解以及代码实......
  • 中考英语首字母快速突破003-2021上海奉贤英语二模-The Trick of '9' and '.99' Pricin
    PDF格式公众号回复关键字:ZKSZM003原文​The“DoubleEleven”ShoppingFestivalisoneofthelargestshoppingfestivalsinChina.Lastyear,thefestivalwentonforelevendays.Alibabaalonesaw498.2billionyuanintrade.​Manypeopleb......
  • Cannot read properties of null (reading '$el')找出真凶
    Cannotreadpropertiesofnull(reading'$el')菜鸟,在vue3开发遇到的问题,百思不得其解,为什么会为null,先上代码大概的代码结构:<template><el-Dialogv-model="isLoading"><el-tableref="tableRef"><el-table-colum......
  • leetcode2397. 被列覆盖的最多行数 回溯法/枝剪
    第一次手搓一个回溯法,超时后采用枝剪勉强通过classSolution{intmax=0;intnumSelect;publicintmaximumRows(int[][]matrix,intnumSelect){Set<String>stateSet=newHashSet<>();dfs(matrix,newboolean[matrix[0].length],0,numSele......
  • L1-039 古风排版
    计算出行和列的大小,从最后一列往前填充。#include<bits/stdc++.h>usingnamespacestd;intmain(){ introw; cin>>row; cin.get(); charinput[100][100]; stringcs; getline(cin,cs); intcol=ceil(1.0*cs.size()/row); //cout<<row<<""......
  • SAP中五个报废率的计算逻辑
    废话不多说,SAP中有几个地方都有报废率的字段,对应到不同的业务场景,这些不同的报废字段会起到不同的作用,希望能通过这篇博文能整理出这些报废字段的逻辑,以及适用的业务场景.首先看看哪些地方有报废率字段,要注意一点,既然讲到报废率,它们的单位都是百分号%:1.物料主数据MRP1视......
  • 38. 敌人的动画执行逻辑
    本节目标上节只是把逻辑写好了,为了让游戏看起来更好看,我们需要将敌人的动画也加上去实现动画状态机敌人的状态比较简单,只有站立、加Buff、攻击、受伤、死亡这五种状态各状态之间的转换关系如下站立->加Buff通过skill触发,立刻执行因为是从AnyState出来的,所以不......
  • 37. 敌人意图 AI 逻辑
    本节目标在玩家回合,需要显示敌人的意图,然后在敌人回合执行意图代码实现拼UI在HealthBar上面添加意图的图片和文字然后在HealthBarController上面添加意图图片和意图文字添加敌人意图敌人意图ScriptableObject敌人意图实例Effect把意图添加到Enemy类......
  • 杭电OJ 2039三角形
    三角形这题主要是判定三角形。根据三角形的性质,三条边能够组成一个三角形的条件是任意两边之和大于第三边。因此,可以通过以下步骤来判定:1.将三条边按非递减顺序排序;2.如果最短的两条边之和大于最长的边,则这三条边能够组成一个三角形;否则,不能组成。注意:题目说是三个正......
  • P4395 [BOI2003] Gem 气垫车
    原题链接题解当你直到贪心不可行的时候就要用dp了code#include<bits/stdc++.h>usingnamespacestd;intans=2e9;vector<int>G[10005];intdp[100005][55]={0};voidss(intnow,intfa){for(autonext:G[now]){if(next==fa)continue;ss(ne......