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() {
k = 0;
this.elements = new Array();
for (i=0; i<n; i++) {
for (j=0; j<m; j++) {
//trace("i/j="+i+"/"+j);
x = i*element_width+element_width/2;
y = 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_name, k, initObject);
k++;
mc.init = init;
mc.init();
ind = index_of(i, j);
this.elements[ind] = mc;
}
}
trace("elements="+elements);
}
//
// initializes the elements that have been created before
function init_elements() {
var rval = 0;
for (i=0; i<n; i++) {
for (j=0; j<m; j++) {
ind = index_of(i, j);
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_x, j)];
right = this.elements[index_of(right_x, j)];
upper = this.elements[index_of(i, upper_y)];
under = this.elements[index_of(i, under_y)];
arr = new Array(left, right, upper, under);
element.setNeighbours(arr);
//trace("element.getNeighbours()"+element.getNeighbours());
//
}
}
for (i=0; i<n; i++) {
for (j=0; j<m; j++) {
ind = index_of(i, j);
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=0; i<neighbourslength; i++) {
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 << 8 | cval);
trace("rgbval="+rgbval);
col.setRGB(rgbval);
}
function index_of(x, y) {
return int(x+y*n);
}
trace("***Timeline layer1:1***");
var maxval = 32;
var element_width = 32;
var element_height = 32;
var w = Stage.width;
var h = Stage.height;
var n = Math.ceil(w/element_width);
var m = 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=0; i<n; i++) {
for (j=0; j<m; j++) {
ind = index_of(i, j);
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?