用于后期效果的脚本 UI 面板 (.jsx),代码运行完美,但不可停靠

问题描述 投票:0回答:1

我做视频编辑,所以我对编码的了解很少。但我最近从 ChatGPT 获得了有关可在 After Effects(编辑软件)中使用的脚本的帮助。 ChatGPT 给了我一个很好的代码,但遗憾的是它不可停靠,我尝试了太多来修复它。但它不起作用。

该代码非常适合函数等,但我无法将其停靠在我的界面中。

附件! Script function works perfectly, but I cant dock it in interface

在附件中:我用这些按钮创建了所有这些层,如果您看到左侧有一个可停靠的 ui 面板“3 按钮测试”,它是相同的脚本。但面板位于其外部。我们可以对接它吗?

====================================================== ============

    // Function to create an adjustment layer
function createAdjustmentLayer() {
  var comp = app.project.activeItem; // Get the active composition
  if (comp && comp instanceof CompItem) {
    var adjustmentLayer = comp.layers.addSolid([1, 1, 1], "Adjustment Layer", comp.width, comp.height, 1);
    adjustmentLayer.adjustmentLayer = true;
  } else {
    alert("Please open or select a composition.");
  }
}

// Function to create a null layer
function createNullLayer() {
  var comp = app.project.activeItem; // Get the active composition
  if (comp && comp instanceof CompItem) {
    comp.layers.addNull();
  } else {
    alert("Please open or select a composition.");
  }
}

// Function to create a solid layer
function createSolidLayer() {
  var comp = app.project.activeItem; // Get the active composition
  if (comp && comp instanceof CompItem) {
    var solidLayer = comp.layers.addSolid([90, 31, 37], "Solid Layer", comp.width, comp.height, 1);
  } else {
    alert("Please open or select a composition.");
  }
}

// Create a dockable UI panel
var myPanel = new Window("palette", "LAYER CREATOR SIMPLE", undefined, { resizeable: true });
myPanel.orientation = "column";

var createAdjustmentButton = myPanel.add("button", undefined, "Adjustment Layer");
createAdjustmentButton.onClick = createAdjustmentLayer;

var createNullButton = myPanel.add("button", undefined, "Null Layer");
createNullButton.onClick = createNullLayer;

var createSolidButton = myPanel.add("button", undefined, "Solid Layer");
createSolidButton.onClick = createSolidLayer;

// Show the panel
myPanel.center();
myPanel.show();

====================================================== =========== 我真的需要帮助!

我尝试修复这些代码,但到目前为止,如果我更改任何内容,都没有任何效果。脚本内容丢失。这就是为什么我需要这个解决方案的帮助!

adobe after-effects adobe-scriptui dockable chat-gpt-4
1个回答
0
投票

您需要将所有内容包装在一个接受面板作为参数的函数中,并在其中创建一个将构建布局的函数,在这种情况下,代码将如下所示:

function buildUI(thisObj){...}

这个:

var myPanel = (thisObj 面板实例)? thisObj:新 窗口('调色板',“图层创建器简单”);

将检查该对象是否是 uiPanel 的实例,因此当您从 After Effects 运行它时,它将使用可停靠的 UI 面板,否则将创建一个新窗口。

您的代码将是:

(function MyLayerCreator(thisObj) { //... function buildUI(thisObj) { var myPanel = (thisObj instanceof Panel) ? thisObj : new Window('palette', "LAYER CREATOR SIMPLE"); //Your ui layout (all the the other elements like buttons, etc...) myPanel.layout.layout(true); return myPanel } //Call The buildUI function var window = buildUI(thisObj); if (window.toString() == "[object Panel]") { window; } else { window.show(); } //All your other functions })(this);

© www.soinside.com 2019 - 2024. All rights reserved.