Rect Transform(锚点):图片中心的四个点,界面以雪花形式显示
当四个点在一起的时候组成锚点,当四个点分开的时候组成锚框(合则锚点,分则锚框)

Anchors:
----Min x:控制左两个点,当为0的时候,左两个点在父物体边框的左边缘,当为1时,左两个点在父物体边框的右边缘(取值范围并不是0~1)
----Min y:控制下两个点,当为0的时候,下两个点在父物体边框的下边缘,当为1时,下两个点在父物体边框的上边缘(取值范围并不是0~1)
----Max x:控制右两个点,当为0的时候,右两个点在父物体边框的左边缘,当为1时,右两个点在父物体边框的右边缘(取值范围并不是0~1)
----Max y:控制上两个点,当为0的时候,上两个点在父物体边框的下边缘,当为1时,上两个点在父物体边框的上边缘(取值范围并不是0~1)

当四个点在一起时:
----Pos X, Pos Y, Pos Z(锚点坐标):图片中心点相对于锚点的坐标
----Width, hight:图片的宽高
当四个点分开的时:
----Left:物体的左边框距离左两个锚点组成左锚框的距离;正值表示左锚框在左边框的左边,负值相反
----Top:物体的上边框距离上两个锚点组成上锚框的距离;正值表示上锚框在上边框的上方,负值相反
----Right:物体的右边框距离右两个锚点组成右锚框的距离;正值表示右锚框在右边框的右边,负值相反
----Bottom:物体的下边框距离下两个锚点组成下锚框的距离;正值表示下锚框在下边框的下方,负值相反
锚点作用:子物体自适应父物体拉伸的变化,父物体挤压过度,子物体会消失
Rect Transform的两个可选的编辑模式:Width, hight后的两个按钮。
第一个按钮(虚方框):如果选择后,不能鼠标旋转图片。
第二个按钮(R):如果选择后,当改变中心点的值时,中心点不动,图片移动。

Pivot(中心点,轴心点):旋转中心
----X:0时,在物体左边框的位置,1时,物体右边框的位置(取值范围并不是0~1)
----Y:0时,在物体下边框的位置,1时,物体上边框的位置(取值范围并不是0~1)

框的显示:快捷键T

代码操作,继承Transform

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class UGUI_RectTransform : MonoBehaviour {
  5. public Canvas canvas;
  6. //1、手动拖拽
  7. private RectTransform rt;
  8. // Use this for initialization
  9. void Start () {
  10. //2、获取方式
  11. rt = GetComponent<RectTransform>();
  12. //3、里氏转换原则
  13. rt = transform as RectTransform;
  14. //锚点坐标(物体中心点相对于锚点的坐标)
  15. //rt.anchoredPosition = new Vector2(50, 100);
  16. //世界坐标
  17. //rt.position = Vector3.zero;
  18. //相对于父物体坐标系的坐标, 跟锚点坐标不一样。
  19. //rt.localPosition = new Vector2(50, 100);
  20. //设置物体的宽高。只有四个点在一起组成锚点时使用
  21. //rt.sizeDelta = new Vector2(500, 400);
  22. //设置锚点
  23. //rt.anchorMax = Vector2.one * 0.5f;
  24. //rt.anchorMin = Vector2.one * 0.5f;
  25. //当四个点不在一起组成锚框时
  26. //设置的是Left和Bottom,界面的值就是100, 50
  27. //rt.offsetMin = new Vector2(100, 50);
  28. //设置的是Right和Top,界面的值是设置值的负值 -100 50
  29. //rt.offsetMax = new Vector2(100, 50);
  30. //设置中心点
  31. rt.pivot = Vector2.one;
  32. InstanceImage();
  33. }
  34.  
  35. // Update is called once per frame
  36. void Update () {
  37. //if (Input.GetMouseButton(0))
  38. //{
  39. // rt.anchoredPosition = new Vector2(500, 400);
  40. //}
  41. //if (Input.GetMouseButton(1))
  42. //{
  43. // rt.position = Vector3.zero;
  44. //}
  45. //if (Input.GetMouseButton(2))
  46. //{
  47. // rt.localPosition = new Vector2(50,100);
  48. //}
  49. }
  50. void InstanceImage()//加载图片,默认生成在层级面板的根目录下
  51. {
  52. GameObject prefab = Resources.Load<GameObject>("prefab");
  53. GameObject obj = Instantiate(prefab, canvas.transform);
  54. }
  55. }
 
