AutoTile 自动拼接(四) 学习与实践
今天主要来说下,数据绑定。
之前第一章,我说到 把 资源图 画成格子,你们应该还有印象吧。
那么,当我 知道 格子数据,能否拿到 资源对应的图片呢?
大家先复习一下 第一章,发现很多格子数据 是相同的,有好多个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 自动拼接(四) 学习与实践的更多相关文章
- AutoTile 自动拼接(一) 学习与实践
恩,大家好,这两天江苏冷空气袭击,下了今年 第一场第二场雪. 不过今天我要说的 ,和 上面的 屁关系都没有. 今天要说的是 2d无缝自动拼接.大家有没有玩过 RPG Maker VX Ace. 类似 ...
- AutoTile 自动拼接(五) 学习与实践
今天不讲 权值检索,考虑到后期 自动拼接 做出来 更好玩,操作更方便.所以 今天我 补充一节, 网格计算与操作. 具体就是这么个效果,和地图编辑器一样,不过图块还是没有自然的拼接,这个一定一定是 下一 ...
- AutoTile 自动拼接(六 大结局) 学习与实践
昨天在网上找了一些资源图片,这回就不用担心 背景资源不多的问题了,现在我一边 制作,一边发布文章. 各种各样,500多个,这里还是特别感谢 ,万恶的资本主义,不设密码就给我分享. 在制作前,大家看下这 ...
- AutoTile 自动拼接(三) 学习与实践
今天把 图像数据保存完善了一下.天冷,没打多少字,见谅. 接着昨天说的,首先我们打开u3d,做一个空物体gameobject,然后做几个sprite,如下图所示 上面的sprite 排成四个 正方形. ...
- AutoTile 自动拼接(二) 学习与实践
开始代码前,我们要做点准备工作. 下面 跟着我做. 首先我 扣了一个 图. 这个是 做 水的资源,所以是动态的,我把其余两张也扣了出来. 看起来一样,不是,这样看肯定 看不出所以然,你们先放到u3d中 ...
- AutoTile 自动拼接 番外篇(自动融合技术)
http://pan.baidu.com/s/1dDQyfSl 密码:ttud 先睹为快吧. 之后 还差一个 智能替换 技术.
- RabbitMQ学习系列四-EasyNetQ文档跟进式学习与实践
EasyNetQ文档跟进式学习与实践 https://www.cnblogs.com/DjlNet/p/7603554.html 这里可能有人要问了,为什么不使用官方的nuget包呐:RabbitMQ ...
- hadoop2.5.2学习及实践笔记(四)—— namenode启动过程源码概览
对namenode启动时的相关操作及相关类有一个大体了解,后续深入研究时,再对本文进行补充 >实现类 HDFS启动脚本为$HADOOP_HOME/sbin/start-dfs.sh,查看star ...
- NLP+词法系列(二)︱中文分词技术简述、深度学习分词实践(CIPS2016、超多案例)
摘录自:CIPS2016 中文信息处理报告<第一章 词法和句法分析研究进展.现状及趋势>P4 CIPS2016 中文信息处理报告下载链接:http://cips-upload.bj.bce ...
随机推荐
- MVC3+EF4.1学习系列(十)----MVC+EF处理树形结构
通过前几篇文章 我们处理了 一对一, 一对多,多对多关系 很好的发挥了ORM框架的做用 但是 少说了一种 树形结构的处理, 而这种树形关系 我们也经常遇到,常见的N级类别的处理, 以及经常有数据与类别 ...
- Excel教程(12) - 数学和三角函数
ABS 用途:返回某一参数的绝对值. 语法:ABS(number) 参数:number 是需要计算其绝对值的一个实数. 实例:如果 A1=-16,则公式"=ABS(A1)&quo ...
- chapter 13_1 算术类的元方法
假设用table来表示集合,用function去计算集合的交集.并集. 为了保持名称空间的整齐,将这些函数存入一个名为Set的table中. 现在,假设用“+”来计算两个集合的并集,那么就要让所有用于 ...
- BcdTool(系统启动菜单管理器) v1.0912 绿色版
软件名称: 系统启动菜单管理器(BcdTool)软件语言: 简体中文授权方式: 免费软件运行环境: Win 32位/64位软件大小: 903KB图片预览: 软件简介:BcdTool是一款windows ...
- NYOJ-1036 非洲小孩(贪心)
非洲小孩 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 家住非洲的小孩,都很黑.为什么呢?第一,他们地处热带,太阳辐射严重.第二,他们不经常洗澡.(常年缺水,怎么洗 ...
- 如何用Navicat for MySQL 将mysql中的数据库导出,导入。
数据库导出 1.双击要导出的数据库,右键选转储SQL文件...,选择要保存的文件夹. 2.点击开始后,开始导出. 数据库导入 1.新建数据库,数据库的名字必须和导入的数据库文件一致. 2.在新建的数据 ...
- javascript performence
1.将脚本放在底部 javascript是阻塞式的加载,如果先加载脚本,后面的dom都没有办法进行渲染,页面会是一片空白: 采用无阻塞下载javascript a.使用<script>标签 ...
- Tennis Championship
Tennis Championship time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- File文件操作类
public class FileTest { //遍历出E:根目录下所有的文件夹,并输出文件夹名 static void testOne(){ //构建File对象,设置文件路径 File ro ...
- 48、tensorflow入门二,线性模型的拟合
import tensorflow as tf import numpy as np#生成2维的100个0-1的随机数 x_data = np.float32(np.random.rand(2,100 ...