PDA

Volledige versie bekijken : Hulp nodig bij ombouwen van AS


Emp
%Europe/Berlin %885 %2006, 22:14
He guys en girls,

ik heb een probleem met het ombouwen van een flash 5 code naar flash 8 code.
Ik ben niet zo'n ster in AS,dus ik hoopte dat iemand mij hierbij kan helpen.



onClipEvent (mouseMove) {
n++;
if (n == 30) {
i++;
duplicateMovieClip(_root.effect, i, i);
setProperty("/" add i, _x, _root._xmouse);
setProperty("/" add i, _y, _root._ymouse);
n=0;
}
}
onClipEvent (load) {
_root.effect.gotoAndStop("end");
}



Dit is de code....kan iemand dit voor mij ombouwen met een uitleg erbij?

Alvast bedankt!

Dauntless
%Europe/Berlin %335 %2006, 09:02
In principe wérkt het wel als je al 'add' vervangt door + ... Maar dan zit je dus nog met heel oude code...

-Het gebruiken van een cijfer als instancenaam is ook niet toegestaan

duplidateMovieClip(_root.effect, i, i);
wordt
duplidateMovieClip(_root.effect, "effect_"+ i, i);

setProperty("/" add i, _x, _root._xmouse);
wordt
_root["effect_"+i]._x = _xmouse;
(idem voro y mouse)

En van onClipEvent zou je moeten afstappen...

In plaats van 'onClipEvent(enterFrame) {}' zet je op een FRAME: instance.onEnterFrame = function() {} en je geeft je movieclip een instancenaam. (hier : instance)

Emp
%Europe/Berlin %922 %2006, 23:08
Ik heb nu:

_root.mc_clip.onEnterFrame = function(mouseMove) {
n++;
if (n == 30) {
i++;
duplidateMovieClip(_root.effect, "effect_"+ i, i);
_root["effect_"+i]._x = _xmouse;
_root["effect_"+i]._y = _ymouse;
n=0;
}
}
_root.mc_clip.onEnterFrame = function(load) {
_root.effect.gotoAndStop("end");
}


Alles gedaan.
Geen foutmeldingen meer als ik hem in flash 8, AS2 exporteer maar nu gebeurd er dus helemaal niets........hilfe bitte :)

theFlashWizard
%Europe/Berlin %928 %2006, 23:17
waarom die aparte i variabele? waarom gebruik je daar ook niet die n voor?

MovieClip.duplidateMovieClip() is netter, zo dus:
effect.duplidateMovieClip("effect_"+ i, i);
dus target ervoor ipv als parameter.

Gebruik ook geen _root, _root veroorzaakt:
Actionscript Tutorials -> het inladen probleem (http://www.flashfocus.nl/forum/showthread.php?t=6338#het inladen probleem)

zoals in flash helpt staat bij duplicate movie:
Returns:
MovieClip - A reference to the duplicated movie clip (supported for Flash Player 6 and later).
hij returnt dus een verwijzing naar de movieclip. dat maakt het mogelijk het zo te doen:
effect = duplidateMovieClip(_root.effect, "effect_"+ i, i);
effect._x = _xmouse;
effect._y = _ymouse;


waarom gebruik je een onEnterFrame om een movieclip naar een frame te sturen?

Emp
%Europe/Berlin %944 %2006, 23:40
Misschien is het even handig als ik het de 2 fla's ff post...dan wordt alles stuk duidelijker denk ik :)

Flash 7 versie heb ik op het web gevonden...maar ik wil ook snappen wat er verandert moet worden en waarom....dus vandaar dit topic :)

linkje naar fla's: http://www.newflavours.com/test/watertest.zip

Dauntless
%Europe/Berlin %955 %2006, 23:55
mc_clip.onEnterFrame = function(mouseMove) {
Dit kan niet... Je kan zo geen argument geven aan een onEnterFrame. (die mouseMove moet dus weg)

n++ je hebt nergens een beginwaarde gezet voor 'n'... Dus wat moet flash dan doen? Hij kan moeilijk gaan gokken ;). Deze optelling zal resulteren in n = undefined;
Hetzelfde geldt voor i.

'duplidateMovieClip' -> duplicateMovieClip ;)



Daarna ken je nog een onEnterFrame toe en deze overschrijft de vorige. Wat je wil is dit:
var n = 0;
var i = 0;
mc_clip.onMouseMove = function() {
n++;
if (n == 30) {
i++;
effect = duplicateMovieClip(_root.effect, "effect_"+i, i);
effect._x = _xmouse;
effect._y = _ymouse;
n = 0;
}
};
mc_clip.onLoad = function() {
_root.effect.gotoAndStop("end");
};

De onLoad kan weg:
var n = 0;
var i = 0;
mc_clip.onMouseMove = function() {
n++;
if (n == 30) {
i++;
effect = duplicateMovieClip(_root.effect, "effect_"+i, i);
effect._x = _xmouse;
effect._y = _ymouse;
n = 0;
}
};
_root.effect.gotoAndStop("end");


De onMouseMove kan op de hoofdtijdlijn en aangezien het AS al op de hoofdtijdlijn staat, heb je geen _root nodig (en is 'this' voldoende)

var n = 0;
var i = 0;
this.onMouseMove = function() {
n++;
if (n == 30) {
i++;
effect = duplicateMovieClip(_root.effect, "effect_"+i, i);
effect._x = _xmouse;
effect._y = _ymouse;
n = 0;
}
};
this.effect.gotoAndStop("end");


Aangezien we streven naar een mooie, Object oriented code, vervangen we de globale functie 'duplicateMovieClip' door de MovieClip method:
var n = 0;
var i = 0;
this.onMouseMove = function() {
n++;
if (n == 30) {
i++;
effect = this.effect.duplicateMovieClip("effect_"+i, i);
effect._x = _xmouse;
effect._y = _ymouse;
n = 0;
}
};
this.effect.gotoAndStop("end");


Nu heb je op de hoofdtijdlijn wel 2 objecten met conflicterende namen (de variabele 'effect' en de movieclip 'effect'). Die gaan we dus ook even veranderen:
var n = 0;
var i = 0;
this.onMouseMove = function() {
n++;
if (n == 30) {
i++;
var mc = this.effect.duplicateMovieClip("effect_"+i, i);
mc._x = _xmouse;
mc._y = _ymouse;
n = 0;
}
};
this.effect.gotoAndStop("end");



Aangezien je mis zat bij die onEnterFrame = function(mouseMove) en zo, kijk je best hier:
http://livedocs.macromedia.com/flash/8/main/00002436.html (bij Event summary)

Veel success! :)

Emp
%Europe/Berlin %803 %2006, 20:17
Je bent mijn held!

Het werkt..en voor mij het allerbelangrijks...je uitleg is bijzonder helder!
Top...dank je wel!