使用 JavaScript 在 Adobe Animate 中意外地重新分配变量
Unexpected variable reassignment in Adobe Animate using JavaScript
我最近开始使用 Adobe Animate + JavaScript。我试图在每次滴答时增加一个变量。在 Adobe Animate 项目中,在某个时候我在事件循环内重新分配变量时遇到了意外行为:
myVar = 0;
createjs.Ticker.addEventListener('tick', mainLoop.bind(this));
function mainLoop() {
myVar += 1;
this.mytext.text = myVar; // mytext is a text box pre-drawn on canvas
}
这会产生意外的增量,如文本框中所示:
如果使用 let
或 var
声明 myVar
,则结果值在 1 和 2 之间浮动
创建新文档后,问题消失了。类似的代码在 jsfiddle 中也按预期工作:https://jsfiddle.net/cdf5utmx/2/.
我不确定文档是如何变得“混乱”的,因为同时更改的代码之外的唯一设置是帧速率设置。
我想知道是否有人遇到过类似的问题,因为每次都创建一个新文档是不切实际的。
我在 Windows 10、Chrome 91.0 浏览器上使用 Adobe Animate 21.0。
我习惯使用 Python 和 JavaScript,这意味着我可能不了解 JavaScript 中变量赋值和范围的一些基本知识。这也很可能是 Adobe Animate 特有的问题
已回答:问题与代码 运行 相关,在多帧而不是一帧中,正如 Lanny 指出的那样
在没有看到更多代码的情况下,我不确定,但看起来您可能 运行多次使用您的代码。如果你在 Aniamte 的帧脚本中有上面的代码块,那么它可以在每次帧 运行s 时执行。在那里输入控制台日志以确认它。如果有多于一帧,Adobe Animate 将默认循环帧时间轴。
一种典型的方法是将该代码移出 Animate 并移至主 HTML 或 JavaScript 文件中,它可以 运行 一次。或者,您可以将代码放在一个块中以确保它只有 运行 一次:
var runOnce = false;
if (!runOnce) {
runOnce = true;
var myVar = 0;
createjs.Ticker.on('tick', mainLoop, this);
function mainLoop() {
myVar += 1;
this.mytext.text = myVar; // mytext is a text box pre-drawn on canvas
}
}
我还展示了on()
的用法,它提供了一个作用域参数(docs)
我最近开始使用 Adobe Animate + JavaScript。我试图在每次滴答时增加一个变量。在 Adobe Animate 项目中,在某个时候我在事件循环内重新分配变量时遇到了意外行为:
myVar = 0;
createjs.Ticker.addEventListener('tick', mainLoop.bind(this));
function mainLoop() {
myVar += 1;
this.mytext.text = myVar; // mytext is a text box pre-drawn on canvas
}
这会产生意外的增量,如文本框中所示:
如果使用 let
或 var
声明 myVar
,则结果值在 1 和 2 之间浮动
创建新文档后,问题消失了。类似的代码在 jsfiddle 中也按预期工作:https://jsfiddle.net/cdf5utmx/2/.
我不确定文档是如何变得“混乱”的,因为同时更改的代码之外的唯一设置是帧速率设置。
我想知道是否有人遇到过类似的问题,因为每次都创建一个新文档是不切实际的。
我在 Windows 10、Chrome 91.0 浏览器上使用 Adobe Animate 21.0。
我习惯使用 Python 和 JavaScript,这意味着我可能不了解 JavaScript 中变量赋值和范围的一些基本知识。这也很可能是 Adobe Animate 特有的问题
已回答:问题与代码 运行 相关,在多帧而不是一帧中,正如 Lanny 指出的那样
在没有看到更多代码的情况下,我不确定,但看起来您可能 运行多次使用您的代码。如果你在 Aniamte 的帧脚本中有上面的代码块,那么它可以在每次帧 运行s 时执行。在那里输入控制台日志以确认它。如果有多于一帧,Adobe Animate 将默认循环帧时间轴。
一种典型的方法是将该代码移出 Animate 并移至主 HTML 或 JavaScript 文件中,它可以 运行 一次。或者,您可以将代码放在一个块中以确保它只有 运行 一次:
var runOnce = false;
if (!runOnce) {
runOnce = true;
var myVar = 0;
createjs.Ticker.on('tick', mainLoop, this);
function mainLoop() {
myVar += 1;
this.mytext.text = myVar; // mytext is a text box pre-drawn on canvas
}
}
我还展示了on()
的用法,它提供了一个作用域参数(docs)