本帖最后由 被诅咒的章鱼 于 2021-4-14 16:52 编辑
ATL需要事件(event)驱动。如果只修改自定义的某个变量,transform并不会去检测对应的变量是否发生了变化。call screen和show screen会给界面内所有组件的transform广播start事件,可以让transform执行至少一次。
一种解决方案是,将修改的变量作为入参,传给自定义的screen。每次用show screen(**kwargs)。这样做的好处是,防止引用的变量影响其他地方,即低耦合。
[RenPy] 纯文本查看 复制代码 screen showAll(i=Null, des_pos=(0, 0)):
for i in allchars:
if i.ALIVE==-1 or i.ALIVE==1:
$ name1= str(i.EIDD)
add i.pic_sprite as name1 at move(des_pos)
transform move(des_pos):
linear 0.5 pos des_pos
label test:
show screen showAll()
call test2
label test2:
$ dui2.ori_pos[1]= dui2.sprite_pos[1]
$ dui2.sprite_pos[1]=dui2.sprite_pos[1]+100
show screen(dui2, des_pos=sprite_pos)
pause 1.5
jump test3
return
label test3:
$ dui3.ori_pos[1]= dui3.sprite_pos[1]
$ dui3.sprite_pos[1]=dui3.sprite_pos[1]+500
show screen(dui3, des_pos=dui3.sprite_pos)
pause 1.5
return
以上代码没有经过测试,不一定能运行…… |