




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
魔兽地图制作教程 星期三 20:27 区域,对话,变量基本的启动什么的就不说了,先从地区开始。既然是防守地图,就需要确定两方面的区域,进攻,以及防守。运行WE以后,在菜单点击层面(L)选择设定区域(R)打开区域面版。在截图1中,我并没有使用地型以及装饰物,包括以后的一些演示,力求简单易懂:一共划了九个区域,其中上面六个小的点表示刷怪的位置,而下面的大一些的区域就是我方阵地,OK,基本区域设置完成,下面左右两个区域表示选择英雄的位置。为了以后查找方便,我将各个区域命名,因为不能采用中文名字,所以我只好边查字典(传说中的金山词霸2007)边用上相应的英文名。我方阵地Home 进攻的六个区域叫attack 001 - attack 006 选择英雄的区域叫hero 001 和hero 002。然后进行基础内容设置,比如将使用的单位,英雄,变量,玩家数等等。因为是简单化,所以这次不进行单位的修改,而直接采用原始设定的单位。先说英雄,我准备采用三种方式来选择英雄,1、随机选择 2、双击选择 3、小精灵选择。不论使用哪一种方式,我们都会先使用到对话来选择我们的英雄创造方式,所以就先做一个对话。按下F4,运行触发事件编辑器,删掉对战初始化的触发,然后按CTRL+T或如截图2所示点击中间白色的图标,创建新的触发器。在新的触发器面版里点右键,选新事件开端,选择事件Map initialization(注:地图初始化,是在地图开始运行以后就会执行这个触发器,有很多的触发器直接使用这个事件会运行不了,但如果你在触发器动作的第一行加入wait-等待语句的话,那就可以运行了)因为是直接运行的,所以条件就不需要了,为空,然接下来是动作,就如我前面所说,如果用地图初始化做触发事件的话,除了变量赋值等触发以外,很多触发器不会执行动作,所以我在第一行添加了wait 2.00 等待2秒,然后写入触发动作。某人乱入:没有编辑变量!对的对的对话的使用必须要有变量,因为对话点击事件只能选择变量进行的,所以如果没有设定对话变量,那么将无法开启对话事件!如图3所示:所以我们先去设定变量,点击Ctrl+B,或者点图2中间那个X的图标进入变量编辑器,如图4所示:我设定了对话变量以及对话按钮变量组,之所以不同是因为对话只是要判断这个对话是否被点击,而因为按钮是有多个选择的,所以需要多个按钮的判断,而且变量组会方便使用。OK,变量设定完成,我们继续刚才的对话制作。在动作里选择 对话 - Change Title ,改变对话标题,这里的内容就显示在对话按钮的上方,提示你需要做出选择。然后再写入动作 对话 - Create a dialog button ,创建对话按钮,这里提醒的是,每创建一个按钮,必须要加入一个变量赋值语句 Set dialog_button1 = (Last created dialog Button) ,其中dialog_button1是对话按钮变量, 中的1表示这个对话按钮变量组代号1的变量,可以按你的对话按钮数量而改变。对后建立动作 对话 - 显示 dialog for 玩家 1 (红色),那这个触发基本上完成,如图5所示(包括运行后游戏中显示的样子):接下来先讲如何做选择英雄的触发然后再接着讲对话框。选择英雄我们先来说说小精灵选择英雄,这个触发的思路其实就是单位进入区域,然后判断进入该区域的是不是我们用来选择英雄的单位,再执行更改单位所属或创建新的单位给触发单位所属。在这里需要说明的是,为了可以更加方便的控制英雄,我们需要使用单位变量给他们进行赋值,而且因为需要做联机,因此我们设定一个单位变量组。如图6所示:然后因为是使用单位进入区域的触发,所以增加了几个区域在所选的英雄前面,英雄所属为中立无敌意,下面那个区域为创造小精灵的位置,图7所示:然后我们写触发,事件是Unit - Unit Enters Region,单位进入区域,因为有多个英雄可以选择,所以我们可以在一个触发器里写多个事件,也可以将每一个事件写成一个触发器。然后环境(条件)就是需要判断该单位是不是小精灵,判断的是单位类型,所以我们选择 (Unit-type of (Triggering unit) 等于 小精灵,这样其它单位进入区域就不会触发动作。再接着我们就进行选择的动作,一般来说,我们都不希望可以重复选择同一个英雄,所以可以采用几种方式,常用的有:1、关闭触发器(如果每个选择英雄的触发器是单独的,那么关闭触发器就意味着将不再能选择这个英雄,即使达到条件也不行),2、给选过的单位做备注。先说说1的做法,如果我们一开始就创造了多个触发器,我们可以这样写触发:事件:单位 - Unit Enters Region /一个单位进入区域条件:(Unit-type of (Triggering unit) 等于 小精灵 /触发单位的类型是小精灵动作:单位 - Change ownership of 圣骑士 0001 to (Owner of (Triggering unit) and 改变颜色/改变指定单位“圣骑士 001”所属为触发单位所属玩家Set hero(Player number of (Owner of (Triggering unit) = (Ownership-changed unit)/设定变量hero玩家的索引号改变所有权的单位单位 - Kill (Triggering unit)/杀死触发单位 这个不需要解释了触发器 - Turn off (This trigger)/关闭这个触发器这里需要说明的是,如果英雄选择的地方是没有障碍的,所以可以直接改变指定单位给触发单位所属玩家来控制,如果是锁定区域的话,那可以移动该单位到指定位置或者创造一个同类型的单位给触发单位所属玩家在指定的位置(一般是玩家的初始地点),而单位变量的赋值是为了方便以后操作;如果是创造单位的话,该语句也需要更改:单位 - Create 1 (Unit-type of 圣骑士 0001 ) for (Owner of (Triggering unit) at (Owner of (Triggering unit) start location) facing 默认的建筑朝向 degrees/创造一个单位类型是“圣骑士0001”的单位给触发单位所属在玩家的初始点Set hero(Player number of (Owner of (Triggering unit) = (Last created unit)/设定变量hero玩家的索引号最后创造的单位然后我们说说双击选英雄,这个方式最重要的一点,是做备注。双击选择英雄的原理很简单,只要判断该单位在一定时间内,比如0.2秒,是否被连续点击,那么第一次的点击就是做为第二次点击的判断依据,也就是说,第一次需要做一个备注。如图:这里需要说明的是,采用玩家事件判断可以用到触发玩家,如果是用单位被选择事件判断的话,触发玩家就是被选择单位所属玩家而不是点击这个单位的玩家;另外事件是并行的,也就是说可以多个事件来判断同一个触发器却不相互影响。我这次做备注的方式是给单位添加自定义数,如果这个单位被点击了,那么这个单位的自定义数就为玩家号,如果在0.2以内再次被点击,而且是同一个玩家点击的话(判断玩家号),就会执行创造的触发,否则,该单位将恢复到其它自定义数,被执行以后关闭该触发器。PS:Player Number 玩家号,就是每个玩家默认的值,玩家1的号为1,玩家2的号为2,类推。最后说随机选英雄,所谓随机选择,其实就是在按排好的一些单位里进行挑选并给予单位,既然是按排好的,所以我们就需要定义单位类型,也就是说,我们需要使用单位类型变量来存储不同的单位,因为使用随机,所以要用单位组来做,如图所示:这里,还有包括以后刷怪用到的小兵都会采用单位类型变量进行定义,所以我们单独设置一个地图初始化的触发器用来赋值。然后我们来看下面的截图,这个触发用到了前面提过的对话,而我们前面设定的第三个对话框提示是“随机选择英雄”,所以事件是对话变量dialog被点击,条件就是点击的第三个对话框,然后执行动作。这里加入了一个新的变量,numeral是一个数值变量,用来保存随机数的,采用单位类型的变量是否为空来判断,如果不是空的话,就创造这个类型的单位,并将这个变量赋值为空,这样就不会被再次选择;但有一点,就是可选择的单位数要多于在线玩家数,否则会出错。 特别感谢furrydodo朋友的提醒,经过修正,现将该触发分成两部分,一部分是控制次数,一部分是控制选择,控制方面采用等待1秒的方式来避免BUG产生:对话OK,前面已经设定好单位选择的触发了,我们接着讲对话。对话按钮一共有三个,随机选择英雄的触发已应用,还有双击选择英雄和精灵选择英雄,触发器都已经完成,接下来的工作是做一个桥接,另外设定两个触发器来控制已经完成的触发,如图12:可以看到,有三个触发器是开启状态,分别对应三个不同的英雄选择动作,其它具体的触发器是关闭状态,只有在运行指定触发器以后,才会打开。比如你选择了双击选英雄,哪怕你有小精灵进入那些选择英雄的区域也一样不会触发动作,另外,这里用了两个新的动作:Camera -镜头,Visibility -可见度。可见 - Create an initially 充许 visibility modifier for (Picked player) emitting 可见 across hero 001 /设定区域 hero 001 充许可见(也就是去除黑影和迷雾)给所有选取的玩家镜头 - Set the camera bounds for (Picked player) to hero 001 /设定镜头锁定在区域 hero 001,所有玩家的视线将被锁定在这个区域,包括单位活动。另外,这里需要说明的是,双击英雄部分不需要创造小精灵的触发,还有如果你希望你选择好英雄以后,视线自动移动到英雄身上,请在选择的触发后面添加另外的触发动作:镜头 - Set the camera bounds for 玩家 1 (红色) to (Entire map)/设定镜头锁定全部区域(也可以锁定游戏区域)镜头 - Pan camera for (Owner of (Triggering unit) to (Position of hero(Player number of (Triggering player) over 1.00 seconds/移动触发单位所属的玩家的镜头到刚刚创造的单位位置选择 - Select hero(Player number of (Owner of (Triggering unit)/选择玩家刚才创造的英雄 如下图所示:迷之声:有问题!将设定好的东东放到每个触发器,发现如果双击选择英雄直接调用小精灵选择的镜头会出错。原因是这样的:小精灵选择的触发单位小精灵是玩家所属,而双击选择的触发单位是中立的,但另一方面,双击选择的触发玩家是点击单位的玩家,所以,我们需要将原来的单位所属玩家修改成触发玩家。另外,因为双击选择没有小精灵的限制(小精灵死亡将不会再运行触发动作,除非还有其它小精灵,一般不会再存在了),所以尽管限制每个英雄只能选一个,但一个玩家却可以选不同类型的多个英雄,因此,在前面的判断语句中利用变量做了一个判断,如果变量为空,才可以运行触发,如图所示:这次是完全正常了,另外第三个触发器“随机选择英雄”就需要玩家索引来定义,因为没有触发单位。刷兵,计时器不知道大家有没有玩过“魔兽世界”,70级副本有一个叫“黑暗之门”,就是守护麦迪文直到打开黑暗之门,很经典的防守副本,我也准备做一个类似的防守地图,当然,不要去指望会很好玩主要还是为了演示。黑暗之门的刷兵方式是这样的:随机在N个区域的其中一个产生传送门,然后会有一个传送门守卫出来在门的旁边,传送门一定时间会召唤一些小怪前往麦迪文的位置,杀死守卫就会关闭传送门,然后一定时间内会在另一个地方产生传送门,每六批一个BOSS,一共十八批。这里我们需要有一些地图设定元素:小兵的类型(普通兵九种,随着进度而变化出现更高级的兵种),守护者3种(每五批切换一名,第六批为BOSS),BOSS也是3种,还有我们需要设定计时器。使用了一些变量,如下:单位类型变量组Foot9 保存小兵类型单位类型变量组Boss6 保存守护者和BOSS计时器变量Calculagraph 传送门计时器计时器窗品变量Calculagraph_windows 传送门计时器窗口地区变量组attack_area6 六个出现传送门的地区数值变量组attack_numerical1 = 用于记录随机地区变量数attack_mumerical2 = 用于记录传送门现有数量attack_mumerical3 = 用于记录传送门总数量单位变量组Carrydoor6 = 保存传送门计时器变量hero_Calculagraph 英雄复活计时器计时器窗口变量组 hero_Calculagraph_windows5 英雄复活计时器窗口我们先来定义单位类型变量,这里有个很有趣的设定:所有小兵全部取决于同等级的随机野生单位,大家都知道野生单位是固定等级分类的,这样我们每次在玩图的时候没有改变难度的情况下却可以每次都可能遇到不同的怪。BOSS采用各个英雄,必要的话会在触发中添加一些属性,当然在具体做图的时候可以事先设定好各个怪物的属性;还有六个传送门出现的区域也保存在变量中了。接着我们说刷兵,刷兵一般是两个部分组成,一个是创造,一个是进攻。单位 - Create (1 x (Number of players) Foot1 for 玩家 12 (棕色) at (Position of Carrydoor(Integer A) facing 默认的建筑朝向 degrees/创造1*玩家数的单位类型为单位变量Foot1的单位给玩家12,并出现在单位变量Carrydoor(循环数A)的位置,面朝默认建筑方向。可以看到这里用到了一个乘法语句,这个是整数的一个运算方式:其实我们以后也会经常用到这种方式做一些精确的计算,当然,这个只是最简单的四则运算,还有其他复杂的算法,另外如果是字符串变量的话,同样可以用这个进行串连,比如显示出英雄的名字+英雄的等级。还有用到变量Foot1,在前面已经介绍过,给单位变量Foot1进行赋值为随机的等级1的野生单位,所以这个变量可能是任何一种等级1的野生单位,当然在具体做图的时候最好可以具体定义自己设定的单位,方便控制,后面是创造的单位是给予玩家12(你的敌方)的。至于出现地点,可以是地区的中心,也可以是随机点,我这里选择的是传送门出现的地点,还有一个触发将是创造传送门的,然后用这个变量保存创造的传送门,这个等下会介绍到。单位组 - Pick every unit in (Units owned by 玩家 12 (棕色) and do (单位 - Order (Picked unit) to 攻击移动到 (Center of Home )/选取玩家12的所有单位攻击移动到Home地区(前面设定的,玩家基地)这个是最常见也最实用的单位进攻方式,单位组的选取其实是采用玫举方式的,就是每一个单位做一个动作,但如果直接使用这样的语句会因为一次执行动作的单位过多(超过12支)而不能全部控制,因此一般都是将这个触发分开写:这样写的好处是肯定每个单位都会执行到,而且我们知道因为是每个单位都做一次动作,所以我们还可以在中间加入一些对单位控制的动作,比如计数器,比如你加一个数值变量的赋值语句N=N+1在执行动作里面,那么最后输出的N就是选取的所有单位了,而且选取还可以附加条件,比如选取的单位是一个英雄为真,那么就只会选取英雄单位。本演示具体的刷兵方式其实是从传送门的开始的,因为前面提到每次刷出的单位是在传送门的位置,所以我们现在先来看看传送门创造的触发。传送门创造其实和其它地图中的刷怪系统没什么区别,所以我们也需要有一个计时器来告诉我们传送门什么时候会出现,如图:这个触发的事件是每经过35秒,通过计时器来运行传送门创造的触发器。倒数计数器 - Create a timer window for Calculagraph with title 下一个传送门开启/创造一个名为Calculagraph(变量)倒数计数器,标题是“下一个传送门开启”倒数计数器 - Start Calculagraph as a 一次射击 timer that will expire in 30.00 seconds/倒数计数器Calculagraph开始计时,次数为一次,时间为30秒。Set Calculagraph_windows = (Last created timer window)/设置倒数计时器窗口变量为最后创造的倒数计时器玩家组 - Pick every player in (All players) and do (倒数计数器 - 显示 Calculagraph_windows for (Picked player)/选取所有玩家显示数计数器窗口Calculagraph_windows。Wait 29.00 seconds倒数计时器 - Destroy Calculagraph_windows/等待29秒删除倒数计时器窗口Calculagraph_windows这就是创造和使用倒数计时器的简单流程,每一个计数器的窗口创建了必须要有一个结束的语句,另外如果还有其它计数器存在的话,就要使用变量了,这个演示中还有英雄复活的计数器,因此我使用变量。计时结束以后,有几种方式可以用,一就是通过事件Timer Expires来判断计时器到期事件,这里需要用到变量,我没有使用这个事件,所以采用wait(等待语句来判断时间,为了避免BUG,时间为计时器-1),然后直接执行下面的动作。将attack_mumerical3赋值为attack_mumerical3+1,这个变量的作用是记录传送门出现的总次数,在设计中已经申明过,每六批为一个循环,所以我这里有三个循环,通过判断attack_mumerical3变量来确定执行哪一部分的触发器。下面是IF 判断语句,第一个触发是如果attack_mumerical3小于或等于6,就执行触发器Create Carrydoor 1,下面的两个语句类同,区别在于一个是7attack_mumerical312,一个是13attack_mumerical318,分别执行Create Carrydoor 2和Create Carrydoor 3。(创造 还是 毁灭)刷兵 利用变量来限制单位出现前面我们说到,利用计时器来运行传送门的创造动作,具体如下:变量的设定上,是利用 attack_numerical1 记录随机地区变量数 attack_mumerical2 记录传送门现有数量 attack_mumerical3 记录传送门总数量。这里第一句,将整数变量组attack_numerical1 赋值成1到6之间的随机数,代表了上面六个刷兵区域的下标;同时,用到了单位变量组Carrydoorattack_numerical1 来记录传送门,换句话说,如果前面随机数是5,那么接下来进行动作的就是Carrydoor5这个变量了,这个的作用就是判断该位置是已经存在传送门,在下面的IF语句里可以看到,如果该变量没有进行赋值的,也就是变量为空的,那么执行创造传送门的动作,否则,重新运行这个触发器(最后一句)。在这里需要说明一下的是,多次运行触发器是为了挑选正确的变量以便执行,同时我们需要有所限制,比如本图的刷兵点一共6个,所以如果超过6个以上的传送门出现将会导至BUG,严重的直接跳出游戏。因此在下面的执行语句里,当attack_mumerical2 为6的时候,表示6个传送门已经饱和了,就可以直接关闭Time Attack这个触发器,使之不再运行。具体执行方面,当Carrydoorattack_numerical1为空的时候,将创造一个传送门在同样下标的区域变量attack_area?,同时,Carrydoorattack_numerical1将赋值为最后创造的传送门,这样下一次运行触发器的时候将会跳过这一个下标值。接下来给新创造的传送门赋值自定义值attack_numerical1,这个的作用是为了模仿黑暗之门副本的设定,传送门本身是添加了蝗虫技能的,所以不能被攻击,而守护者死亡以后,传送门也会消失,因此,在下面创造守护者的时候,同样给守护者添加了自定义数attack_numerical1,事件将会在另一个触发里判断,后面细说。在创造守护者的触发里,我们可以看到一个IF语句,这个是利用attack_mumerical2 来判断是否应该刷出BOSS,其中BOSS1为普通守护者,BOSS2为BOSS,这个在前面set attack触发器中设定的。当attack_mumerical2 小于6的时候刷出BOSS1,当等于6的时候,刷出BOSS2,同时关闭刷传送门的触发。另外,attack_mumerical2 清空为0,为下一个触发组做准备。至于BOSS的等级设定只是为了简化单位编缉,如果你设定好单位的强度和属性,就没必要利用这个来直接修改等级了。有创造就有毁灭,对应这个触发器,还有另一个用来清除传送门的触发器,如图:这个触发器相对就简单得多,判断玩家12(敌对玩家)单位死亡,而且单位类型为守护者BOSS?的,就选取地图上所有和死亡单位同样自定义数的传送门进行Kill操作这个就是前面设定自定义数的意义了。而接下来具体判断单位死亡类型,这里单独分例了各个BOSS死亡时的操作,其实也就是重新打开刷兵触发。,这里用到一个OR的条件,就是“或”,多个条件只要达成一个,就会执行动作。不过动作里有一句是选取所有玩家12的单位进行Kill操作,使用这个的原因是为了防止在BOSS死亡以后,还有其它传送门存在,这样会打乱下一轮回的刷兵,因为制作得比较粗糙。如果你前面就是精细设定每一次刷兵的方式,这一句有没有存在并不影响,可无视之。刷兵 利用单位判断刷兵区域刷兵其实有很多种方式,我这里使用的是判断传送门是否存在来进行刷兵,如图:这里可以看到,时间是固定的每15秒刷一次兵,刷兵采用循环方式,在区域1至6上存在传送门的区域都会刷兵。其中attack_mumerical3前面有提到是记录传送门总数量,因为每6批一个循环,因此这个是来判断应该刷哪一阶段的单位(一般都会随着阶段提升而加强单位的吧),然后判断Carrydoor循环数A是否为空,在前一个触发的设定上,有进行Carrydoor?变量赋值的语句,只要该变量被赋值,那么就会执行刷兵动作。如果地图上同时存在6个传送门,那6个都会出兵的哦接下来就是单位进攻了,其实也是很简单的触发,如图:这个是接前面刷兵触发器的后面写的,也就是说,每隔15秒发布一次进攻命令。在这里不得不再次提一下picked命令的作用,这个一般翻译成选取或枚举或精选,这个动作执行的时候实际上是一个个单位执行下去的,因此在多个动作的语句里,单独写出一句命令单位攻击移动到指定位置话,每一个被选到的单位都会执行,很方便的功能,所以最好不要直接选取单位做动作,要分开写。另外这个触发因为是刷兵嘛所以守护者排除在外。还有一个英雄复活的触发,只是简单的利用了一下计时器,就不细说了,如图:创造和使用排行榜(直接引用早期写的关于排行榜的解说)排行榜 其实很简单.需要的内容并不多.但对一个地图.特别是多人地图上使用的时候让大家感觉更有意思.也可以做出更多的事件.像我的地图根据排行榜设计奖励或者一些守护地图的排分.都需要排行榜.废话不多说.接入正题.要做一个排行榜.先是排行榜显示的时间问题.一般来说.大家都习惯在进入地图以后就出现排行榜.所以我们也可以这样做.那么事件就可以写成:事件:Map initialization地图初始化就是在地图刚开始的时候就打开排行榜.而排行榜一般不需要环境(条件).所以我们就忽略.接下来就是动作.先要确定这个排行榜显示的是什么.如果是两边对战的时候就需要分组显示排行榜了.而大部分时候我们只对大家使用一个排行榜.所以我们可以这样建:动作:wait 2.00 秒排行榜 - Create a leaderboard for (All players) titled ?(自定)玩家组 - Pick every player in (All players) and do (排行榜 - Add (Picked player) to (Last created leaderboard) with label (Name of (Picked player) and value 0)排行榜 - Sort (Last created leaderboard) by 值 in 降序 order排行榜 - 显示 (Last created leaderboard)使用等待的原因是如果没有等待时间在初始化的情况下不会显示排行榜). 而签后面的 杀敌数量 为排行榜的名字.下面句是最重要的.就是排行榜上显示的玩家.常用的就是使用玩家
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设备pdca课件教学课件
- 机械企业急救知识培训课件
- 消防科普厂房知识培训内容课件
- 智能泵阀优化-洞察及研究
- 燃气从业资格证考试题库及答案
- 2025年实验动物考试练习试题(附答案)
- 2025年高级经济师农业经济试题及答案(网友回忆版)
- 2025年广东省广雅中学九年级综合素质模拟(三)化学试题及答案
- 2025年有关能源考试题库及答案
- 2025年海洋污染面试题目及答案
- 创新方法教程题库题库(449道)
- 建设工程消防验收评定规则
- 山东省临沂市兰山区2022-2023学年小升初数学自主招生备考卷含答案
- 电气设备交接试验方案
- D500-D505 2016年合订本防雷与接地图集
- 北邮社电机拖动与调速技术教学包课后题解
- 学校门卫岗位职责及管理制度
- JJG 1105-2015氨气检测仪
- GB/T 8118-2010电弧焊机通用技术条件
- GB/T 17421.7-2016机床检验通则第7部分:回转轴线的几何精度
- 呆滞物料预防与处理(精益培训)
评论
0/150
提交评论