象压树脚本
Ⅰ 魔兽争霸地图编辑高手告诉我一下那个脚本里的各个事件动作和条件是什么意思
http://www.egamestar.net
这里有,1.19和1.20升级补丁和地图编辑器。
《魔兽争霸Ⅲ》地图制作入门教程
WarCraftⅢ World Editor(简称WE),是暴雪巨作《魔兽争霸Ⅲ》所附带的功能强大的地图编辑器。世界上很多地图制作高手已利用WE创作出了类似《反恐精英》、《暗黑破坏神》、《雷电》、《大富翁》等经典游戏的魔兽版,可以说用WE只有想不到,没有做不到。WE功能如此强大,其实不难掌握,因为暴雪已将它做得再“傻瓜”不过了。当你决定使用它创造地图时,摆在你面前的不过是一大堆“积木”,你只要发挥自己的创造力,就能将其摆放出一个自己想象中的世界来。是不是已经等不及了?让我们赶快启动WE来制作属于你的一部舞台剧!
WE由四个主编辑器还有个功能强大的物件管理器(Object Manager)组成。四大编辑器分为地形编辑器(Terrain Editor)、单位编辑器(Unit Editor)、触发编辑器(Trigger Editor)、音效编辑器(Sound Editor),四者关系如图,其中要属地形编辑器和触发编辑器功能最为强大。本文将以四大编辑器为主线介绍WE,并以官方RPG地图WarChasers的制作方法为例,由浅入深地讲解构建一幅魔兽地图的思路。(注:本文使用的软件为英文版WarCraft World Editor 1.05版)
搭建舞台场景——地形编辑器
WE基本元素之一。光用地形编辑器就能制作出简单的对战地图。由于它被设计得“傻瓜化”,就算是新手操作起来也非常容易,仿佛Windows画板一样。
通过魔兽争霸快捷程序组运行World Editor之后看到如图1界面,这便是最基础的地形编辑器。
①上方为菜单栏,与其它的Windows软件类似,在这里可进行WE的所有指令操作。
②WE的主编辑视窗,通过它看到所编辑地图的全貌。
③辅助视窗,对你编辑地图有一定帮助,不过会影响到速度。
④工具面板,相当于一个巨大的素材库,能很方便地添加物件到地图。
⑤状态栏,记录了包括鼠标位置、鼠标所选物件的名称等附加信息。
看过地形编辑器的构造之后,我们来学习如何绘制地图的基本场景。第1步,新建一张地图(File→New)(如图2),这时你会看到网格——暴雪为了方便玩家合理安排地图构造而设计的类似一些图像编辑软件的引导线(可通过View→Grid→None来消除它)。首先,我们使用工具面板的地形面板(Terrain Palette)(图3)来创建一些山和水之类的自然地貌。A部分用来调整地形纹理以及绘制分界线。B部分调整悬崖、海水以及地表类型,不过在这里请注意两点:第1,只能在高度差为1,而且宽度至少为三个中型网格,长度在五个中型网格以上的地形间创建坡道(Ramp);第2,不要在小范围内同时使用两种悬崖类型(Cliff Type),这样可能会造成地表贴图错误。在完成了地形纹理设计和悬崖调整以后,使用C部分的地形高度选项来使地形变得更自然点儿。在调整高度时,建议使用D部分的笔刷选项,将笔刷调整到最大,这样可省下不少力气(图4)。
对自己创造的地形满意吗?光秃秃的可不好看,想加些树木、小鸟还有瀑布之类的修饰就需要用到摆设面板(Doodad Palette)了,点选工具面板上方的选择框或点击Layer→Doodad来切换到摆设面板(图5)。当你创建类似箭靶的物品时,会发现大小与方向都是随机的,这时你既可将四部分的随机大小和随机方向取消,然后重新添加摆设,也可通过双击调整摆设,然后输入数值来改变大小、方向和种类。如果你只想大致地调整一下方向,则使用Ctrl+鼠标左键点击/拖拽(图6)。
嘿嘿,接下来就是为你的地图添加有生力量了,用相同的方法切换到单位面板(Unit Palette),相信到这里魔兽玩家应该不会陌生,你可随意添加任何兵种和建筑到地图上(图7),不过要注意,当准备创建中立生物或构建敌人基地时,别忘了更改上方的玩家哦(默认是Player1 Red)。同样能通过双击已建立的单位来更改所有者,也可使用鼠标框选或用Shift+鼠标左键来选择多个单位进行批量修改。除了所有者以外,单位的属性面板和摆设的属性面板还有很多不同的地方,其中的技能栏可激活所编辑单位的技能,而掉落物品栏多半用于设置中立生物死亡时掉落的物品。当然,游戏地图都需要有起始点,在单位面板中Buildings的最后一栏找到起始点(Start Location),然后将它创建在地图上的任意地方。别忘了作为对战地图,至少要有两个起始点。接下来需要做的就是为你的对战地图加上一些小修饰了:点击菜单Scenario→Map Description,在Description栏里你可修改地图名称、游戏人数和地图说明,作者栏里签上你的大名(图8)。最后测试一下地图(Ctrl+F9)就可存盘了。一张简单的对战地图不就出来了?
排练演员——单位编辑器
大家肯定不会满足于只创造简单的对战地图,就像有了电脑不光只学打字一样。想学会如何驾御WE添加一些有个性的元素,这时我们就要用到下面的单位编辑器了。
单位编辑器功能很强大,因为官方经常用来调整平衡性,所以使用它就好像编辑QQ个人资料一样简单。本节将介绍如何使用它,并且主要对各个可修改选项加以解释,让大家可尽情发挥想象力创造新的单位——善恶美丑高矮胖瘦,完全由你选择。
用F5打开它以后,我们可看到A部分是与地形编辑器同样的菜单栏和快捷按钮栏,单位编辑器的菜单命令非常少且比较简单。B部分是单位树,在这里你可全览所有单位。C部分则是显示在B部分选择单位的详细数据,你要做的就是在此对各项数据进行修改。通过点击菜单File→New Custom Unit新建自定义单位,弹出新建单位窗口,其中名字可在创建后再编辑,最主要的是选择参照单位,也就是要你选择想在哪个单位的基础上进行编辑。选择了之后会在单位树的最下方看到新建的单位被放在了Custom Units目录下,点选刚才新建的自定义单位,通过右方的编辑窗口对数据进行修改(图9)。
因为编辑器里面可编辑元素多得恐怖,而且有一些玩家在游戏中都没有见过,所以我只对常见的项目进行解释(见表1)。
注释 伤害值的计算:例如9级石头人的基本伤害值为60,伤害值随机数为1,随机伤害值为8,我们就可算出石头人对地攻击的最大伤害为60+1×8=68,最小伤害为60-1×8=52,即伤害值范围为52~68。金钱奖励的计算方法同理。
以上是普通单位的编辑介绍,在编辑英雄单位时,有以下特有的修改选项(见表2)。
在设置完了这些让人眼花缭乱的单位数据及属性后,不要忘了通过点击菜单File→Export Unit Settings来将所改动的单位数据存储到文件中,然后再在你自己设计的地图上使用Import Unit Settings来调入修改了的数据。
展开剧情——触发编辑器
触发编辑器是WE的灵魂,魔兽RPG无限的内涵就是因为它的存在。在此节,我们通过分析经典RPG地图WarChasers(大家可在魔兽争霸游戏目录的Maps\Scenario下找到它)中的几个设计要点,来对触发编辑器有基本的认识。
打开地图WarChasers可看到它的全貌(图10),不要光顾着欣赏地形,这些在上面讲述的地形编辑器中你同样能做到。在讲解范例之前,先来了解一些触发器的基本常识。首先是域(Region)的概念,它是地形编辑器与触发编辑器之间最重要的一道桥梁,绝大多数的触发器(Trigger)都与它有关系。通过工具面板→域面板(Region Palette)来显示地图上的域,大家会看到地图上有许多不同颜色的矩形框,这便是域了,其中每个矩形框都是一个域。域面板简单地分为两部分:一部分仅为一个快捷键按钮,当激活时(绿色)为增加域,当取消激活时(灰色)为编辑域的大小或移动/删除域;另外一部分是域列表,在这里通过双击域名,视窗会跳转到该域所在区,并且还可在域名上单击鼠标右键→编辑域属性(Edit Region Properties)来修改该域的详细资料,除了修改名字和微调域大小以外,还能改变域的颜色(Select Color)、天气效果(Weather Effect)和声效(Ambient Sound)(图11)。
了解过域以后,可进入触发编辑器的学习了。按快捷键F4打开触发编辑器,有一个类似单位编辑器的窗口摆在了面前。让我们来看看它的结构(图12):最上方的是菜单栏。往下左边是触发器树,类似于单位编辑器里的单位树。目录下出现的文件便是触发器,左键单击触发器会打开编辑视窗。位于编辑视窗上方的文本框为备注框。备注框下方的便是触发器编辑主视窗了,这里需要讲解的是触发器分为事件(Events)、条件(Conditions)、行为(Actions)三部分,即当发生什么事件,并且满足什么条件时执行什么行为。是不是感觉有点像计算机语言一样枯燥,那么现在让我们试着读懂WarChasers中几个触发器制作的效果实例吧。
实例一:如何实现游戏开始时的选择英雄,这是绝大多数RPG地图所必备的。
实例效果:进入游戏后,将树精灵移动到英雄附近时,则选择该英雄(图13)。
实例讲解:进入触发器树中Hero Selection目录下的Robo X触发器,我们可看到主视窗中的事件、条件、行为三大部分(图14)。
事件部分:此处的意思是当一个单位进入Robo X域,则引发该触发器。(通过双击可以编辑为你所需要的语句)
条件部分:在这个实例中条件部分为无,即当事件发生时无条件运行该触发器。
行为部分:(下文中提到的玩家1为玩家自己,玩家12为电脑)
1.在Start2域中心为进入单位的拥有者新建一个名为Megotron X的单位(在这句中,你可以更改生成的单位数量、类型以及在哪个域新建该单位和该单位被建立时的角度)。
2.给刚才建立的英雄一个复活十字勋章(由于这是给英雄添加物品,所以不能设置数量,不过你依然可以更改物品的类型。Last Created Unit代指的便是刚才新建的Megotron X)。
3.如果进入的单位属于玩家1则将刚才新建的Megotron X赋予单位类型变量Player1,否则什么都不做。(这里利用了Set行为语句来设置变量,为什么要设置变量呢?就像为什么我们每个人都有名字一样。If Then Else是经常用到的行为语句,它常会通过条件来判断该执行哪个行为)
4、5、6.三句横线标注的语句功能同第3句一样,大家很容易读懂。
7.移出进入Robo X域的单位(这里的Entering Unit同样指的是进入域的树精灵)。
8.启动触发器Snap Camera to Player(检查条件)。(执行Camera Control目录下的Snap Camera to Player触发器,你也可通过使用类似以Trigger开头的语句的触发类型语句来建造触发器链,相当于连锁反应)。
实例总结:现在我们知道RPG地图开始时用一个精灵选择自己喜欢的英雄来作战,这个最基础的触发器实例是怎么样通过事件、条件、行为这3个部分来组合的,还了解了基本的语句构成。
实例二:类似Tower Defense的兵海,在这个例子中你将认识到触发编辑器的差异性,即类似的语句却会产生不同效果。
实例效果:在WarChasers地图中会有一个开着坦克前进,然后很多骷髅兵向你涌来的效果,着名的Tower Defense地图中也有类似的触发器影子(图15)。
实例讲解:目录Monster下面的TankRun1~9触发器,鉴于这九个触发器有相似性,所以我就拿触发器TankRun1来作分析了(图16)。
事件部分:意思是当一个单位(坦克)进入TankSpeak域时,则引发该触发器。
条件部分:进入该域的单位必须属于Playersgroup(这里出现了条件,不满足条件时行为部分就不会被执行。其中Playersgroup是一个玩家组类型的变量,在其它触发器中,已设定了Playersgroup包括了游戏中的四个玩家,所以这里也可理解为任何一个属于玩家的单位进入TankSpeak域时,才能满足执行行为的条件)。
行为部分:
1.关闭此触发器(这个语句便是控制该触发器,使它只运行一次,这里我们需要注意到的是行为部分的语序性,即语句是按照从上到下依次执行的)。
2.为玩家12在MakeSlimers域中任意一点新建两个通过单位编辑器创建的名为Giant Skeleton Warrior的骷髅战士(请注意到这个语句执行的效果是先确定任意一点,再在该点建立两Giant Skeleton Warrior)。
3.为玩家12在TankSkels1域中任意一点新建一个单位名为RoadKill Skeleton的骷髅,并执行30次(其实效果便是在TankSkels1域内建立30个RoadKill Skeleton。玩家可能会觉得这个等同于上面的语句,但是请注意,因为域内的随机点在每次执行语句时都会变化,所以这30个RoadKill Skeleton不会像上个语句里的两个Giant Skeleton Warrior一样聚集在一起,这样才会有骷髅海的效果,请大家注意我用横线标注的单位类型语句是相同的)。
实例总结:通过这个例子我们不仅学会制作Tower Defense效果,而且还看到For语句可简化很多繁琐的效果,大家应该多多练习使用。是不是觉得简单了?那我们就来个难一点的!
实例三:瞬间移动。通过此实例我们可发现触发编辑器不仅有差异性,也有多样性,即用多种方法达到同一个目的,正是因为如此,触发编辑器才可让大家尽情发挥想象。
实例效果:当坦克到了终点以后,将玩家的英雄传送到Waygate2 A域(图17)。
实例讲解:目录Tanks下面的Player 1 Leaves Tank触发器(图18)。
事件部分:当一个单位(坦克)进入Tank Leave 02域时,则引发该触发器。
条件部分:进入的单位为变量Player1(这里请大家不要被迷惑了,这个Player1只是一个单位类型变量,而非玩家1,这个变量指代的便是坦克)。
行为部分:
1.关闭此触发器。
2.取消变量TempPlayer1的隐藏状态(当你的英雄进入坦克时,在其它触发器中已将你的英雄隐藏,并赋予单位类型变量TempPlayer1,●表示单位相关语句)。
3.将TempPlayer1移动到Waygate2 A域(这个移动没有等待时间,可算是瞬间移动)。
4.在Tank Leave 02域创造“传送”特效(这是一个用来创造特效的语句,大家可能会问,英雄都被传送到了Waygate2 A域了,怎么还能在Tank Leave 02域看到特效?其实在玩家进入坦克时,视角已被固定在了坦克身上,在没有新的语句来改变视角之前,视角依然只是坦克,▲表示特效相关语句)。
5.将刚才建立的特效赋值给特效类型变量列TankSFX[1](这里出现了变量列(Array)的概念,所谓变量列,就是将同类型变量集中在一起,便于操作,就像把书都放在一个包里便于携带一样)。
6.等待0.10秒(等待语句在触发编辑器里作用也比较显着)。
7.隐藏变量Player1。由于坦克在以后的游戏中不会再使用到,所以我们完全可使用Remove命令将它删除,你可新建移除单位的行为语句(Unit-Remove),然后将Triggering Unit值更改为变量(Variable)Player1,这样便做到和隐藏变量Player1等同的效果了。
8.将TempPlayer1值赋予Player1(执行后,Player1便是指代的玩家的英雄了)。
9.执行Snap Camera to Player(忽略条件)(当选择忽略条件时,就算执行的触发器有条件也不会被考虑,这便是转换视角的语句)。
10.等待2.00秒。
11.摧毁特效TankSFX[1]。(将刚才建立的特效摧毁)
实例总结:这个例子有些复杂,大家可反复看注释并结合游戏来分析。我们从这个例子了解到在触发编辑器中达到一个目的不是只有一种方法。另外,编辑触发器中经常用到变量,但请大家注意使用变量时要有逻辑性,逻辑错误会导致整个地图出现问题。
主题曲及配音——音效编辑器
四大编辑器中最后一个组员——音效编辑器,不过它并不像其它编辑器那样强大,使用它为的是渲染地图内涵的气氛。
按F5键启动声效编辑器,结构与单位编辑器类似(图19),上方的菜单栏中,可输出/输入声音或者乐曲,在左方的声效树状列表中,能找到出现在魔兽争霸游戏中的所有声音和乐曲。双击可播放该文件,若想在触发编辑器中能调用该音效,则需要通过点击菜单File→Use Internal Sound将该文件导入到右方的声音变量列表,以使它成为一个变量。当然,这样还不能算完工,还需要在触发编辑器中调用它才行,在触发器的行为部分加入播放声音/乐曲(Sound-Play Sound或Sound-Play Music)的行为语句,便可播放刚才所加入的声音/乐曲了。虽然声音类型的行为语句很多,不过对于初学者来说,掌握这两个和中止声音/乐曲(Sound-Stop Sound或Sound-Stop Music)就差不多了。
OK,至此我们已了解WE的基本核心内容了,即通过四大编辑器来进行自主设计,为了能使大家有个较清晰的脉络,我们为大家整理一下制作地图的基本思路(图20):
1.运用地形编辑器绘制出地图的全貌,这是一张地图能否吸引人的首要条件。
2.运用单位编辑器在地图中创建游戏可能出现的任何单位,包括人物、建筑等。
3.在策划的前提下,合理使用触发编辑器来让整个地图“动”起来。大体步骤为:初始化数据→建立游戏系统(即设置人物变量等,可以增加一些类似贩卖物品系统等新元素)→游戏任务。初学者可根据上文介绍的实例进行模仿,平时多多分析高手的地图设计,有了经验后向更复杂阶段挑战。
4.地图的后期制作,包括用音效编辑器添加背景音乐、游戏音效等,然后再进行一些其它方面的润色。
5.调试阶段,如果你想做出一张受大家喜爱的地图,那么设计完地图后不要急于推出,首先让自己不断地去调试,去试玩,玩到自己都不想看到这张地图时,就大功告成啦!
既然我们了解了运用WE制作地图的方法,那么介绍几张人气很旺的地图下载后进行游戏,并运用学到的知识分析高手是怎样设计出这些经典地图的。
Kaggz RPG-Shadow of Evil(图21)
这张地图首次出现是在去年秋季。特色之一是多个分支任务,在游戏中,玩家可通过收集空瓶子来换取隐藏的装备或去寻找某个NPC来学习技能;特色之二便是可“进入房屋”,即走到房屋门口便可进入房内购买道具等,其实便是基于前文所介绍的“瞬间移动”实例制作的;特色之三是通过了声效编辑器插入了一首非常符合游戏节奏的MP3,使得玩家可充分融入游戏。
PhoenixFlame(图22)
这张不久前才推出的RPG地图可谓将触发器的使用发挥到了极致。你甚至可像玩真正的RPG一样和每个NPC进行对话。地图中新建了一个庞大的游戏系统,即加入了风、土、火、水等几大属性,要得到相应的物品才能学习相关的技能,而且还需要不断地使用技能来提高熟练度。它的成功不光是依赖游戏系统,作者在游戏任务上也下了不少苦心,例如有时你需要利用小石块来引开守卫(怎么听起来像《盟军敢死队》?);如果要进入永久黑暗的地区你需要先去获得火把;对付某个物理攻击无效的Boss,你需要换成魔法攻击。由此,让人不得不佩服地图制作者的水平。
LineAge 系列(图23)
韩国着名在线游戏《天堂》的魔兽版,在亚洲服务器上非常流行,玩家在进行游戏时需要做的只是杀怪练级然后完成任务,特点是对《天堂》模仿度很高,不仅拥有庞大的转职系统,而且迷宫、任务的设定都是极力效仿原着,目前甚至它的一些改版干脆使用了天堂里面物品的图标。至于这种地图的游戏性不需要我说了吧,在线游戏的吸引力是不言而喻的。制作方面,因为是韩国人制作的地图系列,所以都经过了加密,玩家不能通过WE对该系列地图进行学习,不过依然可作为中级地图编辑者进阶时效仿的对象。
罗罗嗦嗦了这么多篇幅,希望大家对于使用WE制作魔兽地图有了一个基本框架的认识,当然,如果想全面了解WE的所有功能以及使用方法,恐怕一本书也讲不完。我们这篇WE教程只是让更多的人熟悉WE并学会利用它做一些简单的属于自己的地图,起到抛砖引玉的作用。要制作出受到玩家喜爱的、内容丰富的高级地图,平时的积累和学习是非常重要的,当然,最重要的是个人的爱好和钻研精神。期待不久的明天在各大服务器上我也能玩到你们的地图,祝各位好运!
(本文提及的所有地图均可在War3.OGame.NeT下载,如有疑问欢迎大家到偶游社区魔兽地图论坛讨论)
地形编辑器技巧
1.点击菜单File→Perferences可对WE进行优化,如果你总是忘了存档,那么在General栏中设置AutoSave的时间来开启自动存档,至于其它选项大家可根据喜好来调节。
2.通常在设计完地形以后会通过点击菜单View→Pathing或按快捷键P开启路径选项,用来检查道路是否可通过,其中紫色代表不能通过。
3.当为单位面板时你不能点选到摆设,需要切换到摆设面板;同样,当在地形面板时,只能对地形进行操作。
单位编辑器技巧
用单位编辑器来让一个单位变成无敌(Invulnerable)。很简单,修改该单位的能力选项,再点选添加能力(Add Ability),然后你可从单位(Unit)能力面板中找到Invulnerable(Neutral),选择它便可以了。
触发编辑器技巧
在检查错误时,通常在可能引起错误的行为语句前加入Game-Text Message(Auto-Timed),这是一个在游戏中显示文字的语句,你可将它们设置为显示不同的信息,这样当你发现哪个信息没有显示时就可大致确定引起错误的语句了。
没有截图,多多包涵
Ⅱ 使用jmeter录制脚本及录制脚本的优化
1.右键测试计划---添加--线程(用户)--线程组
2.添加HTTP代理服务器(即把jmeter当做代理服务器)
3.设置代理服务器
①设置端口;
②设置Test Plan Creation 中的目标控制器(改为测试计划>线程组)注意不修改代理服务器启动时可能会报错;
③设置Requests Filtering (请求过滤器),添加建议排除,会根据设置排除模式,排除录制过程中的某些内容。
④点击“启动”按钮,后会弹出一个证书提示(注意:如果不是管理员使用,会报错,因为没有权限将证书写入到apache-jmeter-5.1.1\bin下)。
4.打开浏览器,设置计算机的代理设置(如图所示)
5.成功设置代理服务器后,在浏览器中输入网址访问,点击线程组中会有录制的脚本,因为再Requests Filtering (请求过滤器)设置了,添加了排除模式,所以录制时有些内容会被过滤。
6.录制成功后可以,添加察看结果树,保存脚本后,运行脚本。
7.录制完脚本后,接下来就是对录制脚本的优化,可以看出添加的排除模式并没有完全过滤CSS,可以禁用或删除无用的css和js(如何判断有这些内容有没有用,可以尝试先禁用掉,然后回放看对脚本有没有影响,如果禁用或者删除了,脚本还能运行成功,说明是无用的,否则反之)。
8.添加HTTP信息头管理器,作用于整个线程组,如果有自己单独的HTTP信息头管理器,则优先使用自己的。
9.如果有登录的脚本时,需要添加cookie管理器(不需要配置,直接添加使用)
Ⅲ 在unity3D: c# 怎样调用另外一个c#脚本里面东西
例:第一个脚本名字为Class_1,第二个脚本名字为Class_2,Class_1调用Class_2
如果Class_2没有绑定在任何GameObject上,那在Class_1里写法:
Class_2 c2 = new Class_2();
如果Class_2绑定在GameObject上,那在 Class_1里写法:
Class_2 c2 = null;
void Start()
{
c2 = GameObject.Find("绑定的GameObject名字").GetComponent<Class_2>();
}
Ⅳ Linux 下python 脚本编写的&quot;奇技淫巧&quot;
“ 生命完美的答案,无非走过没有遗憾 ---《天蓝》”
“如何能够解析脚本运行命令行选项(位于 sys.argv 中)”
argparse 模块可被用来解析命令行选项
常用来定义一个脚本的说明文档,一般我们写python脚本会通过 if..else 的方式来提供一个脚本说明文档,python不支持switch。所以很麻烦,其实,我们可以通过 argparse 来编写说明文档。
我们来看看怎么执行一个python脚本
对于熟悉Linux的小伙伴下面的文档在熟悉不过了,这个一个标准Linxu软件包的说明文档,文档中定义是软件包的说明
来看看这个脚本是如何编写的
为了解析命令行选项, 首先要创建一个 ArgumentParser 实例, 使用 add_argument() 方法声明你想要支持的选项。在每个 add-argument() 调用中:
dest 参数指定解析结果被指派给属性的名字。 metavar 参数被用来生成帮助信息。
action 参数 指定跟属性对应的处理逻辑,通常的 值为 store , 被用来存储 某个值 或将 多个参数值收集到一个列表中 。
nargs 参数收集 所有剩余的命令行参数到一个列表中。在本例中它被用来构造一个文件名列表
action='store_true' 根据参数是否存在来设置一个位置 Boolean 标志:
action='store' 参数接受一个单独值并将其存储为一个字符串
如果一个都没有,会提示缺少参数 -p/--pat
choices={'slow', 'fast'}, 参数说明接受一个值,但是会将其和可能的选择值做比较,以检测其合法性:
一旦参数选项被指定,你就可以执行 parser.parse() 方法了。它会处理 sys.argv 的值并返回一个结果实例。每个参数值会被设置成该实例中 add_argument() 方法的 dest 参数指定的属性值。
还很多种其他方法解析命令行选项。可以会手动地处理 sys.argv 或者使用 getopt 模块 。但是,如果你采用本节的方式,将会减少很多冗余代码,底层细节 argparse 模块 已经帮你处理好了。你可能还会碰到使用 optparse 库解析选项的代码。尽管 optparse 和 argparse 很像 ,但是后者更先进,因此在新的程序中你应该使用它。
“你写了个脚本,运行时需要一个密码。此脚本是交互式的,因此不能将密码在脚本中硬编码,而是需要弹出一个密码输入提示,让用户自己输入。”
Python 的 getpass 模块 正是你所需要的。你可以让你很轻松地弹出密码输入提示,并且不会在用户终端显示密码。
代码中 getpass.getuser() 不会弹出用户名的输入提示。它会根据该 用户的 shell 环境 或者会依据 本地系统的密码库 (支持 pwd 模块的平台)来使用 当前用户的登录名
在bash中编写pytohn脚本接收外部数据的方式,一般情况下,对于一般变量,我们用命令行变量的方式比较多(手动的处理 sys.argv ),对于 文件内容或者bash命令输出 直接通过脚本内部获取需要的数据。
其实python 脚本也可以用其他方式来接收 传递给他的 文件数据或者bash命令输出 ,包括将 命令行的输出 通过 管道传递 给该脚本、 重定向文件到该脚本 ,或在 命令行中传递一个文件名 或 文件名列表 给该脚本。
这里通过 Python 内置的 fileinput 模块 ,可以实现重 定向,管道,以文佳输出 的方式传递数据到脚本内部
使用 fileinput.input() 方法可以获取当前输入脚本的数据,脚本里面用一个 FileInput 迭代器接收
文件直接接收
重定向接收
管道方式接收
fileinput.input() 创建并返回一个 FileInput 类的实例,该实例可以被当做一个 上下文管理器 使用。因此,整合起来,如果我们要写一个打印多个文件输出的脚本,那么我们需要在输出中包含文件名和行号
“你想执行一个外部命令并以 Python 字符串的形式获取执行结果。”
使用 subprocess.check_output() 函数。
执行下试试
如果被执行的命令以非零码返回,就会抛出异常。下面的例子捕获到错误并获取返回码:
默认情况下, check_output() 仅仅返回输入到标准输出的值。如果你需要 同时收集标准输出和错误输出 ,使用 stderr 参数:
如果你需要用一个超时机制来执行命令,使用 timeout 参数:
通常来讲,命令的执行 不需要 使用到 底层 shell 环境(比如 sh、bash) 。一个字符串行表会被传递给一个 低级系统命令 ,比如 os.execve() 。
如果你想让 命令被一个shell 执行 ,传递一个字符串参数,并设置参数 shell=True . 有时候你想要 Python 去执行一个复杂的 shell 命令 的时候这个就很有用了,比如管道流、I/O 重定向和其他特性。例如:
是在 shell 中执行命令会存在一定的安全风险,特别是当参数来自于用户输入时。这时候可以使用 shlex.quote() 函数 来将参数正确的用双引用引起来。
使用 check_output() 函数 是执行 外部命令 并获取其 返回值 的最简单方式。但是,如果你需要对 子进程做更复杂的交互 ,比如给它发送输入,你得采用另外一种方法。这时候可直接使用 subprocess.Popen 类。
关于子进程,简单来看下
也可以进程列表同协程结合的方式。你既可以在子shell中 进行繁重的处理工作,同时也不会让子shell的I/O受制于终端。
如果直接丢到后台会自动在终端输出IO
subprocess 模块对于依赖 TTY 的外部命令不合适用 。例如,你不能使用它来自动化一个用户输入密码的任务(比如一个 ssh 会话)。这时候,你需要使用到第三方模块了,比如基于着名的 expect 家族的工具(pexpect 或类似的)(pexpect可以理解为Linux下的expect的Python封装、通过pexpect可以实现对ssh、ftp、passwd、telnet等命令行进行自动交互,而无需人工干涉来达到自动化的目的。比如我们可以模拟一个FTP登录时所有交互,包括输入主机地址、用户名、密码、上传文件等,待出现异常还可以进行尝试自动处理。)
“你想向标准错误打印一条消息并返回某个非零状态码来终止程序运行”
通过 python 的 raise SystemExit(3) 命令可以主动抛出一个错误,通过 sys.stderr.write 将命令写到标准的输出端
直接将消息作为参数传给 SystemExit() ,那么你可以省略其他步骤
抛出一个 SystemExit 异常,使用错误消息作为参数,它会将消息在 sys.stderr 中打印,然后程序以状态码 1 退出
“你需要知道当前终端的大小以便正确的格式化输出。”
使用 os.get terminal size() 函数 来做到这一点。
“复制或移动文件和目录,但是又不想调用 shell 命令。”
shutil 模块 有很多便捷的函数可以复制文件和目录。使用起来非常简单
这里不多讲,熟悉Linux的小伙伴应该不陌生。
默认情况下,对于 符号链接 这些命令处理的是它指向的东西文件。例如,如果 源文件 是一个 符号链接 ,那么目标文件将会是 符号链接 指向的文件。如果你只想 复制符号链接本身 ,那么需要指定 关键字 参数 follow_symlinks
tree() 可以让你在复制过程中选择性的忽略某些文件或目录。你可以提供一个忽略函数,接受一个目录名和文件名列表作为输入,返回一个忽略的名称列表。例如:
对于文件元数据信息, 2() 这样的函数只能尽自己最大能力来保留它。 访问时间、创建时间和权限 这些基本信息会被保留,但是 对于所有者、ACLs、资源 fork 和其他更深层次的文件元信息就说不准了
通常不会去使用 shutil.tree() 函数 来执行 系统备份 。当处理文件名的时候,最好使用 os.path 中的函数来确保最大的可移植性
使用 tree() 复制文件夹的一个棘手的问题是对于错误的处理,可以使用异常块处理,或者通过 参数 ignore dangling symlinks=True 忽略掉无效符号链接。
“创建或解压常见格式的归档文件(比如.tar, .tgz 或.zip)”
shutil 模块拥有两个函数—— make archive() 和 unpack archive() 可派上用场,
make archive() 的第二个参数是期望的输出格式。可以使用 get archive formats() 获取所有支持的归档格式列表。
“你需要写一个涉及到文件查找操作的脚本,比如对日志归档文件的重命名工具,你不想在 Python 脚本中调用 shell,或者你要实现一些 shell 不能做的功能。”
查找文件,可使用 os.walk() 函数 ,传一个顶级目录名给它
os.walk() 方法 为我们 遍历目录树 ,每次进入一个目录,它会返回一个 三元组 ,包含 相对于查找目录的相对路径,一个该目录下的目录名列表,以及那个目录下面的文件名列表。
对于每个元组,只需检测一下目标文件名是否在文件列表中。如果是就使用 os.path.join() 合并路径。为了避免奇怪的路径名比如 ././foo//bar ,使用了另外两个函数来修正结果
os.walk(start) 还有跨平台的优势。并且,还能很轻松的加入其他的功能。我们再演示一个例子,下面的函数打印所有最近被修改过的文件:
打印10分钟之前被修改的数据
“怎样读取普通.ini 格式的配置文件?”
configparser 模块 能被用来读取配置文件
编写配置文件
如果有需要,你还能修改配置并使用 cfg.write() 方法将其写回到文件中
“你希望在脚本和程序中将诊断信息写入日志文件。”
python 脚本打印日志最简单方式是使用 logging 模块
五个日志调用( critical(), error(), warning(), info(), debug() )以降序方式表示不同的严重级别。 basicConfig() 的 level 参数是一个 过滤器 。所有级别低于此级别的日志消息都会被忽略掉。每个 logging 操作的参数是一个消息字符串,后面再跟一个或多个参数。构造最终的日志消息的时候我们使用了 % 操作符来格式化消息字符串。
如果你想使用配置文件,可以像下面这样修改 basicConfig() 调用:
logconfig.ini
在调用日志操作前先执行下 basicConfig() 函数方法 ,可以找标准输出或者文件中输出
basicConfig() 在程序中只能被执行一次。如果你稍后想改变日志配置,就需要先获取 root logger ,然后直接修改它。
更多见日志模块文档https://docs.python.org/3/howto/logging-cookbook.html
“你想给某个函数库增加日志功能,但是又不能影响到那些不使用日志功能的程序。”
对于想要执行日志操作的函数库,你应该创建一个专属的 logger 对象,并且像下面这样初始化配置:
使用这个配置,默认情况下不会打印日志,只有配置过日志系统,那么日志消息打印就开始生效
通常来讲,不应该在函数库代码中 自己配置日志系统 ,或者是已经有个已经存在的日志配置了。调用 getLogger( name ) 创建一个和调用模块同名的 logger 模块 。由于 模块 都是唯一的,因此创建的 logger 也将是唯一 的。所以当前进程中只有一个logging会生效。
log.addHandler(logging.NullHandler()) 操作将一个 空处理器 绑定到刚刚已经创建好的 logger 对象 上。一个空处理器默认会忽略调用所有的日志消息。因此,如果使用该函数库的时候还没有配置日志,那么将不会有消息或警告出现。
在这里,根日志被配置成仅仅 输出 ERROR 或更高级别的消息 。不过, somelib 的日志级别被单独配置成可以输出 debug 级别的消息, 它的优先级比全局配置高。像这样更改单独模块的日志配置对于调试来讲是很方便的,因为你无需去更改任何的全局日志配置——只需要修改你想要更多输出的模块的日志等级。(这个还有待研究)
“你想记录程序执行多个任务所花费的时间”
time 模块 包含很多函数来执行跟时间有关的函数。尽管如此,通常我们会在此基础之上构造一个更高级的接口来模拟一个计时器。
这个类定义了一个可以被用户根据需要启动、停止和重置的计时器。它会在elapsed 属性中记录整个消耗时间。下面是一个例子来演示怎样使用它:
这里通过 __enter__,__exit__ ,使用 with 语句 以及上下文管理器协议可以省略计时器打开和关闭操作。(关于上下文管理协议,即with语句,为了让一个对象兼容with语句,必须在这个对象的类中声明 __enter__和__exit__方法, , __enter__ 在出现with语句被调用, __exit__ 在代码执行完毕被调用,可以参考open()方法)
在计时中要考虑一个 底层的时间函数问题 。 一般来说, 使用 time.time() 或 time.clock() 计算的时间精度因操作系统的不同会有所不同。而使用 time.perf_counter() 函数可以确保使用系统上面 最精确的计时器 。
“你想对在 Unix 系统上面运行的程序设置内存或 CPU 的使用限制。”
resource 模块 能同时执行这两个任务。例如,要限制 CPU 时间,下面的代码在windows平台执行不了,但是Linux是可以的。
程序运行时, SIGXCPU 信号 在时间过期时被生成,然后执行清理并退出。
这暂时没有好的Demo...
程序运行到没有多余内存时会抛出 MemoryError 异常。
setrlimit() 函数 被用来设置特定资源上面的 软限制和硬限制 。
setrlimit() 函数 还能被用来设置 子进程数量、打开文件数以及类似系统资源的限制(cgroup) 。
“通过脚本启动浏览器并打开指定的 URL 网页”
webbrowser 模块 能被用来启动一个浏览器,并且与平台无关
新窗口打卡网站
当前窗口打开一个tab页
指定浏览器类型,可以使用 webbrowser.get() 函数
Ⅳ 关于CS脚本的使用!!!
的确没什么用。
你下载的是不是一个名为:congfig.cfg的文件,把它复制到类似于以下目录中F:\本地游戏\Cs1.6中文版\cstrike_schinese的文件夹内,然后系统问你:是不是要替换? 选是 。
然后运行游戏,在游戏设置中可以看到所有游戏选项全变了(就是那些高手的设置)
CS主要的是技术,设置占次要。不过我建议你鼠标灵敏度不要太高,你会发现高手设置中灵敏度一般没有超过4.0的。
Ⅵ 魔兽争霸澄海3C英雄热键修改脚本
http://patch.ali213.net/view.asp?id=3226
这个网址下魔兽热键修改器,简体中文,很直观方便,解压后双击即可运行。
不过本人不建议使用修改器,就像用外挂的感觉一样,有的支持多技能一个键的设置,按一下,N多技能一起放,还玩啥?
还是熟练的使用系统给的键位比较好
给你一些热键的说明吧 :
1,“~”,按它可以选中正在休息的农民。
2,“backspace”,按它可以迅速的切回主基地,并以主基地为屏幕的中心。这个热键在英雄回程救援的时候极为重要,你选中英雄,使用回程,再按backspace切回基地,选中自己回程的理想地点,回程(别忘了回程可以选择位置,不一定要点到主基地上才能回来)。这样总比在小地图上点击基地再选好位置要快一点。
3,insert和delete可以让屏幕右旋或者左旋,这样你可以点到一些正常视角点击不到的单位,比如人族探路的小动物往往躲在高大建筑的后面。
4,pageup和pagedown可以让视角下移或者上移,鼠标中键也可以做到。这样你可以近距离欣赏到你想看到的东西。
5,O键可以给英雄迅速的学习技能,做法是选中英雄,按O再按相应技能的快捷键,相当于鼠标点击那个“+”号。例如你的死亡骑士在红血的时候恰好升级,可以迅速的按下O、E学习死亡契约,再吃自己的单位,保证死亡骑士不死。
用键盘建造、放魔法、用物品,重要的一点在于摈弃以前用鼠标点击的坏习惯,强迫自己使用键盘。不断的使用着键盘以后,你会发现键盘的使用,已经成为了你的习惯,而且终会尝到使用键盘的甜头。
PS:A键,H键,P键,tab键的运用。
1,A键,攻击键。如果只用右键行军,部队只是移动到目的地,再进行攻击。而使用A键然后点目的地行军,部队行进过程中如果发现敌军,立刻能够停下攻击。另外如果你想杀掉自己或者队友的单位,同样是用A键攻击。
2:H键,保持原位键。例如对手的基地里海了箭塔,而你只能用攻城车攻击他的基地,你的对手往往会用几个单位出来诱引你的单位到他的箭塔群里去。这个时候你可以把你的非攻城单位用H键停留原位保护攻城车。
3:P键,巡逻键。例如你非要让不死的阴影在对手的主基地与分基地之间转来转去,可以先让阴影到主基地,按p再点分基地,你的阴影就会达到你的目的了。
4:TAB键,子组转换键。例如把死亡骑士和巫妖编入一个组队,而我想释放巫妖的霜冻新星。可以按tab,就发现状态栏里巫妖的头像凸现了出来,就可以释放霜冻新星了。
二:进阶的操作:alt、shift、ctrl的使用。
可以说,不使用这3个键的魔兽玩家基本没有入门,不掌握这3个键的魔兽玩家不能算是高手。个人认为,掌握这3个键的过程,是菜鸟成为高手的必由之路。下面介绍一下这3个键的作用。
一alt键:
①:按alt键的用途是观察屏幕上所有单位的血量。按下alt之后你可以发现每一个单位头顶上都出现血条,这使得你对敌我双方,哪个单位濒死一目了然。然后你应该做的是把自己濒死的单位向后拖动,然后想办法把对方濒死的单位弄死。记住操作的最终目的,尽可能多的保护自己的每一个单位,尽可能多的杀死对方的每一个单位。据说某高手在战斗的时候,是把一根牙签插在alt键上的。虽然略觉夸张,但这事仍然说明alt键事关重大。
②:alt键可以和其他键组合产生作用,最着名的莫过于alt+ctrl+del了,其次是alt+F4。但这些组合在魔兽过程中是不能乱按的。在魔兽中常用的组合是:
1,alt+G 在2vs2的时候很重要,用于在地图上发出一个警告。可以告诉你的盟友你在哪里需要帮助。
2,alt+A 改变自己、队友、敌人的颜色。尽量改变成模式3,即自己成为蓝色,队友成为绿色,敌人成为红色。以在战斗时能更加分清敌我,以免误伤。
3,alt+F 开关队型移动。在逃跑的时候,记住一定要把队型移动关掉,否者那些远程单位非要等到近战单位逃到前面才肯移动。
二shift键:
①:shift键的一个作用其实很简单,说白了就是让一个单位连续的做几件事。但这个作用一旦运用起来,就变得很有用处了。
1,让一个农民做完建筑之后自动回去采矿。做法是选中农民,下达建造命令以后按住shift,再用右键点击木头,或者金矿。
2,让一个农民连续做几样建筑。做法是选中农民,下达第一个建造命令,按住shift,下达第二个建造命令...类推。结合第1种方法,可以让农民做完一大堆建筑以后继续回去采矿。如果连续建造的是相同的建筑,比如人族的农场。你可以先把农民拖出,按住shift不放,按BF(农场快捷键),之后想做哪里就做哪里,往空地按就是,最后别忘了用shift把农民拉回来采矿。
3,连续向几个地方探路。做法是选中探路的单位,先点击第一个探路地点,按住shift不放,再依次点击你想让这个单位去的各个地方,放开shift。
4,让你的单位集中火力,连续攻击N个对方单位。这种做法的对象最好是远程单位。做法是用右键点击对方的一个单位,按shift连续点击你依次想攻击的单位。这样可以集中火力,造成对某几个单位的连续高伤害。但这种做法的弊端在于如果对方把正在被攻击的单位调开,你的单位仍然会继续追击,这样会受到更多对方其他单位的攻击。所以最好只是连续的点射2-3个单位就可以了。因为如果你一下下达点射12个单位的指令,一旦对手把他的单位调开,你又要重新下达新的指令。汗,你累不累啊。
5,让你的部队绕过野生怪物。经常战斗中出现的情况是你的单位集结在英雄身上,而在白天生产出来的单位往往要经过野生怪物的旁边,造成单位的受伤或者死亡。避免这种情况的发生可以使用shift键。做法:点击兵营,按住shift设置集结点,把集结点绕开野生怪物,最后点在英雄身上。之后,从兵营出来的单位会在N个集结点上先后走过,最后走到英雄身上。
6,骚扰之后全身而退。例如石像鬼骚扰,先点杀一个农民(或几个),再shift点击安全的地方。
7,其他用途。具体的很多想不起来。觉得最经典的就是暗夜的熊,先按f变回德鲁伊,shift+e加血,再shift+f变回。这个操作用shift可以在一秒内完成,可是如果你等熊变回德鲁伊,再按e加血,等加血后再按f变回,2-3秒的时间都过去了。
②:在一个队伍里添加或者剔除单位。
1,添加。想要把一个单位编入你正在控制的这个队伍,只要按shift在点击(框选也可以)想添加的单位就可以了。这个做法在编入刚制造出来的单位时尤其重要。
2,剔除。想要把一个单位剔除你正在控制的这个队伍,只要按shift在点击(框选也可以)想剔除的单位就可以了。
具体实例,在losttemple上,你的4个兽兵有1个濒死,可以先把这4个兽兵右键点击生命之泉,再按shift点中濒死兽兵(状态栏的图标也可以),把这个兽兵从组队里剔除,再控制其他3个兽兵做其他的工作(mf,骚扰之类),等这个濒死的兽兵满血以后再把它添加到组队里来。
三ctrl键:
①:ctrl键的第一个作用用于组队。例如想把7个火枪手和2个男巫编成一队,只要选中7个火枪手和2个男巫,按ctrl+1,就算是把火枪手和男巫编成一队了。接下来,按一次1是选中1队,按两次1是选中1队,并且以1队做为屏幕中心。魔兽里面最多可以有0、1-9十个编队。把每一个单位编入组队,是操作的基础。另外,建筑也是可以被编队的。例如把兵营编为5队,可以一边在战斗或者mf,一边按5做步兵或者火枪。
②:选中屏幕内相同的单位。例如想选中同个屏幕中的8个食尸鬼,可以按住ctrl再点随便一个食尸鬼,就可以全部选中8个了。但选中的单位,最多只有12个,因为一个组队只能容纳12个单位嘛,呵呵。
③:ctrl键的另外一个作用是传说中的“子组顺序修改键”。进入游戏后,“选项”内的“游戏性”里,把“子组顺序修改键”前面的方框点上勾,就可以用上这个功能了。这个功能的作用可以将同一个组队的不同单位分开工作。举个例子,不死前期使用骷髅权仗+食尸鬼mf,把食尸鬼和骷髅编在一个组队,而mf的时候我想把骷髅顶在前面,就可以先按TAB(因为骷髅的优先度比食尸鬼低)选中骷髅,按住ctrl移动到前面。你会发现只有骷髅在移动而食尸鬼是不会动的。
三:更精细的操作:M键,S键的使用。
一M键:本意是move,但是我们可以把它引申为包围。对,它就是传说中的包围键。要成为高手,就要把包围练到神乎其技。各位,努力了。
战场上的第一焦点永远是英雄,所以我们当然先说的是包围英雄。理论上,在没有地形的影响下,4个单位就能够把一个英雄围住。但是这种情况很少出现,所以我们一般用5个或5个以上的单位来围英雄。
围英雄基本的操作步骤(用6食尸鬼为例):1,先用右键移动食尸鬼到对方英雄的另外一边。2,当有2个食尸鬼超过了英雄之后,选中6食尸鬼,M到对方英雄身上。3,再按M,再点到对方英雄身上。4,再按M,再点到对方英雄身上。5,按A攻击对方英雄。包围时候最重要的一点,永远不要认为一次M键就可以把对方围住。[{当然,包围以后要注意再用A建进行攻击,HOHO,别忘记了哦。}]
然而如此明显的包围,对手很容易察觉,从而很轻松的跑掉。所以我们总是想尽办法来相对的减缓对方英雄的速度,来实施更轻松的包围。做法有:
1,固定对方英雄:山岳的风暴锤,牛头人酋长的战争践踏,萨满的净化,狼骑的诱捕,巫医的静止陷阱,丛林守护者的树根缠绕,猛禽德鲁伊的飓风,地穴领主的穿刺,恐惧魔王的睡眠和终极技能,地精修理匠的飞弹。
2,缓慢对方英雄:血法的虚无,女巫的缓慢,影子猎手的巫术,飞龙的浸毒攻击,守望者的暗影突袭(毒镖),树妖的毒素攻击,巫妖的霜冻新星,不死的霜冻塔,骷髅法师的残废,冰龙的攻击,哪伽的冰箭,熊猫的酒雾。当然,还有佩带了闪电球、毒液球或者霜冻球的英雄。
3,加快自己部队:兽族的加速卷轴,牛头人酋长的耐久光环,死亡骑士的邪恶光环(包括拥有天灾骨钟的英雄)。
还有一种做法就是利用地形。论坛上的一张恶魔猎手被一个月亮井和3个小弓箭手包围的图文战报相信大家都看过了,这是利用地形的一次经典包围。同样,我们也可以利用地图上的拐角,楼梯用更少的兵包围英雄。这就要让对手的英雄尽量的走旁边。举个例子,我们可以把自己基地的建筑只留最边上一个口子,假如对方的英雄要来骚扰,一定只能从建筑和树林的缝隙中进来,而我们可以利用建筑和树林,实施包围。
利用召唤单位包围也是一种好方法,具体怎么搞我还真不知道(众人倒:“你个菜鸟,不知道你说什么啊!”)。在战斗的时候,用3个兽兵先包围住你的一半,然后先知躲在一旁一放狼,英雄就正好被包围了。另外死亡之书,一下是召唤出8个单位,围一个英雄足够。这两种情况都是我在和别人对战时候遇到过的尴尬情况。当然我还有在骚扰人族开分基地时候,被民兵+水元素包围的情况,555~~~。
M键还可以用来反包围。当你的对手用固定或者减缓你英雄的方法想对你英雄实施包围,这个时候你可以把自己的单位包围英雄,然后在英雄恢复之后逃离包围。
包围普通的单位和包围英雄基本上是一样的,只是有些单位的体积比英雄小一点,包围的时候需要更多的单位。
一次成功的包围往往可以左右一场战斗的胜负。例如你的对手大军浩浩荡荡的开到你家来,而你家里只有一点点的兵力可守。如果包围对手英雄成功,既可以解决你的燃眉之急,又浪费了对手的一张¥350的回程。
在越来越多的人懂得把濒死的兵拖动以保护单位的现在,好好的练习包围吧。
二S键:本意是stop,但是我们可以把它引申为阻挡。
阻挡一个单位的基本做法是:1,让你的单位想办法跑到它移动路线的前面。2,把你的单位斜插到它的移动路线上。3,一旦走到它要移动的路线上面,按S。
接下来你要做的就是不停的推测它的移动路线,不停的占据它的移动路线,一边用鼠标控制你的单位的移动路线,一边狂按S。阻挡时候最重要的一点,永远不要以为你的单位能够恰好跑到它的移动路线上去阻挡它,要用S键控制你的单位在恰当的位置停下来,并用鼠标右键让你的单位继续移动。
有时候我认为,阻挡几乎和包围相同的重要。你的对手在觉得打不赢之后,往往控制大量黄血或者红血的单位逃跑。而你完全可以用一个或者几个单位阻挡住对手一个或几个单位,而等待自己的英雄过来释放魔法或者等待自己的单位过来包围。给我印象最深的两个阻挡,一个是一个人族用农民阻挡一个红血的5级先知,然后这个先知被大法师丢下4个火球而死,还有一个是xiaOt用2条3级隐形狼阻挡一个黄血的6级大法师,然后这个大法师愣是被2道闪电+2个震荡波打倒。
当然,S键的阻挡也可以用来掩护自己部队的撤退。当自己撤退而对手穷追不舍得时候,我们可以让一个速度快一点的单位(这样在掩护这个单位可以迅速的逃走),例如英雄、女猎手、狼骑士之类,阻挡对手部队,让他停止对你的追击,当然最重要的还是意识了。
Ⅶ unity中常用脚本生命周期全解
1)Awake:整个生命周期中只执行一次(脚本文件被加载到场景中的时间调用)
2)OnEnable:整个生命周期执行的次数不确定(当游戏对象或者脚本在激活的时间执行该方法)
3)Start:整个生命周期中只执行一次(用于进行初始化操作)
4)FixedUpdate:以帧为单位进行场景的刷新,以固定的时间来进行间隔执行,主要完成与物理相关的更新操作
5)Update:每一帧与每一帧的执行时间可能是不一样的,Update方法执行速率与硬件和渲染的物体有关系,有时间快,有时间慢,主要完成场景中一些数据的更新和数据的逻辑处理操作
6)LateUpdate:当一帧执行结束,在执行下一帧之前,会调用此方法
7)OnGUI:以帧为单位进行反复的执行
8)OnDisable:整个生命周期执行的次数不确定(当对象或脚本处于不可用或不可激活的时间执行该方法,一般会与OnEnable方法配合使用)
9)OnDestory:整个生命周期只执行一次(当对象(或脚本文件)被销毁的时间执行该方法,在执行该方法的时间,一般会先执行OnDisable方法,将对象变为不可用的状态,然后在销毁)
1)一个游戏对象是否只能绑定一个脚本
一个游戏对象的身上会绑定多个脚本文件
2)如果一个游戏对象可以绑定多个脚本,那么那个脚本先执行,那个脚本最后执行了
先绑定的脚本最后执行,最后绑定的脚本先被执行
3)场景中如果存在多个游戏对象,多个游戏对象的身上都绑定了脚本文件,执行顺序又是怎样的
先绑定的脚本最后执行,最后绑定的脚本先被执行,无论游戏对象上绑定了多少脚本组建,脚本的执行和脚本的绑定顺序有关
注意:绑定在游戏物体对象上面的脚本文件可以手动设置Script Execution Order来决定脚本的执行顺序,值越小代表的执行优先级越高
Ⅷ 坦克世界脚本什么意思
外 挂的另一种说法,都是作弊的意思,坦克世界这个游戏是有官方外挂的,所以还是以盒子为主就是了,基本都在用,当然你也可以买那些花钱的外挂,象压树、透视之类的所谓脚本。