Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 10-03-2006, 02:53   #1 (permalink)
Neuer User
 
Registriert seit: Mar 2006
Beiträge: 3
flash friert ein - Symbol mit angehängter methode

Hallo!

Ich bekomme ein script einfach nicht zum laufen, konnte mein problem allerdings schon eingrenzen. Hier ist erst mal das actionscript, daß ich in meiner .fla im Layer 1(Action), Frame 1 eingebaut habe:

PHP-Code:
// flow
//
// creates instances of a Symbol as MovieClip
function make_elements() {
    
0;
    
this.elements = new Array();
    for (
i=0i<ni++) {
        for (
j=0j<mj++) {
            
//trace("i/j="+i+"/"+j);
            
i*element_width+element_width/2;
            
j*element_height+element_height/2;
            
mc_name "element_"+i+"_"+j;
            
initObject = new Object();
            
initObject._x x;
            
initObject._y y;
            
mc this.attachMovie("oval_symbol"mc_namekinitObject);
            
k++;
            
mc.init init;
            
mc.init();
            
ind index_of(ij);
            
this.elements[ind] = mc;
        }
    }
    
trace("elements="+elements);
}
//
// initializes the elements that have been created before
function init_elements() {
    var 
rval 0;
    for (
i=0i<ni++) {
        for (
j=0j<mj++) {
            
ind index_of(ij);
            
element this.elements[ind];
            
trace("init_elements element="+element);
            
trace(" type:"+typeof (element));
            
trace(" element.init="+element.init);
            
//
            // initialize value
            
rval Math.random()*maxval;
            
element.setValue(rval);
            
trace(element+".getValue="+element.getValue());
            
//
            // initialize neighbours
            
left_x = (i-1+n)%n;
            
upper_y = (j-1+m)%m;
            
right_x = (i+1+n)%n;
            
under_y = (j+1+m)%m;
            
//trace("<"+left_x);
            //trace(">"+right_x);
            //trace("^"+upper_y);
            //trace("v"+under_y);
            
left this.elements[index_of(left_xj)];
            
right this.elements[index_of(right_xj)];
            
upper this.elements[index_of(iupper_y)];
            
under this.elements[index_of(iunder_y)];
            
arr = new Array(leftrightupperunder);
            
element.setNeighbours(arr);
            
//trace("element.getNeighbours()"+element.getNeighbours());
            //
        
}
    }
    for (
i=0i<ni++) {
        for (
j=0j<mj++) {
            
ind index_of(ij);
            
element this.elements[ind];
            
trace("element="+element);
            
element.update_value();
            
//element.onRollOver = update_value;
            //element.timer = setInterval(element, "update_value", 1000);
        
}
    }
}
//
function init() {
    
trace(this+".init()");
    
this.setNeighbours setNeighbours;
    
this.getNeighbours getNeighbours;
    
this.setValue setValue;
    
this.getValue getValue;
    
this.update_value update_value;
}
function 
setValue(v) {
    
//trace(this+".setValue()"+v);
    
this.val v;
}
function 
getValue() {
    
//trace(this+".getValue()"+this.val);
    
return this.val;
}
function 
setNeighbours(arr) {
    
//trace(this+".setNeighbours() "+arr);
    
this.neighbours arr;
}
function 
getNeighbours() {
    return 
this.neighbours;
}
function 
update_value() {
    var 
sum 0;
    var 
neighbours this.getNeighbours();
    var 
neighbourslength neighbours.length;
    
//trace(this+" neighbours= "+neighbours);
    
trace("update_value"+this+"--"+neighbourslength);
    for (
i=0i<neighbourslengthi++) {
        
neighbour neighbours[i];
        
sum sum+neighbour.getValue();
    }
    
sum sum+this.getValue();
    
sum sum/5;
    
trace(this+"sum="+sum);
    
this.setValue(sum);
    var 
col = new Color(this);
    var 
cval int(255-sum);
    var 
rgbval = (cval << 16 cval << cval);
    
trace("rgbval="+rgbval);
    
col.setRGB(rgbval);
}
function 
index_of(xy) {
    return 
int(x+y*n);
}
trace("***Timeline layer1:1***");
var 
maxval 32;
var 
element_width 32;
var 
element_height 32;
var 
Stage.width;
var 
Stage.height;
var 
Math.ceil(w/element_width);
var 
Math.ceil(h/element_height);
trace("w/h="+w+"/"+h);
trace("n/m="+n+"/"+m);
make_elements();
init_elements(); 
Die trace kommandos zeigen mir, daß die aufrufe für

element.update_value();

(bei mir in zeile 67) immer wieder aufgerufen werden, und zwar komischer weise für die elemente element_4_0 bis element_5_1, scheinbar das sieht dann so aus:

PHP-Code:
element=_level0.element_4_11
update_value_level0
.element_4_11--4
_level0
.element_4_11sum=15.1614449106499
element
=_level0.element_4_12
update_value_level0
.element_4_12--4
_level0
.element_4_12sum=17.8465099690568
element
=_level0.element_5_0
update_value_level0
.element_5_0--4
_level0
.element_5_0sum=8.53245762363076
element
=_level0.element_4_1
update_value_level0
.element_4_1--4
_level0
.element_4_1sum=7.61681462810369 
und immer so weiter.
Wenn ich zeile 67 auskommentiere, aber dafür die 'onRollOver' variante verwende (zeile 68), kann ich jedes einzelne element per maus veranlassen, die update_value methode genau ein mal aus zu führen...
Leider klappt es auch nicht, die version in zeile 69 zu verfenden, und einen timer auf die methode an zu setzen;

also was ist falsch hier:

PHP-Code:
    for (i=0i<ni++) {
        for (
j=0j<mj++) {
            
ind index_of(ij);
            
element this.elements[ind];
            
trace("element="+element);
            
element.update_value();
            
//element.onRollOver = update_value;
            //element.timer = setInterval(element, "update_value", 1000);
        
}
    } 
Mein Flash stürzt dabei übrigens ab und friert ein, das ist ein übler bug.

Was mache ich hier bloß falsch?

Ich will nur n X m elemente anlegen, die das gleiche verhalten haben. das 'oval_symbol' ist 32x32 einheiten groß und in der library vorhanden. Kann mir hier jemand weiter helfen?

Geändert von oida (10-03-2006 um 02:56 Uhr)
oida ist offline   Mit Zitat antworten
Alt 10-03-2006, 09:35   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Für den Einsteigerbereich ist das Script wohl ein wenig zu heavy, habs mal nach AS1 verschoben.
  Mit Zitat antworten
Alt 14-03-2006, 13:03   #3 (permalink)
Neuer User
 
Registriert seit: Mar 2006
Beiträge: 3
danke

danke, ich hoffe dort findet jemand heraus, wie dieser fehler passiert; rekursion SEHE ich einfach keine im code...
oida ist offline   Mit Zitat antworten
Alt 14-03-2006, 13:17   #4 (permalink)
noch kein Pro
 
Benutzerbild von Albreax
 
Registriert seit: Jul 2005
Ort: Dresden
Beiträge: 90
such doch mal seber mit dem debbuger und trace dir die sich ändernden variablen aus. dann müsstest du ja den fehler finden. sollte ja an einer der scheifen liegen. vieleicht ist ja eine der variablen undefine
__________________
Gruß Albreax
------------
Albreax ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele