我做视频编辑,所以我对编码的了解很少。但我最近从 ChatGPT 获得了有关可在 After Effects(编辑软件)中使用的脚本的帮助。 ChatGPT 给了我一个很好的代码,但遗憾的是它不可停靠,我尝试了太多来修复它。但它不起作用。
该代码非常适合函数等,但我无法将其停靠在我的界面中。
在附件中:我用这些按钮创建了所有这些层,如果您看到左侧有一个可停靠的 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();
====================================================== =========== 我真的需要帮助!
我尝试修复这些代码,但到目前为止,如果我更改任何内容,都没有任何效果。脚本内容丢失。这就是为什么我需要这个解决方案的帮助!
您需要将所有内容包装在一个接受面板作为参数的函数中,并在其中创建一个将构建布局的函数,在这种情况下,代码将如下所示:
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);