找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6185|回复: 5

[已解决] 關於ATL判斷的問題

[复制链接]
发表于 2021-9-5 13:37:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 jacky917 于 2021-9-6 18:48 编辑

會有這個需求是因為我的所有信息都是存json讀入的.程式碼如下
[RenPy] 纯文本查看 复制代码
    define gaap = Character("XXX", what_suffix="{image=end_pic}")
    $ count = 0

    $ my_script = load_json()

    while count < len(my_script):

        
        # p1_chara_voice_text
        $ chara_voice = get_voice(count,my_script[count],chara_id,event_id)

        if chara_voice["p1"] :
            voice chara_voice["p1"]

        $ my_text = my_script[count]["text"]
        # debug
        # $ my_text = my_script[count]["text"] + str(chara_voice["p1"])

        if my_script[count]["p1_chara_type"]=="5":
            $ face = my_script[count]["p1_chara_emotion"]
            show chara_emotion:
                function atl_creator
                if xxx=bbb:
                    up_and_down
                    up_and_down
        gaap '[my_text]'

        $ count += 1


註 : 上面這段代碼除了chara_emotion ATL的部分是正常可運行的

想請問如何靠我讀入的參數控制ATL

目前主要有兩個思路

1.使用function解決
但這我遇到兩個問題...首先這個func只能傳trans, st, at 沒辦法傳我自己的參數.還有就是沒辦法調用我自己寫的animation transform
2.直接在show xxx:下面寫判斷...但是我看文檔好像沒有這寫法

另外還有個小問題.就是action Start(label)不知道有沒有辦法傳參給label..就如前面我說的..所有資源都是讀入JSON的.所以需要傳事件參數

目前接觸Ren’Py還不到一周.可能很多東西都還不是太明白.還請各位前輩指教

上面這些問題都有嘗試搜過但沒找到方法..如果有解決方案直接貼個URL也可以麻煩了謝謝

python還挺熟的.不排斥自己寫代碼解決



 楼主| 发表于 2021-9-7 14:43:06 | 显示全部楼层
本帖最后由 jacky917 于 2021-9-7 14:44 编辑

我自己找到其他解決方法了.來分享一下
[RenPy] 纯文本查看 复制代码
init python:
    x_pos = 0
    y_pos = 0


[RenPy] 纯文本查看 复制代码
    def emo_atl_creator(id):
        global x_pos
        global y_pos
        if id == "3056":
            x_pos = 1280
            y_pos = 450
        elif id == "3060":
            x_pos = 1320
            y_pos = 600
        elif id == "3061":
            x_pos = 1400
            y_pos = 550
        else:
            x_pos = 0
            y_pos = 0
        return trans_emotion


[RenPy] 纯文本查看 复制代码
    transform trans_emotion:
        xpos x_pos
        ypos y_pos


調用
[RenPy] 纯文本查看 复制代码
show chara_emotion at emo_atl_creator("3056")


代碼也還算整潔起碼一樣的東西不需要寫兩次

评分

参与人数 1干货 +1 收起 理由
龙氏 + 1 感谢分享!

查看全部评分

回复 支持 1 抱歉 0

使用道具 举报

发表于 2021-9-5 22:13:49 | 显示全部楼层
你的json样例放个上来看看……
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2021-9-6 00:26:35 | 显示全部楼层
感謝回覆..原本的問題已經解決了.但是又產生了一個新的問題.......先上代碼
[RenPy] 纯文本查看 复制代码
init python:

    def action_atl_creator(trans, times):
        # p1_chara_motion_type 5 上下
        if trans=="5":
            if times == "1":
                return up_and_down_1
            if times == "2":
                return up_and_down_2
                
        # p1_chara_motion_type 2 左右
        if trans=="2":
            if times == "1":
                return left_and_right_1
            if times == "2":
                return left_and_right_2
        return trans_default

init:
    transform trans_default:
        yalign 0

    transform left_and_right_1:
        yalign 0
        linear 0.075 xalign -0.01
        linear 0.15 xalign 0.01
        linear 0.15 xalign -0.01
        linear 0.075 xalign 0

    transform left_and_right_2:
        yalign 0
        linear 0.075 xalign -0.01
        linear 0.15 xalign 0.01
        linear 0.15 xalign -0.01
        linear 0.075 xalign 0
        repeat 2

    transform up_and_down_1:
        linear 0.15 yalign 0.02
        linear 0.15 yalign 0

    transform up_and_down_2:
        linear 0.15 yalign 0.02
        linear 0.15 yalign 0
        repeat 2


[RenPy] 纯文本查看 复制代码
    $ count = 0

    $ my_script = load_json()

    while count < len(my_script):

        $ chara_voice = get_voice(count,my_script[count],chara_id,event_id)

        if chara_voice["p1"] :
            voice chara_voice["p1"]
        $ my_text = my_script[count]["text"] + str(emo_atl_creator(my_script[count]["p1_chara_emoticon_id"]))

        if my_script[count]["p1_chara_type"]=="5":
            $ face = my_script[count]["p1_chara_emotion"]
            show chara_emotion at action_atl_creator(my_script[count]["p1_chara_motion_type"],my_script[count]["p1_chara_motion_times"])
        else:
            hide chara_emotion
        if my_script[count]["p1_chara_emoticon_id"]!="0":
            $ emo = my_script[count]["p1_chara_emoticon_id"]
            show emotion
        else:
            hide emotion
        gaap '[my_text]'

        $ count += 1


目前這段代碼是可以正常使用的...at action_atl_creator(trans, times) 的方式..但是這個times參數不知道有沒辦法直接傳給transform repeat使用

還有就是想請問python中要返回ATL對象應該怎麼寫...有大概看了一下源碼.但對我來說果然還是太吃力了 (

類似這樣

[RenPy] 纯文本查看 复制代码
    transform emo_3056:
        xpos 1280
        ypos 450

    transform emo_3060:
        xpos 1320
        ypos 600

    transform emo_3061:
        xpos 1400
        ypos 550


[RenPy] 纯文本查看 复制代码
    def emo_atl_creator(id):
        return type(trans_default)
        # id = 3056 or 3060 or 3061
        return renpy.display.transform("emo_"+str(id))


有參考了一下這兩篇.但問題還沒有解決..如果有文章直接貼給我也好..我是沒搜到...THX

https://lemmasoft.renai.us/forums/viewtopic.php?t=43194

https://www.renpy.org/doc/html/trans_trans_python.html#transforms

回复 支持 抱歉

使用道具 举报

发表于 2021-9-6 09:35:55 | 显示全部楼层
楼主的核心需求,是根据字符串(或数值)返回transform对象,并应用到某个displayable上。

简单来说,用ATL是死路。

使用Creator Defined Displayable也许可以,那就需要把各种transform改写成各种function或自定义结构体或类。
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2021-9-6 11:55:29 | 显示全部楼层
本帖最后由 jacky917 于 2021-9-6 11:56 编辑
被诅咒的章鱼 发表于 2021-9-6 09:35
楼主的核心需求,是根据字符串(或数值)返回transform对象,并应用到某个displayable上。

简单来说,用ATL ...

非常感謝.至少知道ATL是死路了2333
但是要研究源碼自己寫一個類.........我還是先這麼用吧
回复 支持 抱歉

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|RenPy中文空间 ( 苏ICP备17067825号|苏公网安备 32092302000068号 )

GMT+8, 2024-11-22 15:43 , Processed in 0.112730 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表