Flash en functie

Beste mensen ik heb ff een flashvraagje.

Ik had een hoop code op een mc staan,
maar nu wil ik deze in een functie gooien zodat ik alle code netjes op frame 1 van de hoofdfilm kan houden.
Ik krijg alleen twee foutmeldingen, en ik weet niet goed wat ik er aan moet doen…

[code:1:2f89401d08]
function laad(){
onClipEvent (load) {
//this._y = 350;
//endPosy = 350;
this._x = 0;
endPosx = 1300;
}
onClipEvent (enterFrame) {
movey = (endPosy-this._y)/5;
this._y += movey;
movex = (endPosx-this._x)/5;
this._x += movex;
}
};

[/code:1:2f89401d08]

Dit zou de functie moeten worden, maar ik krijg deze fouten terug:


Error Scene=Scene 1, layer=Actions, frame=1:Line 4: Clip events are permitted only for movie clip instances
onClipEvent (load) {

Error Scene=Scene 1, layer=Actions, frame=1:Line 10: Clip events are permitted only for movie clip instances
onClipEvent (enterFrame) {

Total ActionScript Errors: 2 Reported Errors: 2


onClipEvent kan dus blijkbaar niet in een functie gezet worden, is hier een omweg voor??

Groeten
Jonas

Een omweg voor wat? Wat zou er volgens jouw idee moeten gebeuren?

Ik zou de code die op het mc staat:

[code:1:6598e3db74]
onClipEvent (load) {
//this._y = 350;
//endPosy = 350;
this._x = 0;
endPosx = 1300;
}
onClipEvent (enterFrame) {
movey = (endPosy-this._y)/5;
this._y += movey;
movex = (endPosx-this._x)/5;
this._x += movex;
}

[/code:1:6598e3db74]

Als functie op een frame willen, zodat er op m’n mc geen code meer staat.
En dan kan ik gewoon de functie aanroepen op onEnterFrame, en dan blijft al m’n code op 1 frame staan?

Groeten
Jonas

[code:1:ba08d7f171] functieNaam = function () { this.onLoad = function() { this._x = 0; endPosx = 1300; }; this.onEnterFrame = function() { movey = (endPosy-this._y)/5; this._y += movey; movex = (endPosx-this._x)/5; this._x += movex; if (this._x == endPosx){ delete this.onEnterFrame; } }; };

// gebruik
_root.object.functieNaam();
[/code:1:ba08d7f171]

Thnx :-) konijn!

Hier kan ik wel mee verder!

Jonas

Nog beter

[code:1:78eb21f224]
functieNaam = function (endx:Number, endy:Number) {
// Zet altijd op 0 (nul)
this._x = 0;
this._y = 0;
// Onterframe lus
this.onEnterFrame = function() {
movey = (endy-this._y)/5;
this._y += movey;
movex = (endx-this._x)/5;
this._x += movex;
// Controle
if (this._x == endPosx) {
delete this.onEnterFrame;
trace("Easing is done");
}
};
};
// gebruik
_root.object.functieNaam(1300,500);
_root.objectTwee.functieNaam(100,0)
_root.objectDrie.functieNaam(10,30);
[/code:1:78eb21f224]

Beter voor hergebruik

:-) ok, maar deze actionscripting snap in nog niet echt... Maar ik ga er zeker naar kijken.

Je vorige code doet het alleen niet echt bij mij?
Ik heb nu dit:

[code:1:b135e2dc2c]

laden = function () {

this.onLoad = function() {
this._x = 0;
endPosx = 1300;
};
this.onEnterFrame = function() {
movex = (endPosx-this._x)/5;
this._x += movex;
if (this._x == endPosx){
delete this.onEnterFrame;
trace("gelaaaden");
}
};
};

// gebruik
_root.desert.laden();
[/code:1:b135e2dc2c]

Maar dit zou toch moeten werken?
M’n mc noemt “desert” en staat op het eerste frame van de _root?

Groeten
Jonas

—> edit <—

Ff klein vraagje tussen door,

hoe kan je nu weer een groot deel code tijdelijk uitschakelen?
Voor 1 lijn zet je er gewoon // voor, maar voor een hele functie bv kan je dat ook anders?
Ben ff vergeten hoe je dat nu weer doet?

