Unity 2048数字控件Num的代码实现

来源:互联网 发布:采集卡监控软件 编辑:程序博客网 时间:2024/05/22 15:09

Num控件的设置

相应的sprite图片
- 图片的Testure Type要设置为Sprite(2D or UI)。
Num类属性的设置

Num类的基本属性

  1. public int NumIndex=2
    记录Num对象显示数字的值,默认为2
  2. public int InitX,InitY
    记录初始位置,背景棋盘为一个4X4的方格,左上角为(0,0),右下角为(3,3).
  3. public Sprite[] ImageSouce
    创建一个Sprite数组,用来储存显示不同数字时对应的Sprite属性,创建Sprite数组需要类实现using UnityEngine.UI。
  4. private Image NumImage
    用来储存和设置当前对象的image属性
  5. private Transform Mark
    设置了一个标志,该标志在(0,0)点位置,用来帮助Num对象确定自身位置

Num类中的方法

  1. 根据NumIndex改变NumImage
    #region 根据NumIndex改变NumImage-UpdateImage    private void UpdateImage()    {        NumImage.sprite = ImageSouce[CorrespondImageAndIndex(NumIndex)];    }    #endregion

其中CorrespondImageAndIndex(int x)方法作用是将NumIndex与ImageSouce数组中的图片一一对应

  1. 将NumIndex与ImageSouce一一对应
#region 将NumIndex与ImageSouce一一对应-CorrespondImageAndIndex(int NumIndex )    private int CorrespondImageAndIndex(int NumIndex ){        switch (NumIndex) {             case 2:                return 0;            case 4:                return 1;            case 8:                return 2;            case 16:                return 3;            case 32:                return 4;            case 64:                return 5;            case 128:                return 6;            case 256:                return 7;            case 512:                return 8;            case 1024:                return 9;            case 2048:                return 10;            default:                return 0;        }    }    #endregion
  1. 初始化位置
    #region 初始化位置-InitPos    private void InitPos() {        this.transform.localPosition = new Vector3(Mark.localPosition.x + 84 * InitX, Mark.localPosition.y - 84 * InitY, Mark.localPosition.z);//localPosition是在父物体下相对位置    }    # endregion
  1. 生成动画
    #region 生成动画-CreateNum    private void CreateNum()    {        iTween.ScaleTo(this.gameObject, new Vector3(1, 1, 1), 0.2f);    }    #endregion

iTween.ScaleTo() :这里使用了iTween插件,插件中的ScaleTo方法的作用是将目标控件大小在一定时间内变化到指定大小。
this.gameObject代表控件指定,new Vector3(1, 1, 1)是目标大小,0.2f是变化时间。

  1. Awake、Start、Update方法
 void Awake() {        NumImage = this.GetComponent<Image>();         //获取当前对象的Image属性          }    void Start() {        Mark = this.transform.parent.Find("Mark").transform;        //取到标志控件        CreateNum();        //创建该控件后,自动调用创建函数        InitPos();        //设置初始位置    }    void Update() {        UpdateImage();        //随时监控控件image的变化,并及时作出改变    }
原创粉丝点击