Canvas(画布):所有的UGUI的组件都需要放在Canvas下才能显示
Render Mode(渲染模式):
----Screen Space – Overlay(屏幕空间-覆盖):这种模式下,所有的UI都会放在最前方,会覆盖掉其他物体显示。
--------Sort Order:当多个Canvas时,如果所有的Canvas都是Screen Space – Overlay这种模式,那么当Sort Order的值越大,该Canvas越后渲染,越显示在屏幕的最前方。

----Screen space – Camera(屏幕空间-相机渲染):该模式下,必须指定一个渲染该Canvas的摄像机,3D物体可以遮挡住UI。Rect Transorm不可修改,随相机深度进行缩放
--------Plane Distance:Canvas画布距离渲染相机的距离
--------该模式下,不同的Canvas渲染的关系:
--------首先判断Sorting Layer:值越靠后越后渲染。
--------如果Sorting Layer值相同,再判断order in layer:值越大越后渲染,越再屏幕的前方。
--------如果order in layer值也相同,再判断plane distance:距离相机越近,越显示在屏幕的前方。
--------优先级:Sorting Layer -> Order in Layer -> Plane Distance

----World Space(世界空间):只有该模式下Canvas的Rect Transorm才能编辑,并且纵深Z值有效了。

Canvas Scaler(画布缩放):
----UI Scale Mode
--------ConstantPixel Size:画布的尺寸像素会随着屏幕的变化而变化(少用)
--------Scale With Screen Size:画布的尺寸像素跟屏幕分辨率无关,需要指定画布的尺寸像素(常用)
------------Reference Resolution:指定画布的尺寸。
--------Constant Physical Size:每个屏幕渲染多少个DPI(很少用)

--------Screen Match Mode:
------------Match With or Heitht:以屏幕宽或者高作为适配
------------Expand:不管屏幕分辨率是多少,画布的内容一定要全部显示出来
------------Shrink:不管屏幕分辨率是多少,一定要使用画布的内容充满整个屏幕

Graphic Raycaster
Ignore Reversed Graphics:是否忽略反面的射线检测
Blocking Objects:指定物体对UI射线检测产生影响(非overlay的情况)
Blocking Mask:指定哪一个层的物体对UI射线检测产生影响;

Toggle(单选框)
交互、过渡、导航
Is On:是否选中
Toggle Transition(过渡效果):无,淡入淡出
Graphic:选中时显示的图片,默认对勾图片
Group(单选框组):
OnValueChanged:当Is On改变的时候,执行里面存储的所有方法
----1、拖拽形式,方法必须是公共的,可以有参可以无参,注意:有bool型参数的时候注意可变参数和固定参数。
----2、代码注册事件的形式:注意只能把无返回值,有bool型参数的方法注册进去。

Button的OnClick无参,方块代表是固定参数
Toggle的OnValueChanged有参,方块代表是可变参数
代码操作
Toggle -> ToggleEvent -> UnityEvent -> UnityAction
ToggleEvent:参数T0 = bool

UnityEvent:Invoke方法也需要有一个bool类型的参数

UnityAction:无返回值的泛型委托,参数未指定

Toggle Group(单选框组):实现一组Toggle的单选效果,只有一个Group内的Toggle才是一个组。

Allow Switch off
勾选:可全部为空
取消:必须选一个

Slider组件(滑动条)
Fill Rect:填充的就行,进度的图片
Handle Rect:句柄,索引的图片
Direction:方向
Min/Max Value:最大值,最小值
Whole Numbers:是否整数变化
Value:值,进度值
OnValueChanged:当Value值变化时执行里边所有的方法
----1、拖拽方式,方法必须是公共的,注意固定参数和可变参数。
----2、代码注册事件的方式:方法必须是无返回值,有一个float类型的参数的方法。

