【教程】进阶教程
物理沙盘吧
全部回复
仅看楼主
level 10
wudi19980407 楼主
内容转自论坛,感谢白左大和sx349的翻译,以下是经过我整理和部分细节修改的正文
一楼祭度娘
2013年08月21日 00点08分 1
level 10
wudi19980407 楼主
二、各元素导热性表(注: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
2013年08月21日 01点08分 3
level 10
wudi19980407 楼主
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
2013年08月21日 01点08分 4
回复 K_MAGE_42 :原文里就有,很神奇。。。
2013年08月22日 06点08分
level 10
wudi19980407 楼主
三、传统控制台
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
现在让他向上飞飞,欧也!
怎么样?学会了吗?所以现在:
别再要求能动的固体了!
2013年08月21日 01点08分 5
补充:现在的海绵必须吧flags设置为8(用prop)之后设置vxvy才能移动 acid的life在50以下就会消失
2021年10月30日 10点10分
level 10
wudi19980407 楼主
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()
2013年08月21日 01点08分 7
level 10
wudi19980407 楼主
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)
2013年08月21日 01点08分 9
level 10
wudi19980407 楼主
五、快捷键列表 (注:部分快捷键已失效,若想知道哪些快捷键已失效,请参阅精品贴中的《快捷键表》)
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 【切换重力线显示】
2013年08月21日 01点08分 10
level 10
wudi19980407 楼主
后记
终于全部发完了!表示没想到内容图片如此之多,我和我的小伙伴都惊呆了
本人之前一直把进阶教程整合在一起发给大家供大家学习,但一直没时间搞。最近终于有闲工夫完成了这个计划。希望大家能从这个教程里学到更多有关TPT的技巧,做出更有趣的作品
另外第十三个教程标题上的“暂无中文资料”不小心忘记删了,请大家不要在意
最后还是再次感谢白左大、sx349和inke为TPT事业做出的贡献(怎么有一种中二的味道)
2013年08月22日 08点08分 33
level 10
wudi19980407 楼主
~~~~~~~~~~~~~~~~~~~~~~~~~~~~给力的完结线~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2013年08月22日 08点08分 34
1