等等,这就做出了一把剑?我还没开始写代码呢??咳,当然没有这么便宜的事,因为这些代码都是别人给你写好的,接下来我们就要康康这把剑是如何实现的。
打开源码文件
首先我们打开TemplateMod2的源码,双击csproj或者sln文件打开Visual Studio工程。相比于第一版教程,第二版的TML0.11是不用手动加入引用的,TML已经帮你自动安排好了。
注意,一定要打开csproj或者sln文件才会有VS的代码补全效果
不出意外的话,在右边的解决方案资源管理器里应该能看到这样的文件夹
可能有些文件我这里有但是你们那里没有,不过不用担心,我们的目标是SkirtSword.cs文件,点击它就会出现代码界面。
首先我们要明确一点,如果没有特殊设置,图片名字会和源码.cs文件的名字(不包括后缀)和类名完全一样,这样TML内部才能通过类名找到这个物品所对应的图片资源。
基础语法
注释
如果点开后我们被这一大堆代码吓到了,不要着急,因为里面很多行代码其实是注释。注释的意思就是这一行不是给机器看的,而是给人看的。我们可以用//
或者/* 注释内容 */
这样的语法写注释,比如
我们这段绿色的字就是注释。那么既然游戏不会执行注释的代码,那么它是干什么的呢?当然是写给你看的啊,注释也是教程的一部分呢。
当然,除此之外,注释还有很多其他的作用,比如如果你想不起来这个函数是干什么用的,那么给它一个注释会方便你以后记起来它的作用。总而言之,不是写给你看,就是写给别人看的,反正不是写给电脑看的。
命名空间
接下来我们观察一下这一行namespace TemplateMod2.Items {
namespace
是命名空间的意思,在C#里,它的作用就像是文件路径,可能你有很多个相同名字的文件,但是他们不在同一个路径下,就是不同的文件。那么这段代码的意思就是这个类在TemplateMod2.Items
这个路径下,而我们也正好把SkirtSword.cs这个文件放在了TemplateMod2\Items
路径下。
TML内部在找到这个类的时候,会通过它的命名空间来寻找图片文件的位置,比如如果这个类的命名空间是TemplateMod2.Items
,那么TML就会去TemplateMod2\Items
路径下去找。
所以我在这里提醒一下你们,一定要检查图片所在路径是否和命名空间是一致的。
类名
再往下看,就是类名了
我之前说的类名类名,其实就是这个东西。
引号前面的SkirtSword就是这把剑作为物品的类名,它在这个Mod的所有物品中一定要是唯一的。
但是如果这个东西不是物品,却可以重名,如果命名空间不同的话(想一想,为什么?
引号后面的东西是继承的类,也就是标记了这个类是物品、弹幕还是NPC等等的一个说明,暂时先这么理解,我们以后会讲到。
函数
接下来我们介绍函数,往下看这一大段都是一个函数
这个函数的名字叫SetStaticDefaults
,里面的代码主要作用就是设置物品名字,描述这些。要注意的是,符合这个函数功能的代码才能写进这个函数里面,如果写错了函数,那么可能就看不到想要的效果了。
缩进
你可能注意到了,这些代码是按照一定的格式写出来的
每个大括号包围的块都比大括号要往前4个空格的距离,如果不按照这个格式写,代码能运行嘛?当然能,但是千万不要这么做
之所以有缩进,就是为了能让你看清楚这一段代码是属于哪个块的,比如namespace TemplateMod2.Items
所包含的代码块就代表属于这个TemplateMod2.Items
命名空间下的代码
namespace TemplateMod2.Items { // 属于命名空间这块的代码 class SkirtSword { // 属于class(类)的代码 void function() { // 属于function(函数)的代码 } } }
代码缩进非常重要,这不是可选的,而是我希望每个Mod制作者都遵守。VS也有提供格式化代码的方案,详情可以百度。
属性修改
现在,你已经具备了写Mod的基本知识了,现在你最关心的是如何修改剑的属性了吧,那么往下看到SetDefaults
这个函数。它的作用就是设置物品的基础属性,现在,你可以根据这个文件的注释去修改这把剑,看看效果如何。修改完毕后,只要在TML界面编译并加载就可以看到效果
我这里给你们几个任务,可以去试着完成
- 把这把剑的攻击力改为1
item.damage = 1;
- 把这把剑的攻击速度改为一秒10次
item.useTime = 6; item.useAnimation = 6;
- 把这把剑的击退改为0
item.knockBack = 0f;
- 把这把剑的攻击方式改成跟同志短剑一样
item.useStyle = 3;
如果你正确的完成了这几个任务,那么这把剑就会像这样
(相信我,这把剑用久了你对距离的把控将会炉火纯青,特别是对于带武器的僵尸,因为这把剑对他们的无伤攻击区域只有几像素
如果你成功完成了上面的几个任务,那么你就掌握了基本的物品属性修改方式。享受你的成果吧。记得修改以后一定要保存才有效果哦。
课后习题
基础
- 假如某个物品的类名处于命名空间
FallenStar49.Items.Accessories.Expert
下,假设没有其他修改,那么它的默认图片路径是?答案FallenStar49\Items\Accessories\Expert
- 假如我把
SkirtSword
类的命名空间改为TemplateMod2.Item
会出什么错?答案TemplateMod2/Item这个文件夹不存在,所以会出现找不到资源的错误 - 试一下
/* */
格式的注释,看看它和//
的区别在哪里?答案/* */
是多行注释,可以跨越很多行,而//
只能注释这一行
学会了!
裙子加油!
基础习题第二问的答案不对吧
应该是不存在Item文件夹所以会出错
感谢指出
终于找到教程了,感谢
如何做出在物品栏有动画效果的物品?
进阶问题 3 的答案:
在类中设置 item.axe(斧力)和 item.hammer (锤力)属性即可。
应当注意的是,item.shoot 貌似和这两个属性是冲突的,如果设置了 shoot 属性,即使设置了这两个属性,武器也并不能砍树或砸墙。
请教一下,使用vs打开csporj文件提示没有项目属性提供程序怎么解决啊,也没有百度到
Pingback: C#基础教程 第1章 Hello world! - 裙中世界