skript von as.1 zu as.2

harrry

Erfahrenes Mitglied
Liebe kluge Helfer,

beiliegendes Skipt würde ich so gern in F8 und AS2 verwenden - aber es will nur in F6 und AS1.

Könnte jemand so nett sein, da mal drüber zu schauen, wo sich der "generation gap" verbirgt?

Ich danke herzlich!

PHP:
menus = new XML()
menus.load(sourcefile)
menus.ignoreWhite = true

menus.onLoad = function(success) {
    menuData = menus.firstChild.childNodes
    
    for(i=0;i<menuData.length;i++){
        subNodes = menuData[i].childNodes
        if(menuData[i].nodeName == "button"){
            //Container clip holds submenu data
            attachMovie("container","subContainer"+i,i-menuData.length)
            eval("subContainer"+j)._x = -1000000
            eval("subContainer"+i)._x = -1000000
            eval("subContainer"+i)._alpha = 0
            
            //Main Button attaching and spacing
            attachMovie("mainSuperButton","mainButton"+i,i)
            mainButtonRef = eval("mainButton"+i)
            mainButtonRef.textVar = menuData[i].attributes.name
            mainButtonRef.index = i
            mainButtonRef._y =i*mainSpace
            
            //Main Button release action(rollover located in mainbutton mc)
            mainButtonRef.onRelease = function() {
                if(open == this.index){
                    //second click error check. closes menu
                    resetMenu()
                    open = undefined
                }else{
                    //first click
                    open = this.index
                    this.gotoAndStop(3)
                    collapse(this)
                }

            //containers are hidden off stage and moved on release
            }
            for(j=0;j<=subNodes.length;j++){
                containerRef = eval("subContainer"+i)
                if(subNodes[j].nodeName == "subitem"){
                    containerRef.attachMovie("subSuperButton","subButton"+j,j)
                    containerRef["subButton"+j].textVar = subNodes[j].attributes.name
                    containerRef["subButton"+j].page = subNodes[j].attributes.location
                    containerRef["subButton"+j]._y = j*subSpace
                }
            }
        }
    }
}
function collapse (except) {
    num = except.index
    subRef = eval("subContainer"+num)
    resetMenu()
    //The clips after the one clicked recieve new spots
    for(i=num+1;i<=3;i++){
        eval("mainButton"+i).JumpTo(subRef._height+i*mainSpace)
    }
    subRef._y = eval("mainButton"+num)._height+(num*mainSpace)+subYadjust
    subRef._x = subXfactor
    fade(subRef,"in")
}
//resets everything to original places
function resetMenu() {
    for(j=0;j<=(3);j++){
        eval("subContainer"+j)._alpha = 0
        eval("subContainer"+j)._x = -1000000
        eval("subContainer"+j)._y = 0
        eval("mainButton"+j).JumpTo(j*mainSpace)
    }    
}
function fade(fadeTarget,param) {
    if(param == "in"){
        fadeTarget.onEnterFrame = function(){
            this._alpha+=6
        }
    }
}
 
Hi,

Du solltest:
  • Alle Variablen deklarieren. Schau also, ob an irgendeiner Stelle Variablen verwendet werden, die nicht mit "var" deklariert worden sind.

  • Nach jeder Anweisung/Zeile ein Semikolon setzen

  • Auf eval verzichten. Statt
Code:
            attachMovie("container","subContainer"+i,i-menuData.length)
            eval("subContainer"+j)._x = -1000000
            eval("subContainer"+i)._x = -1000000
            eval("subContainer"+i)._alpha = 0
            
            //Main Button attaching and spacing
            attachMovie("mainSuperButton","mainButton"+i,i)
also z.B.:
Code:
var subCont = _root.attachMovie("container","subContainer"+i,i-menuData.length);
subCont._x = -1000000;
subCont._y = -1000000;
subCont._alpha = 0;

var mainButtonRef = _root.attachMovie("mainSuperButton","mainButton"+i,i);
In anderen Fällen kannst Du den Array-Zugriffsoperator verwenden:
Code:
// Statt:

var obj = eval("einMC_" + i);

// so:

obj = this["einMC_" + i];


  • Überprüfen, ob alle Klassen und Methodennamen korrekt hinsichtlich der Groß- und Kleinschreibung notiert sind.
Code:
gotoandplay(10);
hat im Flashplayer 6 noch funktioniert; ab Player 7 nicht mehr.

Gruß
.
 
Danke... aber... hab probiert und probiert... ist leider zu hoch für mich. Wenn ich den ersten Codeabschnitt Deinem Tipp gemäß ersetze, wird gar nichts mehr angezeigt...
 
Hi,

1. wird die Funktion "JumpTo" im MC "mainSuperButton" so geschrieben:
Code:
JumpTO
, vom MC "MenuClip" aber so aufgerufen:
Code:
JumpTo

2. Wird in dieser Funktion die Variable "myYspeed" verwendet, ohne vorher initialisiert zu werden:
Code:
myYspeed = ((this._y-newY)/a+myYspeed)/d
Da die Variable zunächst den Wert "undefined" hat, kann der neue Wert auch nicht berechnet werden, da
Code:
((this._y - newY) / a + undefined) / d
den Wert NaN zurückgibt. Initialisiere die Variable vorher:
Code:
function JumpTo(newY) {
	var a = 3
	var d = 2.2
	var myYspeed = 0;
	this.onEnterFrame = function() {
	myYspeed = ((this._y-newY)/a+myYspeed)/d
		this._y -= myYspeed
	}
}
Flashplayer 6 hat bei undefinierten Variablen automatisch den Wert 0 eingesetzt.

Gruß
.
 
Zurück