什么是集合集合就是一个容器,把多个对象存起来,方便操作简单说就是“由若干个确定的元素所构成的整体” 数组ProMax
为什么需要集合集合高效,方便,快捷,扩展性高,对比数组不限制内存,用过的都说好
如何使用集合集合的主要父接口是Collection和Map,一切的祖宗。由Collection扩展出了List,Set,Queue接口,本篇主要说List接口。(Tip:使用集合需要使用import语句 import java.util.*;)List的实现类是Vector,ArrayList和LinkedList,本篇主要说ArrayList。
1.ArrayList集合List集合的特点是有序,元素可重复。ArrayList实现了List接口,ArrayList底层是数组,所以集合中每个元素都有一个索引。优点:每个元素都有索引,元素查询效率快劣势:底层是数组,不适合做大量增删操作
一.添加元素 使用add()方法在集合末尾追加元素12List l = new ArrayList();l.add("Hello,World");
List重载了一个add方法(void a ...
LinkedList集合LinkedList集合实现了List,Queue,Duque等接口,可以作为集合或队列使用LinkedList集合的底层是双向链表,因此,LinkedList适合做大量增删操作,不适合做元素查询操作
双向链表简介:双向链表的每个节点有三个值:此节点存储的元素,前一个节点存储的元素(first),后一个节点存储的元素(last)当链表为空时,first和last都指向null创建LinkedList实例:
1234567import java.util.*; //导入LinkedList所在的util包public class xiaowang{public static void main(String args[]){List l = new LinkedList();l.add("Hexo");l.add("blogxw");System.out.println(l);
结果:
1[Hexo, blogxw]
LinkedList新增方法LinkedList在List的基础上新增了许多方法,使增删 ...
Unity
未读管理器导入消息框架(详见之前的Unity笔记),新建一个Manager文件夹,用来储存管理器。再创建一个Managers文件夹,是管理器的集合。
声音管理器在Managers下创建脚本Managers。
123456789using System.Collections;using System.Collections.Generic;using UnityEngine;public class Managers { //管理器集合 }
这个类管理所有的管理器单例。下面创建一个简单的声音管理器创建一个名为AudioManager的文件夹,里面创建一个名为AudioManager的脚本。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 ...
Unity
未读这是一个普通的消息框架其中,UIManager与其他分支不同。如NPCManager和Enemy只有一些功能,而UI在制作游戏时通常会有十几个功能(如血条,技能,背包,页面等)。且页面之间要相互切换。所以,UI框架诞生了。
UI框架1嵌套在消息框架里,为UIManager做简化。UI框架可以让各个页面互相切换,简洁条理。UI框架将每个页面(UI)制作成预设体(prefab),UIManager负责实例化页面。这是其中一种UI框架的实现。步骤:创建Canvas画布,在里面创建UI页面。UI页面上可以有很多UI子物体。然后将UI页面(不包括Canvas)拖到Project里(显示项目文件夹的地方),然后,用UIManager类在必要的时候实例化预制体。
制作UI管理器基类
创建UI页面列表(集合),存储每个预制体
定义一个带参数的方法,用于在必要条件时实例化某个UI页面预制体这个过程很简单,用unity Resources,这里不多赘述。UI框架2第二种方式:将所有UI界面存储在Canvas下面(成为Canvas子物体),都取消显示(激活),不制作成预设体。UIManager此时管理页面 ...
Unity
未读有限状态机(FSM)有限状态:状态持续时长有限(例:人物有很多状态,如跑步,攻击,游泳。这些状态需进行切换,不可能无限进行一个状态,如人物不可能一直保持攻击状态,不进行跑步,游泳)切换这些状态的东西叫做状态机。举例:下面是一个角色相关脚本
1234567891011121314void Update(){if(按下wasd){移动播放移动动画}else{静止播放站立动画}if(按下空格){跳跃播放跳跃动画播放声音}}
该方法优点:简单该方法缺点:繁琐,if过多,重复元素多,状态过多时可读性降低,代码简洁性低状态机把这些状态独立出来,这时状态机只做切换,不用知道状态实现过程这是一种面向对象思想简单有限状态机:将每个状态独立成一个方法优点:简单,体现面向对象思想,封装成方法使用便捷缺点:大型使用场景依然不够方便普通有限状态机:将每个状态独立成一个类,继承一个状态基类优点:逻辑清晰有条理,更加简单缺点:代码量提升
Unity在工程项目中导入 Character Pack:Free Sample包(去Unity资源 ...
Unity
未读消息框架这是比较简单的给脚本组件发送指令(消息)的图例:适用于小型demo。中等难度的:适用于小型游戏和部分中型游戏。高级的:适用于中型游戏和部分大型游戏。消息框架的作用是让各个类更方便的传输数据,达到简洁有条理的工作效果。虽然越往上,创建的类越多,但是整个代码框架更加有条理。而且不容易出错。
编写消息类12345678910111213141516171819202122232425262728public class Message //消息基类不需要继承MonoBehaviour{ //类型(UI 角色 声音......) public byte Type; //命令 public int Command; //参数 public object Content; public Message() {}//如果需要以后赋值 则需要一个空的构造方法 public Message(byte type,int command,object content){ Type = type; Command = command; Content = co ...
Unity
未读单例模式一个类只有一个对象(实例)叫做单例模式。适用于管理类。
123456789101112131415161718/*unity单例模式:只能将单例脚本挂载到一个对象上,且一个对象只能有一个此单例脚本。优点:单例模式的脚本只能有一个对象,使用对象方便。一般要给外界提供一个访问变量,让外界来访问唯一的该类所生成的对象。只希望外界访问,不希望外界修改(因为管理器一般自主控制,修改变量),所以使用private关键字。*/private static ClassName instance;//不提供set,只提供get访问。public static ClassName Instance{ get{ return instance; }}// 防止出现null异常,在Awake()里添加逻辑:void Awake(){instance = this;}// 对于外界访问instance,使用如下逻辑:ClassName obj = ClassName.Instance;
对于使用多个单例的场景,可以使用泛型单例基类
泛型单 ...