【问题标题】:Array of Colors error. Bug?颜色数组错误。漏洞?
【发布时间】:2011-06-30 15:27:11
【问题描述】:

K。我被困在这里了。

我正在尝试创建一个具有不同颜色值的数组。

我的问题是当我这样做时... teamColor[i] = currentColor... 我数组中的所有颜色值都变成了 currentColor。

(我会上传更多代码,但这将是一团糟,考虑到我到处都有代码,其中包含来自 3 层深的电影剪辑的引用。但是,这无论如何都无关紧要(可能),因为我在我的主时间线上使用颜色值对此进行了测试,没有对任何深度嵌套的内容进行任何引用)

我猜这只是一些可怕的错误,但如果不是(我希望不是),请指导我如何解决这个问题。

我想补充一点,我尝试在其中添加字符串,并且字符串保持其原始预期值,而颜色表现出相同的现象。

[部分解决]: 我通过为每种颜色创建单独的变量而不是将变量放入数组来更改我的代码(不是我真正想做的,但它有效)。我的代码如下所示: `

if (teamColor != 0)
{
    this["team"+teamColor+"Color"] = new ColorTransform(0,0,0,1,currentColor.redOffset,currentColor.greenOffset,currentColor.blueOffset,0)
    teamColor = 0
    namebox.addboxes()//function in a movieclip
}`

teamColor 现在是一个 int,它根据用户从具有动态生成名称的影片剪辑中单击哪个框而更改,这取决于循环中的变量值在创建时是什么。 (例如:'tempboxname[ttns].name = i;') 然后当用户单击它时,teamColor 等于该名称。

我有另一个包含颜色的影片剪辑,并调用上述函数来检查是否发生了任何 teamColor 更改,如果有,则采取相应的行动。 (让 teamColor 等于 0 的想法是,如果用户单击两次,则不会发生任何变化。其他颜色的其他条件,都在同一个函数中)。 这就是我修复代码的方式。 这不是我想要的,因为它不是一个数组(意味着看似无限数量的 teamColors,因此,团队)但它会为我做。如果有人有任何建议,请随时提出建议。

【问题讨论】:

  • 这是在for 声明中吗?你能发布周围的代码吗?

标签: arrays actionscript-3 colors


【解决方案1】:

我不是 ActionScript 专家,但在我看来,currentColor 是一个通过引用传递到数组中的对象。这意味着您分配给 currentColor 的所有数组条目都将指向同一个 currentColor 对象,而不是副本。我的建议是制作一个副本,然后将其分配到数组中。

如果你能给我更多的代码来看看会更好。例如,包含该代码段的循环会很好。如果我发现不同的错误,我将编辑我的答案。

【讨论】:

  • 参考?你的意思是 teamColor[i] 只是在这种情况下说 currentColor 的另一种方式?这显然可以解释为什么它不起作用。我确实想补充一点,我确实得到了这个工作,但它缺乏光泽和无聊。我刚刚创建了 10 个变量(团队的最大数量)并添加了以下代码: if (teamColor != 0) { this["team"+teamColor+"Color"] = new ColorTransform(0,0,0,1,currentColor. redOffset,currentColor.greenOffset,currentColor.blueOffset,0) teamColor = 0 namebox.addboxes() }。该函数是一个更大的函数的一部分,该函数通过舞台范围的 mouse_down 激活。
  • @Exyphrius 这正是我的意思(teamColor[i] 只是 currentColor 的另一种说法)。如果您只是复制颜色以分配给数组,则不需要对 10 个变量执行此操作。
【解决方案2】:

我在这里创建简单的 0xRRGGBB 颜色对象,然后将其添加到向量中。然后将颜色对象解析为 0xRRGGBB 十六进制字符串并进行跟踪。

当然,这不是您想要的,但希望它会帮助您。

var red:uint = 0xFF0000;
var green:uint = 0x00FF00;
var blue:uint = 0x0000FF;

var colors:Vector.<uint> = new Vector.<uint>()
colors.push(red, green, blue);

for each    (var color:uint in colors)
            {
            var output:String = color.toString(16);

            while   (output.length < 6)
                    output = "0" + output;

            trace("0x" + output.toUpperCase());
            }

输出:

//0xFF0000
//0x00FF00
//0x0000FF

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-12
    • 2019-09-24
    • 2021-07-07
    • 1970-01-01
    • 2019-04-13
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多