自制滑动条
同一Canvas下,越靠下的位置越靠前

代码操作
slider.normalizedValue:为值的百分比
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. public class UGUI_Slider : MonoBehaviour {
  6. private Slider slider;
  7. private float value = 0f;
  8. // Use this for initialization
  9. void Start () {
  10. slider = GetComponent<Slider>();
  11. //slider.value为实际的值
  12. Debug.Log("Value: " + slider.value);
  13. //slider.normalizedValue为值的百分比
  14. Debug.Log("Value: " + slider.normalizedValue);
  15. slider.value = 0f;
  16. slider.onValueChanged.AddListener(AddValueChanged);
  17. }
  18. // Update is called once per frame
  19. void Update () {
  20. value += Time.deltaTime;
  21. slider.value = value;
  22. }
  23. public void OnValueChanged(float value)
  24. {
  25. Debug.Log("手动添加的value:" + value);
  26. }
  27. private void AddValueChanged(float value)
  28. {
  29. Debug.Log("代码添加的value:" + value);
  30. }
  31. }

精灵图片批量添加动画:1、全选拖入,2、修改帧数

综合练习-音乐开关
图片挤压问题,图片格式改成水平填充

滑动值改为整数

代码操作

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. public class UGUI_SliderMusic : MonoBehaviour {
  6. private Slider slider;
  7. private AudioSource source;
  8. private void Awake()
  9. {
  10. source = gameObject.AddComponent<AudioSource>();
  11. AudioClip clip = Resources.Load<AudioClip>("OnOff/SingleDog");
  12. source.clip = clip;
  13. source.Play();
  14. slider = GetComponent<Slider>();
  15. slider.onValueChanged.AddListener(OnValueChanged);
  16. }
  17. // Use this for initialization
  18. void Start () {
  19. slider.value = ;
  20. }
  21.  
  22. // Update is called once per frame
  23. void Update () {
  24. slider.value = ;
  25. }
  26. private void OnValueChanged(float value)
  27. {
  28. if (value > 0.5f)//打开音乐
  29. {
  30. source.volume = ;
  31. }
  32. else//关闭音乐
  33. {
  34. source.volume = ;
  35. }
  36. }
  37. }
ScrollBar组件(滚动条)
Value:类型float,范围0~1
Size:句柄的宽度,范围0~1
Number Of Steps:有几个滑动位置,0和1表示无限制,最大值为11,11个位置10段

自制滚动条

OnValueChanged:可变参数

OnValueChanged(float):固定参数

把锚点和图片的中心点,设置在左边框,则ScrollBar从0~1,就是图片从0~-1720(1720为图片宽度减画布宽度,负号因为和锚点方向相反)
代码操作
GameObeject.find,类名.方法名,静态
transform.find,对象名.方法名
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. public class UGUI_ScrollBar : MonoBehaviour {
  6. private Scrollbar bar;
  7. // Use this for initialization
  8. void Start () {
  9. bar = GetComponent<Scrollbar>();
  10. bar.value = 0.5f;//改变Scrollbar的值
  11. bar.size = 0.4f;//改变句柄大小
  12. bar.onValueChanged.AddListener(OnValueChanged);
  13. }
  14.  
  15. // Update is called once per frame
  16. void Update () {
  17.  
  18. }
  19. public void OnValueChanged(float value)
  20. {
  21. Debug.Log("值变了:" + value);
  22. }
  23. }
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. public class UGUI_ScrollBar_Image : MonoBehaviour {
  6. private Scrollbar bar;//滚动条
  7. private RectTransform imageX;//图片
  8. private float canvasX = 1920f;//画布
  9. private float offset;//偏移量
  10. private void Awake()
  11. {
  12. //
  13. //GameObeject.Find();
  14. //从子物体里寻找物体,参数是路径,并且支持层级结构
  15. bar = transform.Find("Canvas/Scrollbar").GetComponent<Scrollbar>();
  16. //通过方法找到物体的transform直接转换成Rect Transform
  17. imageX = transform.Find("Canvas/Image") as RectTransform;
  18. bar.onValueChanged.AddListener(OnValueChanged);
  19. }
  20. // Use this for initialization
  21. void Start () {
  22. // - (图片的宽度 - 画布的宽度)
  23. offset = canvasX - imageX.sizeDelta.x;
  24. //当图片宽度小于画布宽度时,滚动条没有意义,不需要显示
  25. //offset 大于 0 的时候证明图片的宽度小于画布的宽度
  26. if (offset >= )
  27. {
  28. bar.gameObject.SetActive(false);
  29. }
  30. else
  31. {
  32. bar.gameObject.SetActive(true);
  33. }
  34. bar.value = ;
  35. }
  36.  
  37. // Update is called once per frame
  38. void Update () {
  39.  
  40. }
  41. //当Scroll bar的值改变时,执行的方法
  42. private void OnValueChanged(float value)
  43. {
  44. //根据value的值去改变图片的位置
  45. float posX = value * offset;
  46. imageX.anchoredPosition = new Vector2(posX, imageX.anchoredPosition.y);
  47. }
  48. }
