跳至正文

Kid:物块属性讲解二:TileObjectData

大家好,我是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就好了

我们来看看效果

1*3格
TileObjectData.newTile.CoordinateHeights = new int[]{ 16, 16, 16 };

一个数组,也就是每一块的高度,一般是3位,每位都是16,不要瞎改,否则会改掉读取方式

如果你想把底部嵌入下面的方块的话,就要使用DrawYOffset

TileObjectData.newTile.DrawYOffset = 8;
意思是绘制时向下偏移8像素
值为8

同样的,还有DrawXOffset

TileObjectData.newTile.DrawXOffset = 8;

意思是向右偏移8像素,不过这个十分有趣,在光标显示中是你填的偏移像素,但是,你一放下就会变回原样

值为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格

new Point16(0, 0)

还有一个属性就是决定放置位置的

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

发表回复