【问题标题】:Error joining AS2 with AS3将 AS2 与 AS3 连接时出错
【发布时间】:2013-03-04 17:15:06
【问题描述】:

我无法将两个脚本合二为一。

This is main part of the script: AS3.

And this is already joined script.

这是我需要导入的部分代码(AS2):

stop();
var banners:Array = new Array();
var imagePaths:Array = new Array();
var links:Array = new Array();
var bodyTexts:Array = new Array();
var imageTime:Number;
var numberOfBanners:Number;
var isRandom:String;
var showHeader:String;
var bannersXML:XML = new XML();
bannersXML.ignoreWhite = true;
bannersXML.load("banners.xml");
bannersXML.onLoad = function(success) {
    if (success) {
        trace("XML LOADED");
        imageTime = parseInt(this.firstChild.firstChild.firstChild)*1000;
        numberOfBanners = parseInt(this.firstChild.childNodes[1].firstChild);
        isRandom = this.firstChild.attributes["isRandom"];
        showHeader = this.firstChild.childNodes[2].attributes["showHeader"];

        var bannerSequence:Array = new Array();
        if (isRandom == "true") {
            //Make a random sequence
            while (bannerSequence.length<numberOfBanners) {
                newRandomNumber = random(numberOfBanners);
                //Make sure that the random one chosen is not already chosen
                for (var i = 0; i<=bannerSequence.length; i++) {
                    if (newRandomNumber != bannerSequence[i]) {
                        alreadyThere = false;
                    } else {
                        alreadyThere = true;
                        break;
                    }
                }
                //Add only random values that aren't in the array
                if (!alreadyThere) {
                    bannerSequence.push(newRandomNumber);
                }
            }
        } else {
            for (var i = 0; i<numberOfBanners; i++) {
                bannerSequence.push(i);
            }
        }
    }

    //Read XML in the Random Order Chosen
    for (var i = 0; i<numberOfBanners; i++) {
        banners.push(this.firstChild.childNodes[2].childNodes[bannerSequence[i]].firstChild.firstChild.toString());
        bodyTexts.push(this.firstChild.childNodes[2].childNodes[bannerSequence[i]].childNodes[1].firstChild.nodeValue);
        imagePaths.push(this.firstChild.childNodes[2].childNodes[bannerSequence[i]].childNodes[2].firstChild.nodeValue);
        links.push(this.firstChild.childNodes[2].childNodes[bannerSequence[i]].childNodes[3].firstChild.nodeValue);
    }
    play();
};
//Start the image counter at 0
var imageCounter = 0;

这部分代码出错了

function doRandArray(a:Array):Array {//make random array
 var nLen:Number = a.length;
 var aRand:Array = a.slice();
 var nRand:Number;
 var oTemp:Object;
 for (var i:Number = 0; i < nLen; i++) {
  oTemp = aRand[i];
  nRand = i + (random(nLen – i));
  aRand[i] = aRand[nRand];
  aRand[nRand] = oTemp;
 }
 return aRand;
}

当我运行它时,我在这个地方得到一个错误:

nRand = i + (random(nLen – i));
Scene 1, Layer 'Layer 1', Frame 1, Line 265 1084: Syntax error: expecting rightparen before i.

【问题讨论】:

    标签: actionscript-3 actionscript-2


    【解决方案1】:

    as2 random(random(nLen – i)); 生成 0,1,...nLen-i-1。不只浮动 int 值。

    正确的 as3 代码是 int(Math.random()*(nLen-i));Math.floor(Math.random()*(nLen-i));

    as2:random()

    as3:Math.random()

    【讨论】:

    • 你说得对,我没有注意到 nRand 的类型是 Number 而不是 int,这会使分配时会自动发生发言权。我想我认为它是一个 uint,因为我总是将该类型用于数组索引变量:P 无论如何,感谢您的更正。
    • 您确实意识到他只是使用该值来访问数组,并且由于数组只接受 int 值,因此该值会自动截断并且功能完全相同...
    • 谢谢你们俩。修复。再次非常感谢。
    【解决方案2】:

    ActionScript 3 中,random 函数与 as2 代码中的函数有点不同,只需将违规行更改为:

    nRand = i + Math.random()*(nLen-1);
    

    这应该可以修复所有错误并且工作正常。

    编辑:正如@bitmapdata.com 所指出的,要使其运行与 as2 中的相同,必须截断随机值(去除其十进制值)。除了他建议的几种可能性之外,我个人只会在声明时将 nRand 的类型更改为 uint:

    var nRand:uint;
    

    您还可以将迭代器类型更改为var i:uint。更少的内存使用总是好的;)

    【讨论】:

    • 嗨,也许你可以在 Titasss4@gmail.com pm 我,但我仍然遇到一些错误。如果您可以使此脚本正常工作,我们可以为您的帮助安排一些付款。如果你有兴趣。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 2021-08-15
    • 2018-08-19
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多