补充内容-Rect Transform
当锚点分开时,怎么使用anchoredPosition移动图片到中心点的位置
设置位置:
参考锚点的计算公式
anchoredPosition是锚点指向中心点的向量

设置大小:
锚框的计算公式
sizeDelta的值和宽高无关

代码逻辑
锚线的设置
水平锚线:y相等,x不等
垂直锚线:x相等,y不等
算出参考锚点,偏移参考锚点
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. public class RectTransformTest : MonoBehaviour
  6. {
  7. public RectTransform leftImg; // 设置的是锚点
  8. public RectTransform rightImg; // 设置的是锚框
  9. public RectTransform upImg; // 设置的是水平锚线
  10. public RectTransform downImg; // 设置的是垂直锚线
  11. void Start()
  12. {
  13. // 设置图片的尺寸为 400,300
  14. // 设置图片的位置为 父物体的中心位置
  15. // ========================== leftImg 设置的是锚点
  16. if (leftImg.anchorMin.x == leftImg.anchorMax.x && leftImg.anchorMin.y == leftImg.anchorMax.y)
  17. {
  18. // 设置位置
  19. leftImg.anchoredPosition = Vector2.zero;
  20. // 设置图片尺寸
  21. leftImg.sizeDelta = new Vector2(, );
  22. }
  23. // ========================== rightImg 设置的是锚框
  24. if (rightImg.anchorMin.x != rightImg.anchorMax.x && rightImg.anchorMin.y != rightImg.anchorMax.y)
  25. {
  26. // 设置位置
  27. float anchorReferensePointX = ( - rightImg.pivot.x) * rightImg.anchorMin.x + rightImg.pivot.x * rightImg.anchorMax.x;
  28. float anchorReferensePointY = ( - rightImg.pivot.y) * rightImg.anchorMin.y + rightImg.pivot.y * rightImg.anchorMax.y;
  29. rightImg.anchoredPosition = rightImg.pivot - new Vector2(anchorReferensePointX, anchorReferensePointY);
  30. // 设置图片尺寸
  31. //rightImg.offsetMin = new Vector2(100, 100);
  32. //rightImg.offsetMax = new Vector2(-100, -100);
  33. rightImg.sizeDelta = new Vector2(-, -);
  34. //Debug.Log("RightImg sizeDelta : " + rightImg.sizeDelta); // sizeDelta = offsetMax - offsetMin; 结果: (-200, -200)
  35. }
  36. // ========================== upImg 设置的是水平锚线 (上方)
  37. if(upImg.anchorMin.y == upImg.anchorMax.y && upImg.anchorMin.x != upImg.anchorMax.x)
  38. {
  39. // 设置位置
  40. float anchorReferensePointX = ( - upImg.pivot.x) * upImg.anchorMin.x + upImg.pivot.x * upImg.anchorMax.x;
  41. float anchorReferensePointY = ( - upImg.pivot.y) * upImg.anchorMin.y + upImg.pivot.y * upImg.anchorMax.y;
  42. Vector2 anchorPos = upImg.pivot - new Vector2(anchorReferensePointX, anchorReferensePointY);
  43. RectTransform parentTrans = upImg.parent as RectTransform;
  44. anchorPos.y -= parentTrans.rect.height / ;
  45. upImg.anchoredPosition = anchorPos;
  46. // 设置图片尺寸
  47. upImg.offsetMin = new Vector2(, -);
  48. upImg.offsetMax = new Vector2(-, -);
  49. //upImg.sizeDelta = new Vector2(-200, 300);
  50. }
  51. // ========================== downImg 设置的是垂直锚线 (左方)
  52. if (downImg.anchorMin.x == downImg.anchorMax.x && downImg.anchorMin.y != downImg.anchorMax.y)
  53. {
  54. // 设置位置
  55. float anchorReferensePointX = ( - downImg.pivot.x) * downImg.anchorMin.x + downImg.pivot.x * downImg.anchorMax.x;
  56. float anchorReferensePointY = ( - downImg.pivot.y) * downImg.anchorMin.y + downImg.pivot.y * downImg.anchorMax.y;
  57. Vector2 anchorPos = downImg.pivot - new Vector2(anchorReferensePointX, anchorReferensePointY);
  58. RectTransform parentTrans = downImg.parent as RectTransform;
  59. anchorPos.x += parentTrans.rect.width / ;
  60. downImg.anchoredPosition = anchorPos;
  61. // 设置图片尺寸
  62. downImg.offsetMin = new Vector2(, );
  63. downImg.offsetMax = new Vector2(, -);
  64. //downImg.sizeDelta = new Vector2(400, -200);
  65. }
  66. }
  67. void Update()
  68. {
  69. }
  70. }

