0

2 つのスクリプトを 1 つに結合する際に問題があります。

これはスクリプトの主要部分です: AS3.

そして、これはすでに結合されたスクリプトです。

そして、これが私がインポートする必要があるコードの一部です (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.
4

2 に答える 2

0

as2random(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()

于 2013-03-04T23:24:29.353 に答える
-1

ActionScript 3では、random関数は as2 コードのものとは少し異なります。問題のある行を次のように変更してください。

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

これにより、すべてのエラーが修正され、まったく同じように機能するはずです。

編集: @bitmapdata.com が示したように、これを as2 と同じように実行するには、ランダム値を切り捨てる (10 進値を取り除く) 必要があります。彼が提案したいくつかの可能性に加えて、私は個人的に nRand の型を宣言時に uint に変更します。

var nRand:uint;

イテレータの型を に変更することもできますvar i:uint。メモリ使用量が少ないことは常に良いことです ;)

于 2013-03-04T17:28:51.690 に答える