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

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

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

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

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

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

using UnityEngine;
using System.Collections; public class ResourcesSprite : MonoBehaviour
{ void Start()
{
OnAutoTileSave("", "sea", , );
OnAutoTileSave("", "sea", , );
OnAutoTileSave("", "sea", , );
OnSortAutoTile("sea", );
} void Update()
{ } //对资源图 排序
void OnSortAutoTile(string key, int total = )
{
Sprite[, ,] dict = GameModel.getInstance().dictSprite[key];
for (int j = ; j < ; j++)
{
Sprite[] sp = new Sprite[total];
for (int i = ; i < total; i++)
{
sp[i] = dict[i, j / , j % ];
}
int x1 = j / ;
int y1 = j % ;
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, , ];
GameModel.getInstance().dictSprite.Add(key, dict);
} int i = ;
foreach (object obj in objs)
{
Sprite sp = obj as Sprite;
if (sp != null)
{ dict[current, i / , i % ] = sp;
i++;
}
}
GameModel.getInstance().dictSprite[key] = dict;
} }

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

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

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

using UnityEngine;
using System.Collections; public class AutoTileShow : MonoBehaviour
{
public int directions;
int i = ;
private Sprite m_Image; bool open = true;
Sprite[] sp; void Start()
{
if (!gameObject.GetComponent<SpriteRenderer>())
{
m_Image = gameObject.AddComponent<SpriteRenderer>().sprite;
}
sp = new Sprite[];//图片数据临时存放
} float timebattle; void Update()
{
timebattle -= Time.deltaTime;
if (timebattle <= )
{
timebattle = .2f;//闪烁频率 if (i == )
{
i = ;
} if (open)
{
sp = OnGetAutoTile(directions, );
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 :
arr.Add( + "," + + "," + "sea");
arr.Add( + "," + + "," + "sea");
arr.Add( + "," + + "," + "sea");
arr.Add( + "," + + "," + "sea");
map = OnDirectionAutoTile(direction, key, arr);
break;
case :
arr.Add( + "," + + "," + "sea");
arr.Add( + "," + + "," + "sea");
arr.Add( + "," + + "," + "sea");
arr.Add( + "," + + "," + "sea");
map = OnDirectionAutoTile(direction, key, arr);
break;
case :
arr.Add( + "," + + "," + "sea");
arr.Add( + "," + + "," + "sea");
arr.Add( + "," + + "," + "sea");
arr.Add( + "," + + "," + "sea");
map = OnDirectionAutoTile(direction, key, arr);
break;
case :
arr.Add( + "," + + "," + "sea");
arr.Add( + "," + + "," + "sea");
arr.Add( + "," + + "," + "sea");
arr.Add( + "," + + "," + "sea");
map = OnDirectionAutoTile(direction, key, arr);
break;
case :
arr.Add( + "," + + "," + "sea");
arr.Add( + "," + + "," + "sea");
arr.Add( + "," + + "," + "sea");
arr.Add( + "," + + "," + "sea");
map = OnDirectionAutoTile(direction, key, arr);
break;
case :
arr.Add( + "," + + "," + "sea");
arr.Add( + "," + + "," + "sea");
arr.Add( + "," + + "," + "sea");
arr.Add( + "," + + "," + "sea");
map = OnDirectionAutoTile(direction, key, arr);
break;
case :
arr.Add( + "," + + "," + "sea");
arr.Add( + "," + + "," + "sea");
arr.Add( + "," + + "," + "sea");
arr.Add( + "," + + "," + "sea");
map = OnDirectionAutoTile(direction, key, arr);
break;
default: break;
}
return map;
} public Sprite[] OnDirectionAutoTile(int direction, string key, ArrayList arr)
{
Sprite[] mapTile = new Sprite[];
mapTile = GameModel.getInstance().autoTileSprite[arr[direction - ].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 这几种,先讲究下吧。

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

AutoTile 自动拼接(四) 学习与实践的更多相关文章

  1. AutoTile 自动拼接(一) 学习与实践

    恩,大家好,这两天江苏冷空气袭击,下了今年 第一场第二场雪. 不过今天我要说的 ,和 上面的 屁关系都没有. 今天要说的是 2d无缝自动拼接.大家有没有玩过  RPG Maker VX Ace. 类似 ...

  2. AutoTile 自动拼接(五) 学习与实践

    今天不讲 权值检索,考虑到后期 自动拼接 做出来 更好玩,操作更方便.所以 今天我 补充一节, 网格计算与操作. 具体就是这么个效果,和地图编辑器一样,不过图块还是没有自然的拼接,这个一定一定是 下一 ...

  3. AutoTile 自动拼接(六 大结局) 学习与实践

    昨天在网上找了一些资源图片,这回就不用担心 背景资源不多的问题了,现在我一边 制作,一边发布文章. 各种各样,500多个,这里还是特别感谢 ,万恶的资本主义,不设密码就给我分享. 在制作前,大家看下这 ...

  4. AutoTile 自动拼接(三) 学习与实践

    今天把 图像数据保存完善了一下.天冷,没打多少字,见谅. 接着昨天说的,首先我们打开u3d,做一个空物体gameobject,然后做几个sprite,如下图所示 上面的sprite 排成四个 正方形. ...

  5. AutoTile 自动拼接(二) 学习与实践

    开始代码前,我们要做点准备工作. 下面 跟着我做. 首先我 扣了一个 图. 这个是 做 水的资源,所以是动态的,我把其余两张也扣了出来. 看起来一样,不是,这样看肯定 看不出所以然,你们先放到u3d中 ...

  6. AutoTile 自动拼接 番外篇(自动融合技术)

    http://pan.baidu.com/s/1dDQyfSl 密码:ttud 先睹为快吧. 之后 还差一个 智能替换 技术.

  7. RabbitMQ学习系列四-EasyNetQ文档跟进式学习与实践

    EasyNetQ文档跟进式学习与实践 https://www.cnblogs.com/DjlNet/p/7603554.html 这里可能有人要问了,为什么不使用官方的nuget包呐:RabbitMQ ...

  8. hadoop2.5.2学习及实践笔记(四)—— namenode启动过程源码概览

    对namenode启动时的相关操作及相关类有一个大体了解,后续深入研究时,再对本文进行补充 >实现类 HDFS启动脚本为$HADOOP_HOME/sbin/start-dfs.sh,查看star ...

  9. NLP+词法系列(二)︱中文分词技术简述、深度学习分词实践(CIPS2016、超多案例)

    摘录自:CIPS2016 中文信息处理报告<第一章 词法和句法分析研究进展.现状及趋势>P4 CIPS2016 中文信息处理报告下载链接:http://cips-upload.bj.bce ...

随机推荐

  1. C# 语言规范_版本5.0 (第0章 目录)

    C# 语言规范 版本5.0 注意 © 1999-2012 Microsoft Corporation.保留所有权利. Microsoft.Windows.Visual Basic.Visual C# ...

  2. 关于python的类方法、实例方法和静态方法区别

    python的类方法需要在方法前面加装饰器:@classmethod ,静态方法是在方法前面加装饰器:@staticmethod. 类方法.类属性是属于类自身,属于类自身的命名空间,和实例方法.实例属 ...

  3. [ An Ac a Day ^_^ ] CodeForces 468A 24 Game 构造

    题意是让你用1到n的数构造24 看完题解感觉被样例骗了…… 很明显 n<4肯定不行 然后构造出来4 5的组成24的式子 把大于4(偶数)或者5(奇数)的数构造成i-(i-1)=1 之后就是无尽的 ...

  4. FZU 1894 志愿者选拔 单调队列

    训练赛的题…… 暴力一波明显超时…… 最近刚学stl 感觉是优先队列 但还是太会用…… 以后可以试一下优先队列…… 比赛之后百度了一下 发现是单调队列…… 看起来挺简单的 也算个模版题吧…… 总之思路 ...

  5. mnesia

    1.模式创建 mnesia:create_schema([node()|nodes()]).集群的节点之间创建模式 2.启动和停止 application:start(mnesia). applica ...

  6. Python 跳出多重循环

    Python 本身没有“break n” 和“goto” 的语法,这也造成了Python 难以跳出多层(特定层数)循环.下面是几个跳出多层(特定层数)循环的tip. 1.自定义异常   class g ...

  7. 行列转换之静态、动态、PIVOT方法

    /* 标题:普通行列转换(version 2.0) 作者:爱新觉罗.毓华  时间:2008-03-09 地点:广东深圳 说明:普通行列转换(version 1.0)仅针对sql server 2000 ...

  8. Python 常见的内置模块

    datetime datetime是python处理日期和时间的标准库 获取当前日期和时间 我们先看看如何获取当前的日期和时间: >>> from datetime import d ...

  9. POJ1410 Intersection 计算几何

    题目大意:给出一个线段的两端,和矩形两端(不一定是左上和右下),问线段是否与矩形相交(若线段在矩形内也算相交).这题蒸鹅心-- 题目思路:判断所有情况:线段是否在矩形内,线段内一点是否在矩形内,线段是 ...

  10. php 提交表单

    滴答…滴答…的雨,欢迎大家光临我的博客. 学习是快乐的,教育是枯燥的. 博客园   首页   博问   闪存     联系   订阅  管理 随笔-58  评论-2017  文章-5  trackba ...