补充内容-Unity的委托和事件

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.Events; // Unity中使用的委托和事件的命名空间
  5. // C#中使用的委托
  6. // using System; // Action、Action<T>、Action<T, A> .....Action<A, B, C, .....> 没有返回值的
  7. // Func<TResult>、Func<T, TResult>、Func<A, B, .... TResult> 有返回值的
  8. // Predicate<T> 有一个参数,返回值是bool类型
  9. // Comparison<T>(T x, T y) 返回值是int型
  10. public class UnityEventTest : MonoBehaviour
  11. {
  12. public UnityAction myAction;
  13. public UnityEvent myEvent1; // 可以在检视面板中显示 用法同UI
  14. public MyEvent2 myEvent2;
  15. void Start()
  16. {
  17. #region Unity中提供的委托
  18. // 没有返回值 没有参数 相当于C#中的 Action
  19. UnityAction del1 = delegate ()
  20. {
  21. Debug.Log("delegate");
  22. };
  23. del1 += () => { Debug.Log("Lambda"); };
  24. del1 += Fun1;
  25. del1();
  26. UnityAction<int> del2 = delegate (int num) { Debug.Log(num); };
  27. // 有参的匿名委托,Unity委托中参数的个数最多4个
  28. UnityAction<int, int, int, int> del3 = (a, b, c, d) => { Debug.Log(a + b + c + d); };
  29. #endregion
  30. #region Unity中的事件
  31. UnityEvent myEvent = new UnityEvent();
  32. // 注册方法
  33. myEvent.AddListener(
  34. () =>
  35. {
  36. Debug.Log("这是Unity中的事件");
  37. }
  38. );
  39. myEvent.AddListener(Fun1);
  40. // 取消注册
  41. myEvent.RemoveListener(Fun1);
  42. myEvent.RemoveAllListeners();//无返回值无参数的事件,匿名委托只能用RemoveAllListeners();
  43. // 调用
  44. myEvent.Invoke();
  45. // Unity中有参数的事件 需要自己写一个类去继承 UnityEvent<T> 参数个数:最多4个
  46. // 通过自己的类去创建对象
  47. MyEvent2 myEvent2 = new MyEvent2();
  48. // 注册和取消注册同上
  49. // 调用
  50. myEvent2.Invoke();
  51. #endregion
  52. }
  53. void Update()
  54. {
  55. }
  56. public void Fun1()
  57. {
  58. }
  59. }
  60. public class MyEvent2 : UnityEvent<int> { }
  61. public class MyEvent3 : UnityEvent<int, float, bool, string> { }

