大家好,我是Kid,我又来辣,这篇仍然是1.4的物块属性讲解,发车!
TileObjectData:设置属性的另一种方式
其实除了上一讲说的物块基本属性以外,还有设置属性的另一种方式,即TileObjectData.xxx();
(Re撅了,非要分两个写)
TileObjectData.newTile.CopyFrom(TileObjectData.Style1x2Top); TileObjectData.newTile.Width = 3; TileObjectData.newTile.Height = 1; TileObjectData.newTile.CoordinateHeights = new int[] { 16, 16 }; TileObjectData.newTile.CoordinateWidth = 16; TileObjectData.newTile.CoordinatePadding = 2; // ... TileObjectData.addTile(Type);
我们以这个作为例子来讲解TileObjectData
TileObjectData.newTile.CopyFrom(TileObjectData.Style1x2Top);
我们来看看这句代码
TileObjectData
里有许多模板,这句话的作用就是先套用内置的模板。对了,套要套对,比如你是3×3的物块,用 TileObjectData.Style3x3
, 不过有一个特殊的 TileObjectData.Style1x2Top
,自动设置成只能挂在物块下,并且放置物块的时候鼠标对于物块的位置是上面一格,并且上面的物块被敲掉,这个也会掉落,还是非常方便的,还有就是StyleDye
这个属性,然后就是快乐的改参时间!
TileObjectData.newTile.Width = 3;
TileObjectData.newTile.Height = 1;
上面一段代码,意思是把物块变成1*3格,注意这个值不能乱设,一般来说,把这个值设为贴图的高度/16就好了
我们来看看效果
TileObjectData.newTile.CoordinateHeights = new int[]{ 16, 16, 16 };
一个数组,也就是每一块的高度,一般是3位,每位都是16,不要瞎改,否则会改掉读取方式
如果你想把底部嵌入下面的方块的话,就要使用DrawYOffset
TileObjectData.newTile.DrawYOffset = 8;
意思是绘制时向下偏移8像素
同样的,还有DrawXOffset
TileObjectData.newTile.DrawXOffset = 8;
意思是向右偏移8像素,不过这个十分有趣,在光标显示中是你填的偏移像素,但是,你一放下就会变回原样
TileObjectData.newTile.CoordinateWidth = 16;
和 CoordinateHeights
不一样,这东西不是数组, 意思是所有小块横长全部改为16,基本上都是16, 不要瞎改,否则会改掉读取方式
TileObjectData.newTile.CoordinatePadding = 2;
意思是你的物块帧图每16格就空2像素,不要改,要不然图片就对不上了
TileObjectData.addTile(Type);
把做的更改添加进去,一定要写!
TileObjectData扩展
TileObjectData.newTile.UsesCustomCanPlace = false;
这个属性是决定这个物块上能不能再放其他方块,false就是能,true不能,默认false
TileObjectData.newTile.StyleHorizontal = true;
true
设置是横向帧图,false
设置是竖向帧图
TileObjectData.newTile.StyleWrapLimit = 144;
StyleWrapLimit
是说物块贴图横向有多少帧
大于这个数字贴图里的帧读取时就会换行读取
运行时根据这个值确定目标贴图在哪行哪列
什么?你问我这个有什么用?答案是:tr的图片横向不能超过2048像素,这样可以保持横向不超2048像素,tr的旗帜就用到了这个属性,一般你们是用不到这个属性的
TileObjectData.newTile.Origin
这个属性用于设置物块的原点,也就是放置物块的时候鼠标对于物块的位置,默认为new Point16(0, 0);
也就是从左上角开始, 设为(2, 0)
就是从左上角开始,向左移2格,即32像素, 设为(2, 2)就是从左上角开始,向左移2格,向下移2格
还有一个属性就是决定放置位置的
TileObjectData.newTile.AnchorTop = new AnchorData(AnchorType.SolidTile,
2, 0);
TileObjectData.newTile.AnchorBottom = new AnchorData(AnchorType.SolidTile, TileObjectData.newTile.Width, 0);
第一句第一个参数是一个枚举类型,决定上方是个什么样的物块才符合放置条件,第二个参数是一般设为TileObjectData.newTile.Width
,这里是2,用于配合最后一个参数起始点。如果起始点为0并且第二个参数为物块的宽度,那么上方物块有任何一个被挖掉都会导致这个物块被破坏。如果宽度减少1,那么顶上最右边的一个物块被挖掉不会破坏这个物块, 如果宽度又减少1,那么顶上最右边和中间的一个物块被挖掉不会破坏这个物块,以此类推
后面一句也一样, 第一个参数是一个枚举类型,决定下面是个什么样的物块才符合放置条件, 如果宽度减少1,那么底上最右边的一个物块被挖掉不会破坏这个物块,如果宽度又减少1,那么顶上最右边和中间的一个物块被挖掉不会破坏这个物块,同样,以此类推
TileObjectData.newTile.RandomStyleRange = 4;
RandomStyleRange
,意思是在开始的四个帧里,随机选一个作为放置帧
到这里,所有有用的 TileObjectData
的属性我都讲完了,其他很废的 TileObjectData
属性我没讲
小作业
利用今天学的知识,做一个晴天娃娃和放置的物品,大小1*3格,鼠标指针在最上面一格,只能放在实体物块下,上面的实体物块被破坏,晴天娃娃也会被破坏
溜了溜了,下一篇讲物块的重写函数~
还有问题,可以加QQ群:747485148