Groeten
Jonas

Kheb de functie niet getest, maar je gebruik is al juist.

Volgens mij doe ik toch iets grondigs fout, ik snap wel wat de code doet, en normaal zou het gewoon moeten werken denk ik, Maar toch gebeurt er niets.

Ik heb m’n .fla even online gezet, moest er iemand ff tijd hebben om er naar te kijken?

.fla

Groeten
Jonas

Dit werkt:

[code:1:92aa6739f3]
MovieClip.prototype.functieNaam = function(endx:Number, endy:Number, speed:Number) {
// Zet altijd op 0 (nul)
this._x = 0;
this._y = 0;
// OnEnterframe lus
this.onEnterFrame = function() {
trace(this._x);
movey = (endy-this._y)/speed;
this._y += movey;
movex = (endx-this._x)/speed;
this._x += movex;
};
// Controle
if (this._x == endPosx) {
delete this.onEnterFrame;
trace("Easing is done");
}
};
// gebruik
_root.object.functieNaam(1300, 500,5);
[/code:1:92aa6739f3]

Waar staat die prototype voor?

Groeten
Jonas

Ok, ik heb m ondertussen ook werkende! Alleen heb ik nu gewoon super veel code om een paar makkelijke dingen te doen, en dat kan volgens mij veel simpeler...

Kan ik die functie ook voor andere dingen gebruiken?
Ik heb in totaal 5 mc’s die los van mekaar moeten kunnen bewegen.
En 4 van die mc’s zijn “knoppen”, als je op een van de knoppen klikt dan moeten alle knoppen + de 5de mc gaan bewegen.

Ik heb nu dit als code:

[code:1:e020d1c120]

//------------ FUNCTIES ---------------

_root.desert.bewegen = function(endx:Number, endy:Number) {
// Zet altijd op 0 (nul)
this._x = 0;

// Onterframe lus
this.onEnterFrame = function() {
trace(this._x);

  movex = &#40;endx-this._x&#41;/5; 
  this._x += movex; 

};
// Controle
if (this._x == endPosx) {
delete this.onEnterFrame;
trace("Easing is done");
}
};
// gebruik
_root.desert.bewegen(1300);

//------------ WOLKEN ---------------
//wolk1

_root.wolk1.onRollOver = function(){
wolk1.regen.gotoAndPlay(2);
wolk1.gotoAndStop(2);
};
_root.wolk1.onRollOut = function(){
wolk1.regen.gotoAndStop(1);
wolk1.gotoAndStop(1);

};

_root.wolk1.onRelease = function(){

//_root.desert.endPosx = 1300;
_root.desert.bewegen&#40;1300&#41;; 
_root.wolk1.endPosx = 103;
_root.wolk2.endPosx = 403;
_root.wolk3.endPosx = 604;
_root.wolk4.endPosx = 264;

};

_root.wolk1.regen._visible = false;
_root.wolk2.regen._visible = false;
_root.wolk3.regen._visible = false;
_root.wolk4.regen._visible = false;

//wolk2

_root.wolk2.onRollOver = function(){
wolk2.regen.gotoAndPlay(2);
wolk2.gotoAndStop(2);
};
_root.wolk2.onRollOut = function(){
wolk2.regen.gotoAndStop(1);
wolk2.gotoAndStop(1);

};

_root.wolk2.onRelease = function() {

//_root.desert.endPosx = 750;
_root.desert.bewegen&#40;750&#41;; 
_root.wolk1.endPosx = 200;
_root.wolk2.endPosx = 100;
_root.wolk3.endPosx = 550;
_root.wolk4.endPosx = 400;

};

//wolk3

_root.wolk3.onRollOver = function(){
wolk3.regen.gotoAndPlay(2);
wolk3.gotoAndStop(2);

};
_root.wolk3.onRollOut = function(){
wolk3.regen.gotoAndStop(1);
wolk3.gotoAndStop(1);

};

_root.wolk3.onRelease = function() {

//_root.desert.endPosx = 100;
_root.desert.bewegen&#40;100&#41;; 
_root.wolk1.endPosx = 650;
_root.wolk2.endPosx = 130;
_root.wolk3.endPosx = 300;
_root.wolk4.endPosx = 400;

};

