大家好,我是Kid,今天我写物块教程辣!这篇文章是针对1.4的哦, 还有,这篇文章是比Github上面的官方文档和旧版教程全的,可以看我这篇,如果有任何问题,可以评论,我会立即改正的哦
物块的基本属性
物块是Tr比较基本的构成,但是物块算是比较进阶的内容,物块的坐标系统就跟世界的坐标系统不一样
如下图,物块都是以16 X 16的规格等分成小块,重点来了,每个小块之间都要有2像素的间隔,2像素啊,不要搞错了
再看看工作台类的物块,同样,每隔16像素要空2像素
哦,对了,物块的帧图无论是竖的还是横的,都是可以的
Main.tile
是一个数组,不过用的是物块坐标,只要把世界坐标除以16,就是从世界左上角(0,0)开始的物块坐标了
你的第一个物块
理论结束,开始实践
想要自制物块先得知道,MOD物块继承于类ModTile,接着是熟悉的SetStaticDefaults
public override void SetStaticDefaults() { Main.tileSolid[Type] = true; Main.tileSolidTop[Type] = true; Main.tileNoAttach[Type] = false; Main.tileTable[Type] = false; Main.tileLavaDeath[Type] = true; Main.tileFrameImportant[Type] = true; Main.tileCut[Type] = true; Main.tileBlockLight[Type] = true; TileID.Sets.Ore[Type] = true; Main.tileSpelunker[Type] = true; Main.tileOreFinderPriority[Type] = 114; Main.tileShine2[Type] = true; Main.tileShine[Type] = 514; Main.tileMergeDirt[Type] = true; MineResist = 11.4f; MinPick = 514; Main.tileLighted[Type] = true;、 DustType = ModContent.DustType<Dust1>(); ItemDrop = ModContent.ItemType<Item1>(); ModTranslation name = CreateMapEntryName(); name.SetDefault("Block"); AddMapEntry(new Color(114, 514, 114),name); }
这就是物块的所有基本属性了,下面我来一一讲解
Main.tileSolid[Type] = true;
这个属性的意思是这个物块是不是实体,能不能被玩家,弹幕等穿透,默认false
Main.tileSolidTop[Type] = true;
这个物块的顶端能否站人,默认false
Main.tileNoAttach[Type] = false;
意思是能否在物块附近放东西,如在上面放个工作台,旁边放火把等等, 默认false。
Main.tileTable[Type] = true;
这个属性的意思就是,这个物块是不是当做桌子,这样可以在上面放上瓶子,旁边放椅子还可以合成各种表,默认false。
Main.tileLavaDeath[Type] = true;
这个属性决定了物块会不会被岩浆破坏,被岩浆一冲就会蹦出物品。默认false。
Main.tileFrameImportant[Type] = true;
这个是帧对齐,如果是false,放置和敲击时就会随机选帧,意思是在物块的16*16的所有小格中,随机选一个,所以除非是泥土块之类的单块物块,一定要把这个值设为true,默认false。
Main.tileCut[Type] = true;
意思是会不会被武器,弹幕破坏,默认false,
Main.tileBlockLight[Type] = true;
这个属性决定了物块是否会挡住光源传播。一般物块都会阻挡光源传播。默认false。
TileID.Sets.Ore[Type] = true;
这个就是这个方块是不是矿石,true的话会被金属探测器探测到,上面显示的名字是方块的地图名,默认false。但是,TileID.Sets.Ore[Type] = true;
会无视你的 TileObjectData.newTile.CopyFrom
里面填的 TileObjectData.Style
,直接是1×1物块的读取方式,但是绘制的还是你填的Style
的大小,纹理坐标取到边界外面,这个物块边界刚好是棕色,就。。。
什么?你问我 TileObjectData
是啥,答案是:去看下一篇!
Main.tileSpelunker[Type] = true;
会不会被洞穴探险药水高亮,默认false
Main.tileOreFinderPriority[Type] = 114;
金属探测器探测的优先级,越大越优先
对了,如果用了这个,就算 TileID.Sets.Ore[Type] = false;
还是会被金属探测器探测到的哦
Main.tileShine2[Type] = true;
会不会被洞穴探险荧光棒高亮,默认false
Main.tileShine[Type] = 514;
闪出小白星的频率,数字越高越频繁
Main.tileMergeDirt[Type] = true;
会不会和土黏在一起,一般矿石用这个属性,默认false
MineResist = 11.4f;
MinPick = 514;
MineResist
要抡几下稿子才能挖掉,MinPick
是最小多少点稿力能挖掉
Main.tileLighted[Type] = true;
让他发光,并且会改变照在它上面的光照,要配合ModifyLight
用,这个下下篇在讲
DustType = ModContent.DustType<Dust1>();
ItemDrop = ModContent.ItemType<Item1>();
DustType
就是敲击时出来的粒子,ItemDrop
就是挖掉以后出来的物品
ModTranslation name = CreateMapEntryName();
name.SetDefault("Block");
这一段,就是定义一个name,后面会添加进去
AddMapEntry(new Color(114, 514, 114),name);
第一个就是这个物块在地图上的颜色,第二个是上面定义的name,在地图上用鼠标放到物块上面就会有名字辣
创造一个可以放置物块的物品
Item.consumable = true; Item.createTile = ModContent.TileType<Tile1>(); Item.placeStyle = 0;
只要加上这两行就可以了,当然,你想不消耗也行,把consumable
改成false
就好了
placeStyle
是很有意思的属性,决定了放置的物块处于哪个帧,一般没有多帧的物块都设为0,但是如果有两个帧,那么帧数从0开始,第一个是0,第二个是1,以此类推
小作业
(根本不会布置作业,凑不要脸(bushi))
创建一个巨型土块和放置物块的物品,物块是3格x3格大小,就是48*48像素,稿力114可挖掘,要抡5.14下可以挖掉,挖掉掉落臭虎爪
(好臭啊)
To Be Continued…
下一篇教程会讲解TileObjectData这个功能丰富的物块属性哦!
溜了溜了
还有问题,可以加QQ群:747485148