Unity3D学习笔记(二十):Rect、Canvas、Toggle、Slider、ScrollBar的更多相关文章

  1. python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码

    python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...

  2. python3.4学习笔记(二十五) Python 调用mysql redis实例代码

    python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...

  3. python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法

    python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...

  4. python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字

    python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字在字符串里面插入指定分割符的方法,先把字符串变成list然后用join方法变成字符串str=' ...

  5. python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法

    python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法 在Python中字符串处理函数里有三个去空格(包括'\n', '\r', '\t', ' ')的函数 ...

  6. (C/C++学习笔记) 二十四. 知识补充

    二十四. 知识补充 ● 子类调用父类构造函数 ※ 为什么子类要调用父类的构造函数? 因为子类继承父类,会继承到父类中的数据,所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程. ...

  7. (C/C++学习笔记) 二十二. 标准模板库

    二十二. 标准模板库 ● STL基本介绍 标准模板库(STL, standard template library): C++提供的大量的函数模板(通用算法)和类模板. ※ 为什么我们一般不需要自己写 ...

  8. (C/C++学习笔记) 二十. 文件和流

    二十. 文件和流 ● 文件的概念 文件(file) 一. C/C++语言将文件作为字节序列(sequence of characters)来对待,但从编码角度,或说从对字节信息的解释来看,文件分为:文 ...

  9. Unity3D学习笔记(十二):2D模式和异步资源加载

    2D模式和3D模式区别:背景纯色,摄像机2D,没有深度轴 精灵图片设置 Normal map,法线贴图,更有立体感 Sprite (2D and UI),2D精灵贴图,有两种用途 1.当做UI贴图 2 ...

  10. Java基础学习笔记二十五 MySQL

    MySQL 在dos中操作mysql 连接mysql命令: mysql -uroot -p密码 ,连接OK,会出现mysql> 对数据库的操作 创建一个库 create database 库名 ...

随机推荐

  1. 【深入理解javascript】原型

    1.一切都是对象 一切(引用类型)都是对象,对象是属性的集合 typeof函数输出的一共有几种类型,在此列出: function show(x) { console.log(typeof(x)); / ...

  2. 更新Newtonsoft.Json后报异常,未能加载文件或程序集“Newtonsoft.Json

    未能加载文件或程序集“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或它的某一个 ...

  3. 智能指针 - 现代C++新特性总结

    C++98中的智能指针通过一个模板类auto_ptr来实现,new操作符返回的指针可以交由它来管理,程序员不用再显式的调用delete,这在一定程度上避免了堆内存忘记释放的问题:不过auto_ptr有 ...

  4. 高性能mysql 4 ,5章

    第4章 1:查询优化,多表连接时只取需要的列,要对select * 保持怀疑. 2:如果发现访问的数据行数很大,而生成的结果中数据行很少,那么可以尝试更复杂的修改 a: 使用覆盖索引,b: 更改架构, ...

  5. 测试人员需要了解的sql知识(基础篇)

    这是第一篇关于数据库的,本着详细的原则,基础的还是不能放过,还是那句话,有问题,欢迎指出! ------------------------------------------------------ ...

  6. [LeetCode] 443. String Compression_Easy tag:String

    Given an array of characters, compress it in-place. The length after compression must always be smal ...

  7. 2018-2019-2 网络对抗技术 20165324 Exp1:PC平台逆向破解

    2018-2019-2 网络对抗技术 20165324 Exp1:PC平台逆向破解 实验: 要求: 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(0.5分) 掌握反汇编与十六进制编 ...

  8. Summary: 书架问题

    Consider the problem of storing n books on shelves in a library. The order of the books is fixed by ...

  9. Summary: Difference between null and empty String

    String s1 = ""; means that the empty String is assigned to s1. In this case, s1.length() i ...

  10. zw版【转发·台湾nvp系列Delphi例程】HALCON HistoToThresh1

    zw版[转发·台湾nvp系列Delphi例程]HALCON HistoToThresh1 procedure TForm1.Button1Click(Sender: TObject);var imag ...