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

    今天把 图像数据保存完善了一下。天冷,没打多少字,见谅。

    接着昨天说的,首先我们打开u3d,做一个空物体gameobject,然后做几个sprite,如下图所示

    上面的sprite 排成四个 正方形。

    资源,你可以用昨天 我说的切好的图像,随意放里面。

    下面我们给 gameobject 添加 代码

    using UnityEngine;
    using System.Collections;
    
    public class ResourcesSprite : MonoBehaviour
    {
    
        void Start()
        {
            OnAutoTileSave("11", "sea", 0, 3);
            OnAutoTileSave("22", "sea", 1, 3);
            OnAutoTileSave("33", "sea", 2, 3);
        }
    
    
        void Update()
        {
    
        }
    
        //根据 图片名字,键值名字,当前帧 和 总共帧 保存单例中
        void OnAutoTileSave(string path, string name, int current, int total)
        {
            object[] objs = Resources.LoadAll(path);
            Sprite[, ,] dict;
            //是否存在 键值
            if (GameModel.getInstance().dictSprite.ContainsKey(name))
            {
                dict = GameModel.getInstance().dictSprite[name];
            }
            else
            {
                dict = new Sprite[total, 4, 6];
                GameModel.getInstance().dictSprite.Add(name, dict);
            }
    
            int i = 0;
            foreach (object obj in objs)
            {
                Sprite sp = obj as Sprite;
                if (sp != null)
                {
    
                    dict[current, i / 6, i % 6] = sp;
                    i++;
                }
            } 
            GameModel.getInstance().dictSprite[name] = dict;
        }
    }

    这个代码很简单,里面用到了单例,我也贴出来,防止小白不懂

    using UnityEngine;
    using System.Collections;
    using System; 
    using System.Collections.Generic;
    
    
    public class GameModel
    { 
        public Dictionary<string, Sprite[, ,]> dictSprite;
        private static GameModel model; 
        public static GameModel getInstance()
        {
            if (model == null)
            {
                model = new GameModel();
    
                model.init();
            }
            return model;
        }
    
        private void init()
        {
            dictSprite = new Dictionary<string, Sprite[, ,]>();
        }
    }

    单例我就不说了,说说 ResourcesSprite类,

    它的功能主要是 加载资源,然后放到 字典里面去,为什么要这么写法,原因是为了 显示更加方便。

    废话不多说,我们给 下面 四个 sprite,分别添加 脚本

    using UnityEngine;
    using System.Collections;
    
    public class AutoTileShow : MonoBehaviour
    {
        int i = 0;
        private Sprite m_Image;
        void Start()
        {
            if (!gameObject.GetComponent<SpriteRenderer>())
            {
                m_Image = gameObject.AddComponent<SpriteRenderer>().sprite;
            }
        }
    
        float timebattle;
        void Update()
        {
            timebattle -= Time.deltaTime;
            if (timebattle <= 0)
            {
                timebattle = .2f;//闪烁频率
    
    
                if (i == 3)
                {
                    i = 0;
                }
                m_Image = GameModel.getInstance().dictSprite["sea"][i, 2, 3];
                gameObject.GetComponent<SpriteRenderer>().sprite = m_Image;
                i++;
            } 
        }
    }

    这里 的作用是 从 单例的字典里面 找到并  显示出来。

    为了让update 播放的 别这么快,我就 添加了 0.2秒 换一张图。

    换图?是的,现在 显示出来的是  动画的 水,你们 按照昨天我这么搞的,结合今天的,就能看出是动画的水了。

    今天先到这,打这几个字,手基本就冻麻木了,明天继续吧。

    链接:http://pan.baidu.com/s/1eQSoMl0 密码:8c7m

  • 相关阅读:
    C 和 C++ 的标准库分别有自己的 locale 操作方法,C 标准库的 locale 设定函数是 setlocale(),而 C++ 标准库有 locale 类和流对象的 imbue() 方法(gcc使用zh_CN.GBK,或者zh_CN.UTF-8,VC++使用Chinese_People's Republic of China.936或者65001.)
    QCache 缓存(模板类,类似于map,逻辑意义上的缓存,方便管理,和CPU缓存无关。自动获得被插入对象的所有权,超过一定数量就会抛弃某些值)
    QBuffer简单操作(被看做一个标准的可随机访问的文件,支持信号)
    Qt里的原子操作QAtomicInteger
    进程、线程、协程、例程、过程
    net Core 2.2
    如何看源码
    code review规则
    NET Core中使用Dapper操作Oracle存储过程
    实现一个Promise
  • 原文地址:https://www.cnblogs.com/big-zhou/p/5155343.html
Copyright © 2011-2022 走看看