物理沙盘吧 关注:6,062贴子:51,880
  • 13回复贴,共1

【教程】进阶教程

只看楼主收藏回复

内容转自论坛,感谢白左大和sx349的翻译,以下是经过我整理和部分细节修改的正文
一楼祭度娘


IP属地:北京1楼2013-08-21 08:53回复
    二、各元素导热性表(注:74.0之后的新元素都未在此表中,若想查看可参阅精品贴中的《TPT元素参数》)
    wiki原文:http://powdertoy.co.uk/Wiki.html?id=element_conductivities
    这是一个TPT所有元素的导热速率表
    在TPT中, 热模拟使用这个速率来决定一个元素的导热计算频率
    255最快,0最慢,为0的元素不会导热,为255的元素会立刻传导热量
    元素导热速率 元素名称
    0 ARAY
    0 DLAY
    0 FIGH
    0 FRAY
    0 GPMP
    0 INSL
    0 LIGH
    0 PIPE
    0 PRTI
    0 PRTO
    0 PUMP
    0 RPEL
    0 SHD2
    0 SHD3
    0 SHD4
    0 SHLD
    0 SPWN
    0 SPWN2
    0 STK2
    0 STKM
    0 WIFI
    1 THDR
    2 DRIC
    3 PQRT
    3 QRTZ
    5 PLSM
    23 DSTW
    29 BIZR
    29 BOMB
    29 BUBW
    29 FRZW
    29 GBMB
    29 ISOZ
    29 PSTE
    29 PSTS
    29 SOAP
    29 WATR
    34 ACID
    40 BRAN
    40 FRG2
    40 FROG
    40 LIFE
    40 LOLZ
    40 LOTE
    40 LOVE
    40 STAR
    40 WIND
    42 BIZG
    42 BOYL
    42 DESL
    42 GAS
    42 OIL
    44 GLOW
    44 MWAX
    44 WAX
    46 FRZZ
    46 ICE
    46 NICE
    46 SNOW
    48 WTRV
    50 NITR
    60 LAVA
    60 MORT
    60 NEUT
    65 PLNT
    65 VINE
    70 AMTR
    70 ANAR
    70 CAUS
    70 CLST
    70 DUST
    70 DYST
    70 EQVE
    70 FIRW
    70 FSEP
    70 GRAV
    70 LN2
    70 LOXY
    70 OXYG
    70 SING
    70 YEST


    IP属地:北京3楼2013-08-21 09:09
    回复
      75 GOO
      75 SLTW
      88 C-4
      88 C-5
      88 CFLM
      88 CO2
      88 FIRE
      88 IGNC
      88 SMKE
      88 TNT
      97 GUN
      100 CNCT
      100 FOG
      100 FWRK
      100 RIME
      100 WARP
      106 NBLE
      110 SALT
      121 EMP
      150 BCOL
      150 BGLA
      150 DEST
      150 GLAS
      150 SAND
      150 STNE
      164 INVS
      164 WOOD
      170 LRBD
      186 BHOL
      186 DMND
      186 WHOL
      200 COAL
      200 FUSE
      211 BREL
      211 BRMT
      211 THRM
      240 RBDM
      250 WIRE
      251 ???
      251 ACEL
      251 BCLN
      251 BIZS
      251 BMTL
      251 BRAY
      251 BRCK
      251 BTRY
      251 CLNE
      251 CONV
      251 DCEL
      251 DEUT
      251 ELEC
      251 ETRD
      251 FILT
      251 HSWC
      251 HYGN
      251 INST
      251 INWR
      251 IRON
      251 ISZS
      251 LCRY
      251 MERC
      251 METL
      251 NSCN
      251 NTCT
      251 PBCN
      251 PCLN
      251 PHOT
      251 PLUT
      251 PSCN
      251 PTCT
      251 PVOD
      251 SPNG
      251 SPRK
      251 STOR
      251 SWCH
      251 TESC
      251 URAN
      251 VOID
      255 VACU
      255 VENT


      IP属地:北京4楼2013-08-21 09:09
      收起回复
        三、传统控制台
        wiki原文:http://powdertoy.co.uk/Wiki.html?id=using_the_console
        1、使用控制台
        49.1因为加入了lua,所以现在传统命令行前面一定要加“!”
        在TPT中按下“~”键就能打开控制台,你可以通过控制台做一些普通游戏模式下无法做到的事情。
        相对于大多数游戏中的控制台,TPT的控制台还是很简单的。
        一般而言,大多数玩家最感兴趣的命令就是Set,Set命令的语法如下
        !Set [要设置的变量] [要设置的对象(元素名字或编号)] [设置的值]
        比如我要把#25号元素变成铁,应该输入
        !Set type 25 metl
        要看到元素的ID或者其他信息,你可以按D进入debug模式。还有,对象关键字all可以将屏幕上所有东西做为对象。所以下面的命令的作用是把所有元素变成铁
        !Set type all metl
        !Set type metl watr——这个命令可以吧所有铁变成水,以此类推
        !Set type metl none——这个命令将会移除所有的铁
        上面的命令中的 "Type" 也可以变成其他你想要设置的变量:
        Type: 元素的种类
        Temp: 元素的温度,单位是K(开尔文)
        Ctype: 元素的临时状态,决定了很多元素的特殊状态。比如岩浆(LAVA)的ctype决定了岩浆冷却后会凝固成什么固体。诸如此类,自己去发现吧
        Life: 元素的生命周期。每一帧减少1,变为0的时候元素就消失了(对大多数元素来说)
        X, Y, VX, VY: 分别设置元素的X Y位置和X Y方向上的速度。速度可以为负,对VX表示向左,对VY表示向上。游戏窗口最左上角(X,Y)=(0,0)
        Tmp: 元素的附加值。它的作用不固定,决定许多东西,比如石英的颜色(目前你没法在debug模式下看见)
        !Quit 命令能让你直接退出TPT
        Create 是另一个非常好用而简单的命令。通过输入元素名称和位置,你能简单地创造任何元素(包括在菜单上看不见的隐藏元素!)比如下面的命令将会在(200,100)的位置创造一个像素的铁
        !Create METL 200,100
        本维基页面没有涵盖所有的命令,只是教你如何使用。
        2、运行脚本
        如果你有很多命令,你可以写在一个文件中,然后运行。你可以将你的命令用记事本或者别的东西编辑,然后把扩展名改成.lua。然后在TPT中,只需要输入下面的命令即可:(注意前面没有”!“,因为这是lua命令)
        dofile("script.lua") (把script.lua换成你的脚本名)
        使用 tmp, life, 和 ctype的参考
        1)ctype
        Clone (BCLN, PCLN, CLNE): ctype 是复制体所复制的元素的ID
        状态改变的元素 (ICE, LAVA): ctype 是该元素融化/凝结之前的元素。比如LAVA(METL),当这个lava凝固后会变成METL。相对的,如果是LAVA(PSCN),会凝固成PSCN
        SPRK: ctype 是电火花当前所在的导体
        带颜色的(PHOT, FILT, FWRK, GLOW, BRAY): ctype 用来储存和颜色相关的变量。目前没有简单的方法去改变这类元素的ctype
        PIPE: Ctype 区分PIPE的三种结构(红色/绿色/蓝色/未分配)。目前同样没有简单的方法通过控制台修改之。了解更多关于PIPE的知识,参见这里: Using PIPE element.
        QRTZ: QRTZ 的ctype变成DUST的时候就会生长。自然状态下可以通过盐水浇注来使其生长
        WIRE: WIRE的ctype代表其不同类型(电子头,尾和导体),用DUST, WATR和none表示
        2)tmp/tmp2
        tmp/tmp2对不同的元素有各种不同的作用。不过只有少数元素用到。使用时注意和温度(temp)区分开。
        3)life
        life决定了元素能存在多少帧。比如,"!set life fire 1000" 可以让火焰持续非常长的时间——即使已经冷却到室温了! 依次类推,你可以通过设置元素的寿命来达到各种各样的效果。比如:
        DEUT 的life决定了其浓缩程度,一个生命为9999的DEUT是非常可怕的炸弹!当它升温后,即使只有一个像素也会膨胀到惊人的体积
        ACID默认只有75的寿命,每当其腐蚀掉一个像素的物质就会减少1.通过设置ACID的life,你可以做出强酸或者弱酸
        可激活的元素,比如SWCH, HSWC, PCLN和 PUMP, 都是通过life来决定其开关状态的
        虫洞通过life来产生视觉效果
        火柴人的生命可以通过life来改变
        SPRK 不仅使用ctype,也使用life。SPRK在大多数物质上的生命是4. 但是在INST上则是1. 该参数表示SPRK会在物质上停留多久。你可以简单地理解为越低则传递速度越快。
        3、基础的 "可移动的固体" (注:此命令已失效,但可以作为了解TPT历史看一下)
        许多人要求可移动的固体,但是,不要。除非完全重写TPT,否则这是不可能的。不过通过控制台,我们可以弄点类似的花把式……
        只有 SPNG 才行!
        目前SPNG是移动起来效果最好的。其他的,比如GOO和BCLN也稍微可以动那么一点点,其他的则根本不行。
        让它动起来!
        首先用SPNG画个球,然后打开控制台,输入下面的命令:
        !set vx spng -1
        恭喜!你家海绵球将以1的速度向左飞行!
        !set vy spng -1
        现在让他向上飞飞,欧也!
        怎么样?学会了吗?所以现在:
        别再要求能动的固体了!


        IP属地:北京5楼2013-08-21 09:12
        收起回复
          2、Lua API
          The Powder Toy 公开如下 Lua API
          1)游戏
          tpt.set_pause 设置游戏暂停状态
          tpt.set_pause(number state)
          tpt.set_console 设置控制台可见性
          tpt.set_console(number state)
          tpt.set_shortcuts 设置快捷键是否启用
          tpt.set_shortcuts(number state)
          tpt.set_gravity 设置重力场,3个重载
          tpt.set_gravity(number x, number y)
          tpt.set_gravity(number x, number y, number width, number height)
          tpt.set_gravity(number x, number y, number width, number height, number value)
          tpt.reset_gravity_field 重置选定区域重力场,2个重载
          tpt.reset_gravity_field(number x, number y)
          tpt.reset_gravity_field(number x, number y, number width, number height)
          tpt.set_pressure 设置压力场,3个重载
          tpt.set_pressure(number x, number y)
          tpt.set_pressure(number x, number y, number width, number height)
          tpt.set_pressure(number x, number y, number width, number height, number value)
          tpt.reset_velocity 重置选定区域压力场,2个重载
          tpt.reset_velocity(number x, number y)
          tpt.reset_velocity(number x, number y, number width, number height)
          tpt.hud 切换HUD显示状态
          tpt.hud(number toggle)
          tpt.newtonian_gravity 切换牛顿重力Newtonian Gravity 启用状态
          tpt.newtonian_gravity(number toggle)
          tpt.ambient_heat 切换环境热Ambient Heat启用状态
          tpt.ambient_heat(number toggle)
          tpt.decorations_enable 切换装饰层decorations显示状态
          tpt.decorations_enable(number toggle)
          tpt.heat 切换热模拟Heat Simulation启用状态
          tpt.heat(number toggle)
          tpt.active_menu 改变当前激活的菜单
          tpt.active_menu(number menu)
          tpt.display_mode 改变当前的显示模式
          tpt.display_mode(number display)
          tpt.setfpscap 改变最大FPS
          tpt.setfpscap(number fpscap)
          tpt.setfire 改变游戏的发光效果强度。tpt.setfire(1)为默认值
          tpt.setfire(number strength)
          tpt.setwindowsize 改变窗口模式。是scale可取值1或2,默认为1。fullscreen(全屏)默认关闭。该方法有返回值,1代表成功。
          tpt.setwindowsize(number scale, toggle fullscreen)
          2)元素
          tpt.reset_spark 移除所有的电流
          tpt.reset_spark()
          tpt.set_property 根据给定规则设置不同的属性,8个重载
          tpt.set_property(string property, object value)
          tpt.set_property(string property, object value, string type)
          tpt.set_property(string property, object value, number index)
          tpt.set_property(string property, object value, number index, string type)
          tpt.set_property(string property, object value, number x, number y)
          tpt.set_property(string property, object value, number x, number y, string type)
          tpt.set_property(string property, object value, number x, number y, number width, number height)
          tpt.set_property(string property, object value, number x, number y, number width, number height, string type)
          object tpt.get_property 获取粒子的不同属性,返回object类型的变量
          tpt.get_property(string property, number index)
          tpt.get_property(string property, number x, number y)
          tpt.create 在指定地方创建一个粒子
          tpt.create(number x, number y, string type)
          返回最近创建的例子的索引index值
          tpt.delete 删除一个特定粒子,或者特定位置的粒子
          tpt.delete(number index)
          tpt.delete(number x, number y)
          tpt.start_getPartIndex 启动接受所有粒子索引的迭代器。(用于获得粒子的索引,参见tpt.next_getPartIndex)
          tpt.start_getPartIndex()
          boolean tpt.next_getPartIndex 跳转到下一个可用的粒子索引。如果到达所有粒子索引的最后则返回false。如果还有则返回true。(用于获得粒子的索引,参见tpt.next_getPartIndex)
          tpt.next_getPartIndex()
          number tpt.getPartIndex 获取当前索引迭代器
          tpt.getPartIndex()
          例:
          tpt.start_getPartIndex()
          while tpt.next_getPartIndex() do
          local index = tpt.getPartIndex()
          if tpt.get_property("ctype",index) == 21 then
          tpt.set_property("ctype","sing",index)
          end
          end
          number tpt.get_numOfParts 返回当前屏幕上的粒子总数
          tpt.get_numOfParts()


          IP属地:北京7楼2013-08-21 09:17
          回复
            3、带有Lua函数的Mod
            Me4502的 Mod
            注意: 这里的函数只在版本3.0b11或以后才可用
            附加的字符串属性
            collision
            airdrag
            flammable
            weight
            falldown
            gravity
            explosive
            meltable
            hardness
            name
            airloss
            loss
            hotair
            actas
            新的函数
            tpt.throw_error(string error)
            tpt.getscript(string script)
            tpt.hud(number state)
            tpt.newtonian_gravity(number state)
            tpt.ambient_heat(number state)
            tpt.decorations_enable(number state)
            tpt.heat(number state)
            tpt.active_menu(number menu)
            tpt.display_mode(number display)
            tpt.set_glow(number fireintensity)
            4、简单的示例代码
            -- 这一行是注释。任何在连续两个减号--后的内容都被lua认为是注释
            -- 将控制台状态设为0,隐藏它
            tpt.set_console(0)
            -- 这里将定义本脚本的主函数
            function ClassicPowder()
            local ox = 125 -- 这个将是我们将要新创建元素的偏移值
            local y = 4 -- 我们要新建元素的y坐标
            local x = ox -- 我们要新建元素的x坐标。初始值设置为上面提到的ox的值
            for i=0, 10 do -- 这是一个for循环,循环中的内容会反复执行直到i变成10。每循环一次i就加1
            tpt.create(x + i, y, "DUST") --创建一个灰尘dust粒子
            end
            x = x + ox -- 让x坐标增加上面设置的偏移值ox
            for i=0, 10 do
            tpt.create(x + i, y, "WATR") --创建一个水粒子
            end
            x = x + ox
            for i=0, 10 do
            tpt.create(x + i, y, "SALT")
            end
            x = x + ox
            for i=0, 10 do
            tpt.create(x + i, y, "OIL")
            end
            return false
            end
            -- 注册一个每帧执行的函数ClassicPowder。这会让ClassicPowder每一帧都运行一次
            tpt.register_step(ClassicPowder)


            IP属地:北京9楼2013-08-21 09:18
            回复
              五、快捷键列表 (注:部分快捷键已失效,若想知道哪些快捷键已失效,请参阅精品贴中的《快捷键表》)
              wiki原文:http://powdertoy.co.uk/Wiki.html?id=hotkeys
              1、单快捷键
              Caps Lock 【启用针对性删除模式】
              Insert 【启用针对性替换模式】
              TAB 【切换圆形和方形笔刷】
              Space 【暂停】
              Q/Esc 【Quit】
              Z/alt+Z 【放大镜,滚轮控制倍数/alt切换放大模式】
              S 【点击后单击拖动矩形区域,将选中区域保存为stamps文件(+ Ctrl when STK2 is out) 】
              L 【快速读取】
              K 【浏览存档】
              C 【循环显示模式】
              1-9 【显示模式】 (1-9对应的显示模式请参见进阶教程1.各种显示模式详解)
              P 【截屏.ppm,保存在游戏目录下】
              F 【步进,用于观察生命演化,按一次进一帧/代】
              G 【打开网格,多按几次可以循环网格的大小】
              H 【开关HUD】
              D 【显示debug信息(粒子数,生命代数)(+ Shift when STK2 is out)】
              I 【反转压力和速度场,慎用】
              T 【蔓藤模式,PLNT在WOOD上会生长】
              W 【重力模式,在无重力,垂直重力和点重力模式间切换 (+ Ctrl when STK2 is out)】
              R 【重设生命代数】
              Y 【切换空气模式(开启,关闭速度场,关闭压力场,不更新,关)】
              ~ 【Console】
              = 【重设速度场和压力场】
              [ 【减小笔刷】
              ] 【增大笔刷】
              B 【装饰模式】
              U 【切换环境热计算】
              2、组合快捷键
              Ctrl+C/V/X 【Copy/Paste/Cut】
              Ctrl+Z 【Undo】
              Ctrl+Cursor drag 【矩形区域】
              Shift+Cursor drag 【直线】
              MMB / Alt+LMB click 【吸管工具】
              Mouse scroll 【控制笔刷大小】
              Ctrl + Mouse scroll 【控制笔刷垂直方向大小】
              Shift + Mouse scroll 【控制笔刷水平方向大小】
              Shift + Ctrl + R 【水平镜像选定区域】
              Ctrl + R 【旋转选定区域(CCW)】
              Ctrl + Arrow keys 【平移选定区域】
              Ctrl + = 【重设电场】
              Ctrl + Shift + LMB/RMB 【填充】
              Ctrl + I 【安装】
              Ctrl + B 【切换装饰层显示】
              Ctrl + G 【切换重力线显示】


              IP属地:北京10楼2013-08-21 09:21
              回复
                后记
                终于全部发完了!表示没想到内容图片如此之多,我和我的小伙伴都惊呆了
                本人之前一直把进阶教程整合在一起发给大家供大家学习,但一直没时间搞。最近终于有闲工夫完成了这个计划。希望大家能从这个教程里学到更多有关TPT的技巧,做出更有趣的作品
                另外第十三个教程标题上的“暂无中文资料”不小心忘记删了,请大家不要在意
                最后还是再次感谢白左大、sx349和inke为TPT事业做出的贡献(怎么有一种中二的味道)


                IP属地:北京33楼2013-08-22 16:43
                回复
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~给力的完结线~~~~~~~~~~~~~~~~~~~~~~~~~~~~


                  IP属地:北京34楼2013-08-22 16:44
                  回复
                    pipe怎么用?


                    IP属地:广东35楼2014-07-13 15:22
                    回复