//wolk4

_root.wolk4.onRollOver = function(){
wolk4.regen.gotoAndPlay(2);
wolk4.gotoAndStop(2);
};

_root.wolk4.onRollOut = function(){
wolk4.regen.gotoAndStop(1);
wolk4.gotoAndStop(1);

};

_root.wolk4.onRelease = function() {

//_root.desert.endPosx = -800;
_root.desert.bewegen&#40;-800&#41;; 
_root.wolk1.endPosx = 500;
_root.wolk2.endPosx = 150;
_root.wolk3.endPosx = 250;
_root.wolk4.endPosx = 580;

};

[/code:1:e020d1c120]

Hele boterham om eigenlijk niet echt veel te doen volgens mij?
Op de die lijnen code waar “regen” in voorkomt moet je niet letten, die mc heb ik tijdelijk weggedaan!

Jonas

Oke, ik heb weer een deel code weggekregen, maar nu zou ik graag nog het bewegen van de wolken een beetje versimpelen. Alleen weet ik niet goed hoe ik hier aan begin, ik heb een stukje code geschreven, wat voor alle wolken moet gelden, maar volgens mij is dit niet de juiste manier.

[code:1:5d078cc628]
for (i=1; i<=4; i++){
_root["wolk"+i].drijven = function(endx:Number){

//onEnterFrame lus
this.onEnterFrame = function&#40;&#41;&#123;
	trace&#40;this._x&#41;;
	movex = &#40;endx-this._x&#41;/4;
&#125;;
//Controle
if &#40;this._x == endPosx&#41;&#123;
	delete this.onEnterFrame;
	trace&#40;&quot;wolken zijn klaar&quot;&#41;;
&#125;
&#125;;

}
[/code:1:5d078cc628]

Maar nu zou ik voor iedere wolk een
onRelease = function{
willen schrijven, waar ik dan enkel de _x aan moet geven, en dat de wolk dan naar die _x gaat.
Nu doe ik het zo:

[code:1:5d078cc628]
_root.wolk1.onRelease = function(){

_root.desert.bewegen&#40;1300&#41;; 
_root.wolk1.endPosx = 103;
_root.wolk2.endPosx = 403;
_root.wolk3.endPosx = 604;
_root.wolk4.endPosx = 264;

};
[/code:1:5d078cc628]

En zo heb ik het voor vier wolken, maar dit moet volgens mij ook makkelijker kunnen?

Is dit ook zo? Wie kan me op weg helpen?

Groeten Jonas

Werk met een array.

xPos = [“200”,“300”,“400”];

for (var i = 0 i<3;i++){
_root[“wolk”+i].functieNaam(xPos[i]);
}

Ik zat ze denken of het niet handiger en mooier is om de mc's naar een random plaats te sturen? Enkel de _x random, want de _y moet altijd hetzelfde blijven..

Alleen weet ik niet goed hoe ik dit voormekaar moet krijgen?

Iemand een goeie tutorial, of een uitleg?

Jonas

Math.Rand(400);

Wat jij eigenlijk allemaal vraagt zijn dé actionscript basics. Tik je vraag eens in in google "flash random number" en je zal het ontwoord wel krijgen.

Niet dat je niet hier mag vragen hoor, maar als je zelf iets opzoekt dan blijft dit vaak langer bij.

Of maak een map aan, plaats daarin telkens per oplossing 1 *.as filetje, met als titel je probleem. Handig handboek;

bvb

RandomNumber.as

// Getal tussen haakjes geeft hoogste getal mogelijk aan)
var c:Number= Math.Rand(400);
trace(c)

[quote:b4005f2d65="EL Mystica"]Of maak een map aan, plaats daarin telkens per oplossing 1 *.as filetje, met als titel je probleem. Handig handboek;

bvb

RandomNumber.as

// Getal tussen haakjes geeft hoogste getal mogelijk aan)
var c:Number= Math.Rand(400);
trace(c)[/quote:b4005f2d65]

Ja, dat heb ik, maar ik heb nog niets met random math gedaan…
Vandaar dat ik nog een paar tutorials zou kunnen gebruiken!

Groeten
Jonas