Stingray와 Scaleform Studio 간 커뮤니케이션

Scaleform Studio 플러그인과 Stingray는 공통 Lua 가상 시스템을 공유하기 때문에 Scaleform Studio에서 실행하는 Lua 코드(Stingray와 통합 실행하는 경우)가 Stingray에서 Lua 명령을 호출하고, Stingray가 Scaleform Studio에서 Lua 명령을 호출할 수 있습니다.

Scaleform Studio 프로젝트가 독립 실행형 Scaleform Studio Player에서 실행되도록 하려면 Scaleform Studio 및 Stingray Lua 스크립트에서 scaleform.Stage.dispatch_event 및 사용자 정의 이벤트 리스너를 사용하여 대부분의 Stingray와 Scaleform Studio 간 커뮤니케이션을 처리하도록 하는 것이 좋습니다.

Scaleform Studio 플러그인도 마우스, 키보드, 터치 이벤트 같은 이벤트를 Stingray에서 Scaleform Studio로 전송할 수 있는 scaleform.Stingray.send_message를 제공합니다.

참고: Stingray 함수를 Scaleform Studio Lua 스크립트 내에서 호출하면 Scaleform Studio 프로젝트를 독립 실행형 모드로 실행하지 못합니다.

예: Stingray에서 Scaleform Studio로 마우스 입력 전송

    --Send Mouse Cursor motion and Left Button Down and Up events.
    scaleform.Stingray.send_message("mouse_move" ,
        stingray.Mouse.axis(stingray.Mouse.axis_index("cursor"), stingray.Mouse.RAW, 3).x,
        stingray.Mouse.axis(stingray.Mouse.axis_index("cursor"), stingray.Mouse.RAW, 3).y)

    --Left Mouse Button Down
    if(stingray.Mouse.pressed(stingray.Mouse.button_index("left"))) then
        scaleform.Stingray.send_message("mouse_down",
            stingray.Mouse.axis(stingray.Mouse.axis_index("cursor"), stingray.Mouse.RAW, 3).x,
         stingray.Mouse.axis(stingray.Mouse.axis_index("cursor"), stingray.Mouse.RAW, 3).y, 0)
    end

    --Left Mouse Button Up
    if(stingray.Mouse.released(stingray.Mouse.button_index("left"))) then
        scaleform.Stingray.send_message("mouse_up",
            stingray.Mouse.axis(stingray.Mouse.axis_index("cursor"), stingray.Mouse.RAW, 3).x,
            stingray.Mouse.axis(stingray.Mouse.axis_index("cursor"), stingray.Mouse.RAW, 3).y, 0)
    end

예: 사용자 정의 메시지를 사용하여 기본 메뉴 템플릿 로드

Stingray 스크립트에서 프로젝트를 로드하고 사용자 정의 이벤트를 프로젝트로 전송하면 됩니다.

    scaleform.Stingray.load_project("template_menu.s2dproj", "content/ui/template_menu")
    scaleform.Stage.dispatch_event( { eventId = scaleform.EventTypes.Custom, name = "set_title",
                                data = "Main Menu" } )
    scaleform.Stage.dispatch_event( { eventId = scaleform.EventTypes.Custom,
                                name = "add_menu_item",
                                data = { itemText="Basic Level",
                                         keyText=Appkit.Util.plat("1", "a", "1", "cross") } } )
    scaleform.Stage.dispatch_event( { eventId = scaleform.EventTypes.Custom,
                                name = "add_menu_item",
                                data = { itemText="Exit",
                                         keyText=Appkit.Util.plat("esc", "b", "esc", "circle")} } )

예: Scaleform Studio 사용자 정의 리스너를 Stingray에 등록

이 리스너는 모든 사용자 정의 이벤트를 수신하고, 제공된 함수를 사용하여 이를 처리합니다.

    customListener = scaleform.EventListener.create(customListener, MainMenu.on_custom_event)
    scaleform.EventListener.connect(customListener, scaleform.EventTypes.Custom)

이 사용자 정의 함수는 이벤트를 수신하고, 어느 메뉴 버튼이 눌렸는지 기록합니다.

    MainMenu.action = nil
    function MainMenu.on_custom_event(evt)
        if evt.name == "button_pressed" then
            if evt.data.button_type == "menu_item" then
                MainMenu.action = evt.data.button_id
            end
        end
    end