鳄鱼小顽皮爱洗澡吧 关注:9,847贴子:73,839

【重发】鳄鱼XMLPNG教程

取消只看楼主收藏回复

明天再说。


IP属地:北京1楼2014-11-28 17:09回复
    不行,我要提前发帖。现在开始!


    IP属地:北京2楼2014-11-28 17:17
    回复
      前言:
      自制关卡的时代来临!
      BY:@鳄鱼Swampy
      本自制关卡教程禁止游戏狗转载,
      允许其他网站转载。
      本版本仅限互联网内传播,
      若有疑问,请咨询百度鳄鱼小顽皮爱洗澡吧。


      IP属地:北京3楼2014-11-28 17:19
      回复
        第一章
        走进自制关卡
        什么是自制关卡?怎样才能自制关卡?用什么工具能够自制关
        卡?让我们走进自制关卡吧,这是了解《鳄鱼小顽皮爱洗澡》自制关卡
        的第一步!在学习的过程中,我们还会探究到游戏的内文件。实际上,
        自制关卡用的工具很简单,画图和记事本而已。但为了方便自制关卡,
        我们还会接触到一些辅助工具,比如定位工具。


        IP属地:北京4楼2014-11-28 17:21
        收起回复
          再发个1.2
          1.2 准备自制关卡
          认识 PNG 和XML
          在前面的文字中,我们已经讲过了一个《鳄鱼小顽皮爱洗澡》的关
          卡是由一个 PNG结构图和一个 XML文件组成的。其中 PNG包括了游戏
          的以下部分:水、毒水、泥浆、水蒸气、泥巴、土壤、石头(有三种:
          普通、高光、阴影)、水藻、熔岩。XML 则包括了其他物体。
          单页关卡的 PNG 尺寸是 90×120,多页关卡 PNG 的宽度必须保持
          90,高度会大于120。
          比如说,右图就是可燃机关
          卡 C2-16(无用的水)的结构图
          (CR_worthless_water.png)。这
          是一个单页关卡。
          XML 的全名是 Extensible Markup Language,意思是
          可扩展标记语言。但游戏中的XML 比较特殊,用记事本
          打开的话就认不出换行符(如左图),不方便查看。所以,
          请先用写字板打开,然后点“保存”,之后就可以用记事
          本打开了。比如,以下代码就是 1-1(第一凿)的 XML
          (first_dig.xml)
          firstdig换个帖子发


          IP属地:北京6楼2014-11-28 18:02
          回复
            first_dig.xml 代码:
            <?xml version="1.0"?>
            <Objects>
            <Object name="Obj13">
            <AbsoluteLocation value="29.995510 -2.505274"/>
            <Properties>
            <Property name="Angle" value="118.171"/>
            <Property name="Filename" value="/Objects/pipe_straight.hs"/>
            </Properties>
            </Object>
            <Object name="Obj9">
            <AbsoluteLocation value="9.235867 -3.205633"/>
            <Properties>
            <Property name="Angle" value="31.0246"/>
            <Property name="Filename" value="/Objects/pipe_straight.hs"/>
            </Properties>
            </Object>
            <Object name="0">
            <AbsoluteLocation value="0.660138 23.270973"/>
            <Properties>
            <Property name="Angle" value="0"/>
            <Property name="Filename" value="/Objects/star.hs"/>
            <Property name="Type" value="star"/>
            </Properties>
            </Object>
            <Object name="1">
            <AbsoluteLocation value="0.886772 12.810501"/>
            <Properties>
            <Property name="Angle" value="0"/>
            <Property name="Filename" value="/Objects/star.hs"/>
            <Property name="Type" value="star"/>
            </Properties>
            </Object>
            <Object name="2">
            <AbsoluteLocation value="0.794857 3.106299"/>
            <Properties>
            <Property name="Angle" value="0"/>
            <Property name="Filename" value="/Objects/star.hs"/>
            <Property name="Type" value="star"/>
            </Properties>
            </Object>
            <Object name="4">
            <AbsoluteLocation value="0.299999 -14.699999"/>
            <Properties>
            <Property name="Angle" value="90.3071"/>
            <Property name="Filename" value="/Objects/pipe_straight.hs"/>
            </Properties>
            </Object>
            <Object name="6">
            <AbsoluteLocation value="0.300001 -18.899996"/>
            <Properties>
            <Property name="Angle" value="-88.4836"/>
            <Property name="Filename" value="/Objects/pipe_connector_end.hs"/>
            </Properties>
            </Object>
            <Object name="Spout6">
            <AbsoluteLocation value="0.710485 -10.328764"/>
            <Properties>
            <Property name="Angle" value="-13.5142"/>
            <Property name="ConnectedSpout0" value="SWAMPY_SPOUT"/>
            <Property name="ConnectedSpoutProbability0" value="1"/>
            <Property name="Filename" value="/Objects/broken_pipe.hs"/>
            <Property name="Type" value="spout"/>
            </Properties>
            </Object>
            <Object name="Spout9">
            <AbsoluteLocation value="5.960537 -5.336953"/>
            <Properties>
            <Property name="Angle" value="127.947"/>
            <Property name="Filename" value="/Objects/broken_pipe.hs"/>
            <Property name="Type" value="spout"/>
            </Properties>
            </Object>
            <Object name="Obj10">
            <AbsoluteLocation value="14.861454 -1.240829"/>
            <Properties>
            <Property name="Angle" value="7.70174"/>
            <Property name="Filename" value="/Objects/pipe_straight.hs"/>
            </Properties>
            </Object>
            <Object name="Obj11">
            <AbsoluteLocation value="20.922577 0.114305"/>
            <Properties>
            <Property name="Angle" value="17.8773"/>
            <Property name="Filename" value="/Objects/pipe_straight.hs"/>
            </Properties>
            </Object>
            <Object name="Obj12">
            <AbsoluteLocation value="26.201435 1.321377"/>
            <Properties>
            <Property name="Angle" value="-149.646"/>
            <Property name="Filename" value="/Objects/pipe_connector_90.hs"/>
            </Properties>
            </Object>
            <Object name="Obj14">
            <AbsoluteLocation value="32.716476 -6.004216"/>
            <Properties>
            <Property name="Angle" value="-149.635"/>
            <Property name="Filename" value="/Objects/pipe_elbow_1.hs"/>
            </Properties>
            </Object>
            <Object name="Obj15">
            <AbsoluteLocation value="36.939003 -4.448620"/>
            <Properties>
            <Property name="Angle" value="207.744"/>
            <Property name="Filename" value="/Objects/pipe_straight.hs"/>
            </Properties>
            </Object>
            <Object name="Ducky26">
            <AbsoluteLocation value="0.846874 3.128124"/>
            <Properties>
            <Property name="Angle" value="0"/>
            <Property name="Filename" value="/Objects/star_teleport.hs"/>
            <Property name="StarType" value="teleport"/>
            <Property name="Type" value="star"/>
            </Properties>
            </Object>
            <Object name="Ducky27">
            <AbsoluteLocation value="0.659374 13.431252"/>
            <Properties>
            <Property name="Angle" value="0"/>
            <Property name="Filename" value="/Objects/star_teleport.hs"/>
            <Property name="StarType" value="teleport"/>
            <Property name="Type" value="star"/>
            </Properties>
            </Object>
            <Object name="Ducky28">
            <AbsoluteLocation value="0.846874 23.200001"/>
            <Properties>
            <Property name="Angle" value="0"/>
            <Property name="Filename" value="/Objects/star_teleport.hs"/>
            <Property name="StarType" value="teleport"/>
            <Property name="Type" value="star"/>
            </Properties>
            </Object>
            <Room>
            <AbsoluteLocation value="0.400003 -32.400002"/>
            </Room>
            <Properties>
            <Property name="HeavyIntro" value="1"/>
            </Properties>
            </Objects>


            IP属地:北京7楼2014-11-28 18:03
            回复
              什么是“右图”?我在这附上。


              IP属地:北京8楼2014-11-28 18:07
              回复
                其中,XML代码的第一行必须是“<?xml version="1.0"?>”。
                看起来很难吗?只要对计算机有一定的基础的人,一般都能看得懂。在后续章节,我们会详
                细解读这一代码。


                IP属地:北京9楼2014-11-28 18:07
                回复
                  今天走亲戚,
                  不知何时能回来。
                  我走了


                  IP属地:北京12楼2014-11-29 07:32
                  回复
                    我回来了
                    今天把第二章发完
                    2.2
                    2.2 结构图中的注意事项
                    2.2.1 注意iPhone 的视野
                    也许你注意到,现成的结构图中,左右两侧不大可能出现流动物质,一般是留空、土壤或石
                    头。而且,在 iPhone 或 iPod Touch 上看,左右两侧的石头不像在 iPad 上那样厚。这就是我们要
                    讨论的问题。
                    我们先来绘制一个这样的结构图(左下图为局部,石头贴近右侧),放到 iPad 上试一下,一
                    切正常,水能被石头容器包住(如下图) 。
                    一旦我们把这个结构图放到 iPhone 或iPod Touch(为了减少篇幅,以下把 iPod Touch也叫做
                    iPhone)上,问题就出现了:右边的石头消失了,水不受管制地向侧面流!
                    2.2 结构图中的注意事项
                    很明显,在 iPhone 屏幕上看不到两侧的一部分内容,
                    这就是iPhone的视野问题, 屏幕中看不见的部分叫做iPhone
                    屏幕盲区。
                    那么, iPhone的屏幕盲区到底有多大呢?请看下面的分
                    析。
                    我们应该知道,iPad 的屏幕是 768×1024 或者 1536×
                    2048,长宽比为 3:4,而单页关卡的结构图尺寸是90×120,
                    长宽比也是 3:4。而 iPhone 5 以外的 iPhone 的屏幕长宽比是
                    2:3(iPhone 5的屏幕长度比虽然不一样,但也要注意屏幕盲
                    区)。
                    iPhone版游戏不会覆盖上下两侧的内容。经过计算,我
                    们得出, iPhone 屏幕只会显示结构图中间的 80×120 像素的
                    内容,也可以说左侧和右侧分别为 5×120 像素的内容是不
                    可见的。
                    让我们再来看看现成的 PNG,比如 10-5(用沼
                    泽减慢!)的结构图,开发商会在两侧画上宽为 7 像素的石
                    头或土壤,这样在iPhone屏幕上也能使一部分的石头可见。
                    2.2.2 顶部是否留空
                    也许读者看到这个标题,觉得莫名其妙。但实际上这时无法解释,因为这个问题跟游戏的
                    XML 相关,在第四章会进行解释。目前只需要读者照着做就行了。
                    选择1:顶部部分或全部被石头或土壤盖住,不留空。
                    选项2:顶部留空至少1像素,石头画上高光。
                    这两种设计方法在 iOS(iPhone 5 以外)设备上看起来用处不大,而在安卓设备和 iPhone 5
                    上,这两种设计方法的用处就很大了。因为普遍安卓手机和iPhone 5 的屏幕都很长,会看到顶部
                    的一些空白部分。详细内容我们会在第四章分析。
                    2.2.3 土壤和石头的构建区别
                    土壤可以画得比较随意,而石头就不行了,需要画得比较标准。因
                    为实际显示出来时,土壤能够比较好地显示出各种斜度,但这
                    也并不是绝对的。而石头就不行了,只能显示横向、纵向、倾斜 45°的
                    样子,如果画得比较随意的话,就会显示得不够自然,会有明显的锯齿
                    现象。


                    IP属地:北京14楼2014-12-01 12:13
                    回复
                      吃饭ing......


                      IP属地:北京15楼2014-12-01 12:30
                      回复
                        现在开更!
                        3.1
                        第三章
                        学着做XML
                        学会了绘制结构图,接下来,我们就要学习自制关卡中比较难的
                        XML了。XML包括了很多很多的物体,像什么水管、开关、挡板、冰
                        柱、风扇、吸水器、气球等等,都是 XML组件。当读者学完了这一章
                        时,同时应该还了解了一种计算机语言,就是 XML,在很多软件中都
                        能见到它的身影。
                        3.1 游戏 XML基础
                        3.1.1 游戏 XML 的结构
                        游戏的XML的结构是这样子的:
                        <?xml version="1.0"?>
                        <Objects>
                        <Object name="物体名">
                        <AbsoluteLocation value="x 坐标 y 坐标"/>
                        <Properties>
                        <Property name="Angle" value="角度"/>
                        <Property name="Filename" value="源文件名"/>
                        ……
                        </Properties>
                        </Object>
                        ……
                        <Room>
                        <AbsoluteLocation value="x 坐标 y 坐标"/>
                        </Room>
                        <Properties>
                        <Property name="属性" value="值"/>
                        ……
                        </Properties>
                        </Objects>
                        物品名可以任意写,只要不重复就行了。
                        用数来代替“x坐标”、“y坐标”和“角度”。
                        “源文件名”请参阅后面的章节。
                        若无场景属性的话,“Properties”整段可以删去。
                        还需要添加其他物体。
                        可能还需要添加其他属性。
                        角度中,正数为逆时针,负数为顺时针,0 为不转。
                        我们在后续章节会进行分析这些值。
                        如果XML的格式出错了,甚至直接把关卡中的XML
                        文件删掉了的话,就会出现这样一种画面:打开关卡时直
                        接通关。顺便也说一下,如果把 PNG 文件删掉了的话,
                        游戏只会停留在中下方有小字“加载中”这一画面,根本
                        进不了关卡。
                        开发商因为自己有一个可视化的制作关卡模块,让他
                        们制作 XML 变得很方便,而不给我们自制关
                        卡,我们只能自己用文本编辑软件制作 XML。编者也想
                        制作一个自制关卡的软件,但编者的能力不足,写不了这
                        种大型软件,只写出了一个定位工具。
                        3.1.2 位置和定位工具
                        在 XML 的制作中,可以发现最重要的一项就
                        是“AbsoluteLocation(绝对位置)”了,这一项决定
                        物体在画面中的位置。而通过目测、运行、调整来
                        输入的办法较为麻烦,而且调整量较大。编者以前
                        也是这么做的。为了方便我们自制关卡,我们可使
                        用定位工具来方便定位,而且事后的调整量小。
                        编者编写了一个定位工具,目前只有显示屏较
                        大的用户才能使用。不过现在这个时代,小屏幕的
                        用户可以说是越来越少了。这个定位工具不仅能定
                        位,而且能反定位。反定位就是把已有的有序数对
                        (绝对位置的值)输入,然后图像就能显示出它的
                        位置。
                        我们先来解释一下游戏中的绝对位置。屏幕可
                        以看做一个平面直角坐标系,屏幕的中心是原点,
                        在iPad 和 iPhone屏幕上,屏幕能显示的最上方的横
                        坐标为48,最下方的横坐标是-48。在iPad屏幕上,
                        屏幕能显示的最左方和最右方的纵坐标分别为 36
                        和-36;iPhone 屏幕上最左方和最右方的纵坐标分
                        别是 32 和-32。简单地说,一个物体的绝对位置是
                        它的坐标位置。
                        接下来,我们就可以讲一讲定位工具的使用了。但是,本定位工具还有不足的地方:它只能
                        定位单页关卡,多页关卡还需要自己去目测并调整。
                        运行附带资源中的自制关卡定位器,运行本程序需安装 Microsoft .NET Framework 4.0 及以上
                        先根据自己使用的设备来选择选项卡,
                        如果读者是 iPhone 用户,
                        请选择“iPhone 和iPod Touch”。
                        iPhone 5版还没有研发出来。
                        然后,点“选择图片”,
                        选择一张设备在运行游戏时的截图,
                        就可以在左边的图像框里单击鼠标,
                        右上角就会显示出相对应的坐标。
                        得到坐标后,就可以把坐标输进XML 代码里面了。
                        还有一种方法可以定位,
                        就是使用几何画板这一软件。
                        读者可以自己去试一下,
                        这里不再对几何画板的操作进行说明。
                        定位完的结果不一定正确,
                        因为一个物品的位置是它的中心所在的位置。
                        此时依然需要测试、调整,但明显会比目测后需要的调整量小。
                        3.1.3 上下顺序
                        让我们先在关卡中添加以下代码。
                        <Object name="Test1">
                        <AbsoluteLocation value="0 0"/>
                        <Properties>
                        <Property name="Angle" value="0"/>
                        <Property name="Filename" value="/Objects/pipe_straight.hs"/>
                        </Properties>
                        </Object>
                        <Object name="Test2">
                        <AbsoluteLocation value="0 0"/>
                        <Properties>
                        <Property name="Angle" value="90"/>
                        <Property name="Filename" value="/Objects/pipe_straight.hs"/>
                        </Properties>
                        </Object>
                        把添加了代码后的 XML 上传至设备,打开后看到中间出现了一个“十字”,其中,
                        横着的管道(角度为 0°)在竖着的管道(角度为90°)后面

                        然后,我们再将这两个物体调换一下位置,也就是把上面的代码换成以下代码,然
                        后运行看看,会有什么发现。
                        <Object name="Test2">
                        <AbsoluteLocation value="0 0"/>
                        <Properties>
                        <Property name="Angle" value="90"/>
                        <Property name="Filename" value="/Objects/pipe_straight.hs"/>
                        </Properties>
                        </Object>
                        <Object name="Test1">
                        <AbsoluteLocation value="0 0"/>
                        <Properties>
                        <Property name="Angle" value="0"/>
                        <Property name="Filename" value="/Objects/pipe_straight.hs"/>
                        </Properties>
                        </Object>
                        运行后,我们会发现,横着的管道被移到了竖着的管道的前面来了。
                        通过这次观察可以发现,物体的前后顺序与代码中的顺序有关。如果这个物体的代
                        码放在最后面的话,它必定会出现在任何别的物体之上。在 C2-17(飞架险域)中,由
                        于开发商的疏忽,把轨道放在了气球的后面,就会出现轨道遮住气球的现象。


                        IP属地:北京16楼2014-12-01 18:36
                        回复
                          3.2.1 ~ 3.2.3
                          3.2 简单的物体
                          3.2.1 管道
                          大家应该都知道,水管只是个装饰品,没有任何实际用处。但是,在输入口和输出口等地方
                          用水管连接起来,会显得更加美观,最主要的是连接之后能容易地被玩家辨认出来。管道还有些
                          个特性:炸不掉,而且不让水通过(冲击 Bug 除外),所以管道还会出现在一些可能有爆炸现象
                          的地方。管道没有任何特有的属性(方向选择器、输入口、输出口除外)。下面就给出了所有的除
                          方向选择器、输入口、输出口以外的管道物体,包括专业名称、源文件以及说明。
                          名称 内阴影式135°管道 源文件 pipe_bend_1.hs
                          说明 一种能连接不同角度水管的连接器
                          名称 外阴影式135°管道 源文件 pipe_bend_2.hs
                          说明 同“内阴影式 135°管道”
                          名称 90°连接器 源文件 pipe_connector_90.hs
                          说明 这个管道呈弧形,而且较大
                          名称 末端连接器 源文件 pipe_connector_end.hs
                          说明 这个东西一般会连接着房间
                          名称 内阴影式90°管道 源文件 pipe_elbow_1.hs
                          说明 一种能连接不同角度水管的连接器
                          名称 外阴影式90°管道 源文件 pipe_elbow_2.hs
                          说明 同“内阴影式 90°管道”
                          名称 上阴影式后接头 源文件 pipe_into_wall_1.hs
                          说明 如果出现特殊情况,可以用后接头,但是在后接头较多的情况下
                          得让玩家知道哪个输入口对着哪个输出口,否则会乱
                          名称 下阴影式后接头 源文件 pipe_into_wall_2.hs
                          说明 同“上阴影式后接头”
                          名称 小连接器 源文件 pipe_spout_base.hs
                          说明 它连接的一般是挡板、转换器
                          名称 水管 源文件 pipe_straight.hs
                          说明 最主要的管道物体之一
                          名称 长水管 源文件 pipe_straight_long.hs
                          说明 这种管道较长
                          名称 短水管 源文件 pipe_straight_short.hs
                          说明 这种管道较短
                          名称 三岔连接器 源文件 pipe_t_joint.hs
                          说明 用于分叉管道或结合管道
                          好了,这些装饰用的管道就这么多了。表格里的“源文件”这一项是不能直接写进 XML 代
                          码里的,在前面还必须加一个“/Objects/”。比如,在添加三叉连接器时,源文件所在的那一行要
                          输“<Property name="Filename" value="/Objects/pipe_t_joint.hs"/>”。
                          为了让大家巩固物体的插入,这里列出了绝对位置为“0 0”的内阴影式 90°管道的代码。
                          <Object name="Test">
                          <AbsoluteLocation value="0 0"/>
                          <Properties>
                          <Property name="Angle" value="0"/>
                          <Property name="Filename" value="/Objects/pipe_elbow_1.hs"/>
                          </Properties>
                          </Object>
                          如果我们把角度改成90的话,会发现这个物体逆时针旋转了 90°。
                          读者可能对一些“十字路口”的连接口觉得奇怪,在这里我们说出它的构造:它是由两个小
                          连接器构成的,一般来说,角度分别为 90和-90,纵坐标保持相等,横坐标大约相差 1.5。
                          水管各部分是要连接起来的。水管需要放在输入口、输出口、转换器、小连接器、末端连接
                          器、90°连接器、三岔连接器、后接头的前面(代码中),使水管能被遮住。
                          3.2.2 轨道
                          轨道也是装饰品,挡板不需要轨道也能正常运行,但是会使玩家不知道这个挡板会怎么移动,
                          所以轨道还是有用处的。轨道有有齿和无齿两种,下面就给出了所有的有齿轨道。
                          名称 有齿 90°轨道 A 源文件 path_locking_elbow.hs
                          说明
                          内部转角中,垂直边阴影,水平边高光;外部转角中,垂直边高
                          光,水平边阴影;内齿中,垂直边阴影,水平边高光;外齿中,
                          垂直边高光,水平边阴影
                          名称 有齿 90°轨道 B 源文件 path_locking_elbow_2.hs
                          说明
                          它的转角的高光、阴影与 A完全相反,内齿中,垂直边高光,水
                          平边阴影;外齿中,垂直边阴影,水平边高光
                          名称 有齿 90°轨道 C 源文件 path_locking_elbow_3.hs
                          说明 与 A相比,只是齿的阴影位置不同 26
                          90°轨道的使用较为麻烦,需要与连接它的轨道的高光和阴影保持一致。
                          大家应该知道什么是有齿轨道,就是与循环性挡板、持续性手动档板配套的轨道;无齿轨道
                          是与临时性挡板、临时性手动档板配套的轨道(开关关闭或手指松开的话就会复原)。下面就给出
                          了所有的无齿挡板。
                          名称 有齿 90°轨道 D 源文件 path_locking_elbow_4.hs
                          说明
                          它的转角与 B的转角相同,内齿中全是阴影;外齿中,垂直边阴
                          影,水平边高光
                          名称 有齿 90°轨道 E 源文件 path_locking_elbow_5.hs
                          说明
                          内部转角全是阴影;外部转角中全是高光;内齿中全是阴影;外
                          齿中全是高光
                          名称 有齿 90°轨道 F 源文件 path_locking_elbow_6.hs
                          说明 它的高光、阴影与 E完全相反
                          名称 有齿轨道左部结束位 源文件 path_locking_end.hs
                          说明 放置于有齿轨道左边的尽头位置
                          名称 有齿轨道右部结束位 源文件 path_locking_end_right.hs
                          说明 放置于有齿轨道右边的尽头位置
                          名称 有齿水平轨道 源文件 path_locking_mid.hs
                          说明 主要有齿轨道之一
                          名称 有齿轨道下部结束位 源文件 path_vertical_locking_end_bottom.hs
                          说明 放置于有齿轨道下面的尽头位置
                          名称 有齿轨道上部结束位 源文件 path_vertical_locking_end_top.hs
                          说明 放置于有齿轨道上面的尽头位置
                          名称 有齿垂直轨道 源文件 path_vertical_locking_mid.hs
                          说明 另一个主要有齿轨道
                          名称 无齿轨道左部结束位 源文件 path_smooth_end.hs
                          说明 放置于无齿轨道左边的尽头位置
                          名称 无齿轨道右部结束位 源文件 path_smooth_end_right.hs
                          说明 放置于无齿轨道右边的尽头位置
                          名称 无齿水平轨道 源文件 path_smooth_mid.hs
                          说明 主要无齿轨道之一
                          名称 无齿轨道下部结束位 源文件 path_smooth_vertical_end_bottom.hs
                          说明 放置于无齿轨道下面的尽头位置
                          名称 无齿轨道上部结束位 源文件 path_smooth_vertical_end_top.hs
                          说明 放置于无齿轨道上面的尽头位置
                          名称 无齿垂直轨道 源文件 path_smooth_vertical_mid.hs
                          说明 另一个主要无齿轨道
                          由于无齿轨道按照理论上来说只能进行直线滑动,故不出现转角。
                          还有一种特殊的轨道物体“固定块”,源文件为“path_stopper.hs”
                          它用来与旋转式挡板配合使用,表示挡板只能旋转到这个地方。
                          3.2.3 炸弹
                          炸弹的源文件为“bomb.hs” 。当流动物体或气球碰到它时,就会触
                          发炸弹,如果是流动物体的话会消耗 1 滴来触发。触发后过一小段时间就会爆炸,
                          把土壤、石头、气球甚至冰柱炸掉,还会把流动物体炸飞并触发爆炸范围内的炸弹。
                          它是一种简单的物体,因为它的的属性很少,下面,我们就来说一下炸弹这一物体
                          的代码。
                          <Object name="物体名">
                          <AbsoluteLocation value="x坐标 y坐标"/>
                          <Properties>
                          <Property name="Angle" value="角度"/>
                          <Property name="BlastPower" value="力度"/>
                          <Property name="BlastRadius" value="爆炸范围"/>
                          <Property name="Filename" value="/Objects/bomb.hs"/>
                          <Property name="Type" value="bomb"/>
                          </Properties>
                          </Object>
                          与管道和轨道相比,只不过多了“BlastPower”和“BlastRadius”这两个特有的属性而已。它
                          们可以省略,省略后就会被游戏设定为默认值。我们先来研究“BlastRadius”属性。
                          BlastRadius 属性
                          它的值为数,是爆炸的范围,默认为 20。为了测试爆炸的范围,我们先把实验关卡中的结构
                          图修改一下(请先备份) ,改成左下图那样。然后,在 XML 代码中添加一个绝对位置为“0 0”的
                          炸弹,把它的“BlastRadius”的值设为 0。实际运行效果如右下图。
                          我们把中间的土壤凿开,触发炸弹,我们会发现,炸弹不会造成任何效果,只会自身消失。
                          我们如果把“BlastRadius”的值设为 36(iPhone用户请输入32)的话,再次触发炸弹,我们可以
                          发现,炸弹炸出了一个圆形,直径正好为屏幕的宽。看起来,“BlastRadius”这个属性的值为炸后
                          形成的圆的直径的长度,单位为坐标系中的单位长度(下文简称为单位长度) 。
                          如果这个值为负数的话,比如-1,爆炸的效果跟0毫无差别。
                          BlastPower属性
                          它的值也是数,是爆炸的力度,默认为 4000。在这次的测试中,我们去掉“BlastRadius”属
                          性,让游戏取其默认。如果把它设为 0 的话,爆炸后,我们只发现土壤、石头炸掉了,水没有被
                          炸飞。如果我们取其默认的话,水有一定程度地被炸飞。将其设为 2000,水炸飞的力度就小了,
                          如果将其设得过大的话,比如 1000000,爆炸后水就奇迹般地消失了,这是冲击 Bug引起的。
                          我们可以这样理解,如果这个属性的值越大,则流动物体飞得越远、移动速度越快。


                          IP属地:北京17楼2014-12-02 12:03
                          回复
                            3.2.4 ~ 3.2.5
                            3.2.4 锯齿、泥垢
                            锯齿能被流动物体覆盖(边缘锯齿除外) ,它能爆掉气球。另外,读者不要被 7-8(水床)的
                            现象所迷惑,实际上锯齿被流动物体覆盖的时候仍然能爆气球,只是水把气球浮起来了而已。
                            锯齿有大锯齿(jagged_large.hs)、中锯齿(jagged_medium.hs)、小锯齿(jagged_small.hs)、
                            边缘锯齿 A(jagged_overlay.hs)和边缘锯齿 B(jagged_overlay_flipped.hs)五种。
                            锯齿一般会放在靠石头的地方。
                            除了边缘锯齿外,别的锯齿是有属性的,为“PopsBalloons”和“FluidsCollide”。这两个属性
                            的用处不大,一般不需要,用其默认就行了。“PopsBalloons”的默认值为 1,如果把它设为 0 的
                            话,这个锯齿就成了摆设了,根本爆不了气球!“FluidsCollide”的默认值为0,如果设为1的话,
                            它就像管道一样,能阻挡水流。
                            讲完锯齿,我们再来讲泥垢这种物体。
                            泥垢的功能就是把水、毒水变成新鲜泥巴然后消失,遇到泥浆直接消失。它共有三种:大泥
                            垢(dirtywall_large.hs)、中泥垢(dirtywall_mid.hs)、小泥垢(dirtywall_small.hs)。
                            如果要在关卡中添加一个大泥垢的话,可以在 XML 中输入以下代码。
                            <Object name="物体名">
                            <AbsoluteLocation value="x坐标 y坐标"/>
                            <Properties>
                            <Property name="Angle" value="角度"/>
                            <Property name="Filename" value="/Objects/dirtywall_large.hs"/>
                            <Property name="Type" value="dirtywall"/>
                            </Properties>
                            </Object>
                            为什么在这里给出了代码呢?因为“Type”这一项很重要,如果没有这一
                            项的话泥垢会失去它的功能,成为一个毫无用处的装饰品!
                            泥垢一般会放置在石头边上,但是泥垢中大约水平的那一条边要稍稍露在
                            石头外面,其余区域要放在墙里面。只有大约水平的那条边才能把
                            水和毒水转换成泥巴。
                            泥垢还有一个“Health”属性,但用处似乎不大,读者可以研究一下。
                            3.2.5 气球
                            气球能装除泥浆以外的流动物体,如果水蒸气数量超过其他物体 20滴以上的话气球会向上飘。
                            下面的代码中列出了气球中较为常见的属性。其实气球还有很多不常用的属性,在此不列举了。
                            <Object name="物体名">
                            <AbsoluteLocation value="x坐标 y坐标"/>
                            <Properties>
                            <Property name="Angle" value="角度"/>
                            <Property name="Filename" value="/Objects/balloon.hs"/>
                            <Property name="ConnectedSpout" value="关联输出口或阀门名"/>
                            <Property name="InitialParticles" value="物质"/>
                            <Property name="MaxParticles" value="最大承载量"/>
                            <Property name="Type" value="waterballoon"/>
                            </Properties>
                            </Object>
                            在这些属性中,“MaxParticles”、“ConnectedSpout”和“InitialParticles”三个属性可以删去,
                            如果删去了“ConnectedSpout”属性,则气球不连接输出口或阀门(以下省略为“输出口” ) 。如
                            果气球要连接到输出口的话,要让气球的绝对位置设为贴近输出口的地方(在输出口的喷射方向
                            下面一点点,输出口会在 3.3 中学到) ,然后把该属性设为想要连接上的输出口的名称。
                            我们先来说说“InitialParticles”选项。如果删去了“InitialParticles”选项的话,默认为 10滴30
                            清水。我们先举几个例子。如果要让里面有 60 滴清水,那么值为“water 60”,如果要有 50滴毒
                            水,那么值为“contaminatedwater 50” ,不是“poison” 。水蒸气为“steam”,要有 20滴水蒸气的
                            话值就为“steam 50”。泥巴是“mud”。
                            如果想把30 滴水和 30滴水蒸气各在一个气球里的话,值为“water 30 steam 30”,看到了吧,
                            中间要用空格隔开。毒水和水蒸气放在一起也是一个道理。不过水不要和毒水或泥巴放在一起,
                            否则水会变成毒水;不要把毒水和泥巴放在一起,否则毒水会变成泥巴。
                            我们再说“MaxParticles”属性,这决定了气球能装多少流动物体,数量是有限的。如果连接
                            着输出口的气球中的流动物体数量到了这一限度的话就会脱离输出口。如果里面的流动物体数量
                            接近它的值的话,气球就会变得比较大。


                            IP属地:北京18楼2014-12-02 12:05
                            回复
                              10分钟后我将离开
                              1小时后我将回来


                              IP属地:北京19楼2014-12-02 12:07
                              回复