今天主要来说下,数据绑定。

之前第一章,我说到 把 资源图 画成格子,你们应该还有印象吧。

那么,当我 知道 格子数据,能否拿到 资源对应的图片呢?

大家先复习一下 第一章,发现很多格子数据 是相同的,有好多个1,好多个2 等等。

所以这里必须要定义一个方向,比如 左上角的1 ,右上角的1,左下角的1,右下角的1.

好,先把资源加载类,继续优化下

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);OnSortAutoTile("sea", 3);}void Update(){}//对资源图 排序void OnSortAutoTile(string key, int total = 3){Sprite[, ,] dict = GameModel.getInstance().dictSprite[key];for (int j = 0; j < 24; j++){Sprite[] sp = new Sprite[total];for (int i = 0; i < total; i++){sp[i] = dict[i, j / 4, j % 4];}int x1 = j / 4;int y1 = j % 4;GameModel.getInstance().autoTileSprite.Add(x1 + "," + y1 + "," + key, sp);}}//根据 图片名字,键值名字,当前帧 和 总共帧 保存单例中void OnAutoTileSave(string pathName, string key, int current, int total){object[] objs = Resources.LoadAll(pathName);Sprite[, ,] dict;//是否存在 键值if (GameModel.getInstance().dictSprite.ContainsKey(key)){dict = GameModel.getInstance().dictSprite[key];}else{dict = new Sprite[total, 6, 4];GameModel.getInstance().dictSprite.Add(key, dict);}int i = 0;foreach (object obj in objs){Sprite sp = obj as Sprite;if (sp != null){dict[current, i / 4, i % 4] = sp;i++;}}GameModel.getInstance().dictSprite[key] = dict;}}

大家可以看到,我增加了一个 资源排序的方法,因为 资源图 是 固定的 6*4 格子,应该不可能变,所以我也就写死了。

好,下面看看如何调用这个类。

同样,在昨天 那四个 sprite脚本中增加

