zoukankan      html  css  js  c++  java
  • AutoTile 自动拼接(六 大结局) 学习与实践

    昨天在网上找了一些资源图片,这回就不用担心 背景资源不多的问题了,现在我一边 制作,一边发布文章。 

    各种各样,500多个,这里还是特别感谢 ,万恶的资本主义,不设密码就给我分享。

    在制作前,大家看下这里的图片,和我之前的图片规格,有点不一样,他们大了一号。

    细心的朋友,可以拿这张 ,和我 之前的图比较下。

    哎,为了这500多张的 图,我也只能稍微改改 切图了,但做法都是一样的。

    里面有一些 动画图,需要切一下,我推荐

    这个软件,360会认为木马,其实没什么事情的,看你自己了。

    很方便吧,其实 不用切,改下程序也可以,不过我懒。。。。。。

    u3d中也是按16*16格子切,当然最后就有48张图了。

    好了,前期准备先说到这里,下面 开始 编写代码

    using UnityEngine;
    using System.Collections;
    using UnityEngine.UI;
    using LitJson;
    using System;
    
    public class myDown : MonoBehaviour
    {
        public Transform trs;
        public Transform go;
        int _x, _y;
        void Start()
        {
            _x = go.GetComponent<ResourcesSprite>().Widths - 1;
            _y = go.GetComponent<ResourcesSprite>().Heights - 1;
        }
    
        void Update()
        {
    
        }
    
        void OnFingerDown(FingerDownEvent e)
        { /* your code here */
            RaycastHitGet(e.Position);
        }
        void OnDrag(DragGesture gesture)
        {
             DragGesture dragGesture = (gesture.State == GestureRecognitionState.Ended) ? null : gesture;
             if (dragGesture)
             {
                 RaycastHitGet(gesture.Position);
             }
        }
        void RaycastHitGet(Vector3 e)
        {
            RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(e), Vector2.zero);
            if (hit)
            {
                if (hit.collider.tag == "sence")
                {
                    int type = 0;
    
                    for (int i = 0; i < trs.childCount; i++)
                    {
                        if (trs.GetChild(i).GetComponent<Toggle>().isOn)
                        {
                            type = i;
                        }
                    }
                    switch (type)
                    {
                        case 0: OnOneFourthFind(hit.collider.transform, "play0");
                            break;
                        case 1: OnOneFourthFind(hit.collider.transform, "play1");
                            break;
                        case 2: OnOneFourthFind(hit.collider.transform, "play2");
                            break;
                        case 3: OnOneFourthFind(hit.collider.transform, "play3");
                            break;
                        case 4: OnOneFourthFind(hit.collider.transform, "play4");
                            break;
                        case 5: OnOneFourthFind(hit.collider.transform, "play5");
                            break;
                        case 6: OnOneFourthFind(hit.collider.transform, "play6");
                            break;
                        case 7: OnOneFourthFind(hit.collider.transform, "play7");
                            break;
                        case 8: OnOneFourthFind(hit.collider.transform, "play8");
                            break;
                        case 9: OnOneFourthFind(hit.collider.transform, "play9");
                            break;
                        case 10: OnOneFourthFind(hit.collider.transform, "play10");
                            break;
                        case 11: OnOneFourthFind(hit.collider.transform, "play11");
                            break;
                        case 12: OnOneFourthFind(hit.collider.transform, "play12");
                            break;
                        case 13: OnOneFourthFind(hit.collider.transform, "play13");
                            break;
                        case 14: OnOneFourthFind(hit.collider.transform, "play14");
                            break;
                        case 15: OnOneFourthFind(hit.collider.transform, "play15");
                            break;
                        case 16: OnOneFourthFind(hit.collider.transform, "play16");
                            break;
                        case 17: OnOneFourthFind(hit.collider.transform, "play17");
                            break;
                        case 18: OnOneFourthFind(hit.collider.transform, "play18");
                            break;
                        case 19: OnOneFourthFind(hit.collider.transform, "play19");
                            break;
                        case 20: OnOneFourthFind(hit.collider.transform, "play20");
                            break;
                        case 21: OnOneFourthFind(hit.collider.transform, "play21");
                            break;
                        case 22: OnOneFourthFind(hit.collider.transform, "play22");
                            break;
                        case 23: OnOneFourthFind(hit.collider.transform, "play23");
                            break;
                        case 24: OnOneFourthFind(hit.collider.transform, "play24");
                            break;
                        case 25: OnOneFourthFind(hit.collider.transform, "play25");
                            break;
                        case 26: OnOneFourthFind(hit.collider.transform, "play26");
                            break;
                        case 27: OnOneFourthFind(hit.collider.transform, "play27");
                            break;
                        case 28: OnOneFourthFind(hit.collider.transform, "play28");
                            break;
                        case 29: OnOneFourthFind(hit.collider.transform, "play29");
                            break;
                        case 30: OnOneFourthFind(hit.collider.transform, "play30");
                            break;
                        case 31: OnOneFourthFind(hit.collider.transform, "play31");
                            break;
                        case 32: OnOneFourthFind(hit.collider.transform, "play32");
                            break;
    
    
                        default: break;
                    }
                }
            }
        }
    
    
    
        //一对四 查找坐标
        void OnOneFourthFind(Transform tr, string keys)
        {
            int[] st = new int[4];
            st[0] = 12;
            st[1] = 17;
            st[2] = 42;
            st[3] = 47;
            for (int i = 0; i < 4; i++)
            {
                AutoTileShow autoTileShow1 = tr.GetChild(i).GetComponent<AutoTileShow>();
                autoTileShow1.keys = keys;
                autoTileShow1.Weight = st[i];
            }
            tr.GetComponent<keyRoot>().keys = keys;
            string[] bit = OnWeightRange(tr);
            ArrayList arr = OnWeightRangeTr(bit, tr);
            arr.Add(tr);
            for (int ii = 0; ii < arr.Count; ii++)
            {
                Transform aa = arr[ii] as Transform;
                OnWeightNumberFind(aa, aa.GetComponent<keyRoot>().keys);
            }
        }
        //八方向对象获得
        ArrayList OnWeightRangeTr(string[] bit, Transform tts)
        {
            uint[] bbt = new uint[8];
            ArrayList arr = new ArrayList();
            for (int i = 0; i < 8; i++)
            {
                if (bit[i] != "0")
                {
                    arr.Add(tts.parent.Find(bit[i]));
                }
            }
            return arr;
        }
    
        //八方向范围获得
        string[] OnWeightRange(Transform tts)
        {
            string[] tt = tts.name.Split(',');
            int xx = int.Parse(tt[0].ToString());
            int yy = int.Parse(tt[1].ToString());
            string[] bit = new string[8];
    
            bit[0] = (xx - 1) + "," + (yy + 1);
            bit[1] = xx + "," + (yy + 1);
            bit[2] = (xx + 1) + "," + (yy + 1);
            bit[3] = (xx + 1) + "," + (yy);
            bit[4] = (xx + 1) + "," + (yy - 1);
            bit[5] = xx + "," + (yy - 1);
            bit[6] = (xx - 1) + "," + (yy - 1);
            bit[7] = (xx - 1) + "," + yy;
    
            if (xx == 0)
            {
                bit[0] = "0";
                bit[6] = "0";
                bit[7] = "0";
            }
            if (xx == _x)
            {
                bit[2] = "0";
                bit[3] = "0";
                bit[4] = "0";
            }
            if (yy == 0)
            {
                bit[4] = "0";
                bit[5] = "0";
                bit[6] = "0";
            }
            if (yy == _y)
            {
                bit[0] = "0";
                bit[1] = "0";
                bit[2] = "0";
            }
            return bit;
        }
        //权值检索
        void OnWeightNumberFind(Transform tts, string keys)
        {
            string[] bit = OnWeightRange(tts);
            uint[] bbt = new uint[8];
            for (int i = 0; i < 8; i++)
            {
                if (bit[i] != "0")
                {
                    if (tts.parent.Find(bit[i]).GetComponent<keyRoot>().keys == keys)
                    {
                        bbt[i] = OnConvert(i);
                    }
                    else
                    {
                        bbt[i] = 0;
                    }
                }
                else
                {
                    bbt[i] = 0;
                }
            }
    
            uint tb = 0;
            for (int i = 0; i < 8; i++)
            {
                tb |= bbt[i];
            }
            for (int k = 0; k < 4; k++)
            {
                tts.GetChild(k).GetComponent<AutoTileShow>().Weight = (int)(GameModel.getInstance().weightSprite[tb][k]);
                tts.GetChild(k).GetComponent<AutoTileShow>().open = true;
            }
        }
        //转换
        uint OnConvert(int i)
        {
            uint ty = 0;
            switch (i)
            {
                case 0: ty = 1;
                    break;
                case 1: ty = 2;
                    break;
                case 2: ty = 4;
                    break;
                case 3: ty = 8;
                    break;
                case 4: ty = 16;
                    break;
                case 5: ty = 32;
                    break;
                case 6: ty = 64;
                    break;
                case 7: ty = 128;
                    break;
            }
            return ty;
        }
    }
    using UnityEngine;
    using System.Collections;
    
    public class AutoTileShow : MonoBehaviour
    {
        int i = 0;
        private Sprite m_Image;
        public bool open = true;
        Sprite[] sp;
    
        void Start()
        {
            if (!gameObject.GetComponent<SpriteRenderer>())
            {
                m_Image = gameObject.AddComponent<SpriteRenderer>().sprite;
            }
    
            sp = new Sprite[4];//图片数据临时存放 
        }
    
        float timebattle;
        public string keys;
        public int Weight;
        int maxTotal = 4;
        void Update()
        {
    
            timebattle -= Time.deltaTime;
            if (timebattle <= 0)
            {
                timebattle = .2f;//闪烁频率 
    
                if (open)
                {
                    switch (keys)
                    {
                        case "play0":
                        case "play2":
                        case "play3":
                        case "play4":
                        case "play5":
                        case "play6":
                        case "play7":
                        case "play8":
                        case "play9":
                        case "play10":
                        case "play11":
                        case "play12":
                        case "play13":
                        case "play14":
                        case "play15":
                        case "play16":
                        case "play17":
                        case "play18":
                        case "play19":
                        case "play20":
                        case "play21":
                        case "play22":
                        case "play23":
    
                            maxTotal = 1; 
                            break;
                        case "play24":
                        case "play25":
    
                            maxTotal = 3;
                            break;
    
                        case "play26":
                        case "play27":
                        case "play28":
                        case "play29":
                        case "play30":
                        case "play31":
                        case "play32":
    
                            maxTotal = 4;
                            break;
                        default: break;
                    }
                    sp = OnDirectionAutoTile(keys, Weight);
    
                    open = false;
                }
                if (i > maxTotal - 1)
                {
                    i = 0;
                }
                m_Image = sp[i];
                gameObject.GetComponent<SpriteRenderer>().sprite = m_Image;
                i++;
            }
        }
    
        public Sprite[] OnDirectionAutoTile(string key, int number)
        {
            Sprite[] mapTile = new Sprite[4];
            mapTile = GameModel.getInstance()._TileSprite[number + "," + key];
            return mapTile;
        }
    }

    这么一贴,估计没几个朋友有兴趣继续看下去了。

    好吧。上demo

    链接:http://pan.baidu.com/s/1hrdKyHm 密码:h6wl

    有什么不懂的,可以在 年后10天,提问

  • 相关阅读:
    50多条mysql数据库优化建议
    反向代理|与正向代理区别区别
    CDN技术
    mysql存储过程对900w数据进行操作测试
    Navicat For Mysql快捷键
    Linux下目标文件分析
    Linux下的两个经典宏定义 转
    debuginfo-install glibc-2.17-157.el7.x86_64
    index merge 引起的死锁分析
    linux内核源码中常见宏定义
  • 原文地址:https://www.cnblogs.com/big-zhou/p/5179473.html
Copyright © 2011-2022 走看看