跳至正文

Kid:物块属性讲解一:基本物块

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

值为false
值为true
Main.tileTable[Type] = true;

这个属性的意思就是,这个物块是不是当做桌子,这样可以在上面放上瓶子,旁边放椅子还可以合成各种表,默认false。

Main.tileLavaDeath[Type] = true;

这个属性决定了物块会不会被岩浆破坏,被岩浆一冲就会蹦出物品。默认false。

Main.tileFrameImportant[Type] = true;

这个是帧对齐,如果是false,放置和敲击时就会随机选帧,意思是在物块的16*16的所有小格中,随机选一个,所以除非是泥土块之类的单块物块,一定要把这个值设为true,默认false。

值为false

值为true
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 是啥,答案是:去看下一篇!

此图片的alt属性为空;文件名为TCU_BHDC0ATNG_D3.png
3×3物块
效果
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

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

发表回复