using UnityEngine;
using System.Collections;public class AutoTileShow : MonoBehaviour
{public int directions;int i = 0;private Sprite m_Image;bool open = true;Sprite[] sp;void Start(){if (!gameObject.GetComponent<SpriteRenderer>()){m_Image = gameObject.AddComponent<SpriteRenderer>().sprite;}sp = new Sprite[3];//图片数据临时存放
    }float timebattle;void Update(){timebattle -= Time.deltaTime;if (timebattle <= 0){timebattle = .2f;//闪烁频率if (i == 3){i = 0;}if (open){sp = OnGetAutoTile(directions, 1);open = false;}m_Image = sp[i];gameObject.GetComponent<SpriteRenderer>().sprite = m_Image;i++;}}//通过 方向 权值 获取 对应图像public Sprite[] OnGetAutoTile(int direction, int weightNumber, string key = "sea"){Sprite[] map = { };ArrayList arr = new ArrayList();switch (weightNumber){case 1:arr.Add(0 + "," + 0 + "," + "sea");arr.Add(1 + "," + 0 + "," + "sea");arr.Add(0 + "," + 1 + "," + "sea");arr.Add(1 + "," + 1 + "," + "sea");map = OnDirectionAutoTile(direction, key, arr);break;case 2:arr.Add(0 + "," + 0 + "," + "sea");arr.Add(1 + "," + 0 + "," + "sea");arr.Add(0 + "," + 1 + "," + "sea");arr.Add(1 + "," + 1 + "," + "sea");map = OnDirectionAutoTile(direction, key, arr);break;case 3:arr.Add(0 + "," + 2 + "," + "sea");arr.Add(1 + "," + 2 + "," + "sea");arr.Add(0 + "," + 3 + "," + "sea");arr.Add(1 + "," + 3 + "," + "sea");map = OnDirectionAutoTile(direction, key, arr);break;case 4:arr.Add(2 + "," + 0 + "," + "sea");arr.Add(5 + "," + 0 + "," + "sea");arr.Add(2 + "," + 3 + "," + "sea");arr.Add(5 + "," + 3 + "," + "sea");map = OnDirectionAutoTile(direction, key, arr);break;case 5:arr.Add(2 + "," + 1 + "," + "sea");arr.Add(5 + "," + 1 + "," + "sea");arr.Add(2 + "," + 2 + "," + "sea");arr.Add(5 + "," + 2 + "," + "sea");map = OnDirectionAutoTile(direction, key, arr);break;case 6:arr.Add(3 + "," + 0 + "," + "sea");arr.Add(4 + "," + 0 + "," + "sea");arr.Add(3 + "," + 3 + "," + "sea");arr.Add(4 + "," + 3 + "," + "sea");map = OnDirectionAutoTile(direction, key, arr);break;case 7:arr.Add(3 + "," + 1 + "," + "sea");arr.Add(4 + "," + 1 + "," + "sea");arr.Add(3 + "," + 2 + "," + "sea");arr.Add(4 + "," + 2 + "," + "sea");map = OnDirectionAutoTile(direction, key, arr);break;default: break;}return map;}public Sprite[] OnDirectionAutoTile(int direction, string key, ArrayList arr){Sprite[] mapTile = new Sprite[3];mapTile = GameModel.getInstance().autoTileSprite[arr[direction - 1].ToString()];return mapTile;/***switch (direction){case 1://左上 mapTile = GameModel.getInstance().autoTileSprite[arr[0].ToString()];break;case 2://左下mapTile = GameModel.getInstance().autoTileSprite[1 + "," + 0 + "," + key];break;case 3://右上mapTile = GameModel.getInstance().autoTileSprite[0 + "," + 1 + "," + key];break;case 4://右下mapTile = GameModel.getInstance().autoTileSprite[1 + "," + 1 + "," + key];break;default: break;}* **/}
} 

增加后,我们在u3d界面中,看到一个方向变量。

我们把 四个图,按照左上左下右上右下 1234,对应起来,大家也可以看看这个脚本,有部分注释的,也是这么定义的。

void Update() 中,我们运行  sp = OnGetAutoTile(directions, 1);

注意,这个1 就是 权值,也就是 绑定格子的数据值。

我们可以看到 动画状态的 图,如下。因为 是1 的格子,要求四个方向。

链接:http://pan.baidu.com/s/1c1dOojm 密码:esis

注:OnGetAutoTile方法 写的不是很好,因为我还没找到 规律来优化它,不过反正 只有1-7 这几种,先讲究下吧。

好了,今天先说道这里,下一节是  权值检测,很重要的一章哦

转载于:https://www.cnblogs.com/big-zhou/p/5157047.html

AutoTile 自动拼接(四) 学习与实践相关推荐

  1. 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(四)(Python语言基础(2))

    [神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(四)(Python语言基础(2)) 第4讲 Python语言基础(2) 4.1 内置数据结构 4.1.1 序列数据结构(sequ ...

  2. 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(十四)(卷积神经网络))

    [神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(十四)(卷积神经网络)) 14 卷积神经网络 14.1 深度学习基础 14.1.1 深度学习的基本思想 14.1.2 深度学习三 ...

  3. 计算机科学与技术学习路线编程基础四大件应用实践编程(含C++学习路线)

    计算机科学与技术学习路线&编程基础四大件&应用实践编程(含C++学习路线) 基本介绍 本人211科班出身,目前大学临近毕业,想给迷茫的同行者或者后来人一些建议和推荐,少走弯路.想想自己 ...

  4. 章节四:BeautifulSoup实践

    章节四:BeautifulSoup实践 目录 章节四:BeautifulSoup实践 1. 复习 2. 项目:解密吴氏私厨 3. 分析过程 4. 代码实现(一) 4.1 获取与解析 4.2 提取最小父 ...

  5. 【PWA学习与实践】(3) 让你的WebApp离线可用

    <PWA学习与实践>系列文章已整理至gitbook - PWA学习手册,文字内容已同步至learning-pwa-ebook.转载请注明作者与出处. 本文是<PWA学习与实践> ...

  6. 《自动驾驶网络解决方案白皮书》研读(一):电信产业自动驾驶网络探索与实践

    电信网络发展的机遇与挑战 在历史发展的滚滚长河中,人类追求先进生产力的脚步从不曾停歇.每一次技术革命的出现,都代表了一次生产力的发展更迭,驱动人类社会迈向新的发展纪元.工业革命,电力革命和信息技术革命 ...

  7. SEO小白学习与实践(二):SEO相关基础知识与自有网站诊断

    前言 两年前建网站的时候,一切都是从百度检索开始的,遇到问题就问度娘.后来发现,这样的方法不是很好.度娘可以帮助解决铁定问题,但是非常系统的知识最好还是从书本上获取.于是,这次SEO学习咱就改变思路, ...

  8. 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(八)(TensorFlow基础))

    [神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(八)(TensorFlow基础)) 8 TensorFlow基础 8.1 TensorFlow2.0特性 8.1.1 Tenso ...

  9. 产品经理知识体系学习与实践指南

    新产品开发管理:从流程到体系 0.3 产品经理:角色与知识体系 产品经理 对产品生命周期的各个阶段,产品的孕育.创意.概念.开发.上市负责,以及对产品线和产品组合负责:不仅对实体产品负责,还要对服务. ...

  10. 干货 | 弱监督学习框架 Snorkel 在大规模文本数据集自动标注任务中的实践

    作者简介 Jay,携程高级算法经理,关注机器学习和深度学习领域在酒店场景可落地的相关技术. 引言 近年来,得益于深度学习的巨大发展,自然语言处理(NLP)领域也爆发了多个如 BERT 等state-o ...

最新文章

  1. 警告: Could not load driverClass com.mysql.cj.jdbc.Driver
  2. 抽象类的作用之一:sdk 传递你需要的参数
  3. 四种主流的 API 架构风格对比
  4. 每天一个linux命令(50):crontab命令
  5. 数据挖掘流程(二):数据预处理
  6. php 5.4日志文件在哪里,我的错误日志文件在哪里?(Where are my error log files?)
  7. 剑指offer:按之字形打印二叉树(栈|双向队列+中序遍历)
  8. 消息中间件学习总结(5)——RocketMQ之Apache RocketMQ背后的设计思路与最佳实践
  9. phpmyadmin的安装和使用
  10. 用java网络编程中的TCP方式上传文本文件及出现的小问题
  11. 基于音形码的中文字符串相似度算法(转)
  12. 【易实战】Spring Cloud微服务架构12要素应用 Twelve‑Factor App
  13. 软件企业CMMI认证需要什么条件?
  14. 区块链之门 | Reach on Conflux 2021 黑客松开赛
  15. u大师装iso系统linux,u大师给苹果电脑装win7win10系统
  16. Python Basic Grammar
  17. 使用纯JavaCV实现颜色分割 / 轮廓提取 / 离焦 / 线性旋转变焦模糊 / 灰度化 / 标注等处理
  18. 【Spark重点难点】你从未深入理解的RDD和关键角色
  19. AD如何修改图纸大小
  20. linux里 read函数用法

热门文章

  1. 循环神经网络系列(二) LSTM 和 GRU
  2. 经典机器学习系列(十二)【学习排序】
  3. 手把手教你强化学习 (一) 什么是强化学习?与机器学习有什么区别?
  4. 利用 Nginx 实现限流
  5. Windows10右键没有新建文本文件
  6. bzoj 3351 [ioi2009]Regions
  7. 手撕代码合集[短期更新]
  8. vue 绑定 class 和 内联样式(style)
  9. 【kafka】生产者速度测试
  10. 苹果pns推送和唤醒