PDA

Volledige versie bekijken : centre load movie


wood
%Europe/Berlin %906 %2005, 22:45
heeft iemand een script waarin extern geladen foto's automatisch in het midden van de movie (of hele scherm)? Zit hier al heel lang mee te tobben, ik zou geweldig geholpen zijn als iemand met kon helpen.
Bedankt

Roenes
%Europe/Berlin %920 %2005, 23:05
Ik zou zeggen gebruik de zoekfunctie. Dit is volgens mij al een paar keer langs gekomen. :)

Ook is dit geen Serverside Scripting vraag. Ik verplaats em naar ActionScript :)

wood
%Europe/Berlin %493 %2005, 12:50
kan nergens zo'n script vinden, moet niet te moeilijk te vinden zijn toch?
Heeft iemand idee, of kennis? Thnx

latino
%Europe/Berlin %513 %2005, 13:20
zoek op loadmovie in het forum

wood
%Europe/Berlin %552 %2005, 14:15
ik kan wel vinden hoe je de MC naar een vaste x- en y-waarde verplaatst, maar er is echt geen scrip-t te vinden die de movie automatisch in het midden van het beeld zet; iedere foto heeft een andere height en width dus het moet per keer worden aangepast. Miss een hele moeilijke vraag maar moet toch niet onmogelijk zijn?

Fatty Owl
%Europe/Berlin %563 %2005, 14:31
kan je ook niet gewoon die foto even in het midden zetten en kijken welke x en y hij dan heeft, en die kopiëren(hopelijk heb ik het juist geschreven;))naar je AS?

Pimm
%Europe/Berlin %575 %2005, 14:49
Ik heb daarnet deze centreer code geschreven (alleen horizontaal, verticaal werkte niet op één of andere manier):object._x = (Stage.width/2)-(object._width/2);Ik hoop dat je er iets aan hebt (en ik hoop dat iemand mij wakker schudt waarom hij verticaal niet werkt).
Inladen doe je inderdaad met loadMovie, kijk in de F1 helpfiles.
Let erop: In Flash MX 2004 is het niet mogelijk om progressive JPG's in te laden! (In Flash 8ball wel)

Laiverd
%Europe/Berlin %622 %2005, 15:56
kan je ook niet gewoon die foto even in het midden zetten en kijken welke x en y hij dan heeft, en die kopiëren(hopelijk heb ik het juist geschreven;))naar je AS?Nee dus, omdat het registratiepunt voor as altijd linksboven zit. Wat ik meestal doe (zie ook www.atilichtveld.com), is een movieclip ter grootte van de stage, back_mc

Centreren is dan iets als
// het horizontale midden vind je door
hCenter = (back_mc._x + back_mc._width)/2
// het verticale midden vind je door
vCenter = (back_mc._y + back_mc._height)/2
// horizontaal centreren doe je door
pic._x = Math.round((hCenter - pic._width)/2) // omdat het registratiepunt linksboven zit en niet in het midden
// horizontaal centreren doe je door
pic._y = Math.round((vCenter - pic._height)/2) // omdat het registratiepunt linksboven zit en niet in het midden
// die Math.round() omdat ook afbeeldingen op hele pixels moeten staan voor het beste resultaatJohn

wood
%Europe/Berlin %638 %2005, 16:19
werkt nog niet helemaal, maar ws door mijn eigen onkunde. Hoe definieer je de var pic zoals je hierboven hebt gedaan? Heb m'n movieclip de naam "back_mc" gegeven, dat klopt toch?

Laiverd
%Europe/Berlin %639 %2005, 16:21
Je moet je afbeeldingen in een movieclip inladen met loadMovie(). Die movieclip heeft dan een naam; in het voorbeeld is dat 'pic', maar dat kan van alles zijn (als het maar een geldige naam is; dus geen spaties, niet beginnen met een getal etc.).

John

wood
%Europe/Berlin %641 %2005, 16:24
// het horizontale midden vind je door
hCenter = (back_mc._x + back_mc._width)/2
// het verticale midden vind je door
vCenter = (back_mc._y + back_mc._height)/2
// horizontaal centreren doe je door
pic._x = Math.round((hCenter - pic._width)/2) // omdat het registratiepunt linksboven zit en niet in het midden
// horizontaal centreren doe je door
pic._y = Math.round((vCenter - pic._height)/2) // omdat het registratiepunt linksboven zit en niet in het midden
// die Math.round() omdat ook afbeeldingen op hele pixels moeten staan voor het beste resultaat
loadMovie("image.jpg", _root.pic);

dit is nu mijn code, plus een mc die pic heet. Het klopt nog niet, want wat is de back_mc dan?

wood
%Europe/Berlin %652 %2005, 16:40
sorry, ben echt zo'n n00b hierin, het lukt me gewoon niet. Zou je anders me een .fla kunnen sturen? Of in ieder geval uitleggen wat ik met de var "back_mc" moet doen?
thnx

Laiverd
%Europe/Berlin %660 %2005, 16:50
back_mc is gewoon een movieclip ter grootte van je stage (of ter grootte van het gebied waarbinnen je de afbeeldingen wilt centreren); die movieclip geeft dus gewoon het gebied aan waarbinnen je je afbeeldingen wilt centreren. Als dat je hele stage is, maak je 'm zo groot als de stage en zet je 'm er midden op. Die zet je in elk geval onder pic, want anders zie je je afbeeldingen niet meer ;)

Verder moet je wel de volgorde even in de gaten houden. Mijn code werkt pas wanneer de afbeelding geladen is; je zult dus een preloader moeten maken om dat te controleren. Globaal ziet het er dan als volgt uit:

// movie laden
loadMovie("image.jpg", _root.pic);
// preloader starten
_root.pic.onEnterFrame = function(){
// geladen bytes;
l = this.getBytesLoaded();
// totaal aantal bytes te laden
t = this.getBytesTotal();
// checken of die gelijk zijn en t ook groter dan 4
if(l == t && t > 4){
// de afbeelding is geladen, dus we kunnen 'm positioneren (de code van hierboven dus)
hCenter = (back_mc._x + back_mc._width)/2;
vCenter = (back_mc._y + back_mc._height)/2;
pic._x = Math.round((hCenter - pic._width)/2);
pic._y = Math.round((vCenter - pic._height)/2);
// de loop moet weer gestopt
delete this.onEnterFrame;
}
}Hou wel even in de gaten waar back_mc staat t.o.v. de tijdlijn van pic. Waarschijnlijk wordt back_mc iets als _parent.back_mc in bovenstaande code.

John
[EDIT] Er zat een foutje in de code. Moet zijn t = this.getBytesTotal();

wood
%Europe/Berlin %676 %2005, 17:14
zou je je .fla kunnen mailen, dan kan ik even zien hoe je het hebt gedaan?

Laiverd
%Europe/Berlin %680 %2005, 17:20
Ik heb hier geen fla ;) Bovenstaande code gewoon even uit het hoofd ingeklopt. Maar wat is het probleem?? Begin nou gewoon even met een lege fla. Twee movieclips maken, 'pic' en 'back_mc', code copy pasten in eerste frame en je fla opslaan in dezelfde directory als je jpg afbeelding. Dan zou het moeten werken. Als je iets niet snapt; gewoon even melden wat het is. Als het niet werkt, beschrijf dan wat er precies niet werkt en wat je hebt gedaan. Vergeet niet de instancenames toe te kennen; en wees precies want een typefout is zo gemaakt.

John

wood
%Europe/Berlin %683 %2005, 17:24
de mc 'back_mc' is 550 bij 400 px, zo groot als een standaard stage dus. De mc 'pic' heb ik willekeurig 100x100px gemaakt. de code is gepasted in frame 1.
De foto wordt nu rechts van het midden geladen, klopt nog niet helemaal.

wood
%Europe/Berlin %684 %2005, 17:26
o en ik krijg nu alleen maar het linksbovenste kwart van de foto te zien

Laiverd
%Europe/Berlin %689 %2005, 17:33
Ik zie net dat ik twee foutjes heb gemaakt. Je kunt nl. niet de onEnterFrame() aan pic hangen als je er een jpg (of wat anders) in laadt. Dus je moet even en apart movieclipje maken. Verder stond een haakje verkeerd in de twee regels waat de _x en _y worden gezet, waardoor ie inderdaad linksboven en iets buiten beeld werd gezet. Dit is de goede code:
// movie laden
loadMovie("image.jpg", _root.pic);
// even preloader clipje maken
_root.createEmptyMovieClip("preloader_mc", 0);
// preloader starten
preloader_mc.onEnterFrame = function() {
// geladen bytes;
l = _root.pic.getBytesLoaded();
// totaal aantal bytes te laden
t = _root.pic.getBytesTotal();
// checken of die gelijk zijn en t ook groter dan 4
if (l == t && t > 4) {
// de afbeelding is geladen, dus we kunnen 'm positioneren (de code van hierboven dus)
hCenter = (back_mc._x + back_mc._width) / 2;
vCenter = (back_mc._y + back_mc._height) / 2;
_root.pic._x = Math.round(hCenter - _root.pic._width / 2);
_root.pic._y = Math.round(vCenter - _root.pic._height / 2);
// de loop moet weer gestopt; hier door het preloader clipje te verwijderen
_root.preloader_mc.removeMovieClip();
}
};John

wood
%Europe/Berlin %692 %2005, 17:37
hij staat nu nog niet in het midden, de code moet echt in frame 1 van de stage staan toch? Btw Hoe groter ik de mc 'pic' maak, hoe groter de afbeelding wordt.

Laiverd
%Europe/Berlin %706 %2005, 17:57
Ja de code moet gewoon in frame 1 staan. En pic kan gewoon een lege movieclip zijn; die heeft dus helemaal geen afmetingen. Het maakt ook niet uit waar je 'm op de stage neerzet; als ie er maar staat ;).
Als ie nog niet in het midden staat, moet je de code even nauwkeurig nalopen; dan heb je gewoon ergens een type fout gemaakt.

Post anders de code die je nu gebruikt even (copy paste > niet overtypen).

John

wood
%Europe/Berlin %719 %2005, 18:16
// movie laden
loadMovie("image.jpg", _root.pic);
// even preloader clipje maken
_root.createEmptyMovieClip("preloader_mc", 0);
// preloader starten
preloader_mc.onEnterFrame = function() {
// geladen bytes;
l = _root.pic.getBytesLoaded();
// totaal aantal bytes te laden
t = _root.pic.getBytesTotal();
// checken of die gelijk zijn en t ook groter dan 4
if (l == t && t > 4) {
// de afbeelding is geladen, dus we kunnen 'm positioneren (de code van hierboven dus)
hCenter = (back_mc._x + back_mc._width) / 2;
vCenter = (back_mc._y + back_mc._height) / 2;
_root.pic._x = Math.round(hCenter - _root.pic._width / 2);
_root.pic._y = Math.round(vCenter - _root.pic._height / 2);
// de loop moet weer gestopt; hier door het preloader clipje te verwijderen
_root.preloader_mc.removeMovieClip();
}
};

dit is de code nu.
ik ga nu even eten brb

Laiverd
%Europe/Berlin %724 %2005, 18:22
De code is wel goed ;) Als het goed is heb je in je fla:
1. op de onderste layer een movieclip ter grootte van je stage en met de instancename 'back_mc'
2. op de layer daarboven een lege movieclip met de instancename 'pic'
3. op de layer daarboven dat actionscript.

Verder staat je fla in dezelfde directory als je image.jpg.

Check die dingen nog even.

John

wood
%Europe/Berlin %765 %2005, 19:22
jup, en dan is dit het resultaat:

http://www.denkstof.com/centertest.swf

Laiverd
%Europe/Berlin %808 %2005, 20:23
Zet je fla (incl. foto) maar even online; dan kijk ik wel even. Wel even zippen; just in case.

John

wood
%Europe/Berlin %842 %2005, 21:13
http://www.denkstof.com/centertest.fla.zip

here you are

Laiverd
%Europe/Berlin %868 %2005, 21:51
E.e.a. heeft ermee te maken dat je het centerpoint van je movieclip in het midden hebt gezet. De code gaat ervan uit dat het registratiepunt linksboven staat (standaard instelling). Je kunt e.e.a. aanpassen door:
- te dubbelklikken op back_mc (je zit dan in het symbool zelf)
- het align-panel te openen
- in dat panel 'align to stage' aan te zetten
- dan de knoppen 'align left edge' en 'align top edge' te klikken
- dan ga je weer terug naar je stage; de movieclip is nu verschoven, en die moet je weer op de coordinaten 0,0 zetten. Dat kun je doen door back_mc te selecteren en en de getallen in het properties panel in te tikken, of door het de stappen hierboven in het align-panel nog een keer te doen.

John

wood
%Europe/Berlin %884 %2005, 22:13
heeeeeeeeehee het werkt. Ik kan weer verder.
Hartstikke bedankt voor alle moeite.

Laiverd
%Europe/Berlin %885 %2005, 22:14
Graag gedaan. Ik hoop dat je er ook wat wijzer van bent geworden ;)

John

wood
%Europe/Berlin %888 %2005, 22:19
zeker,
heb namelijk allerlei sites voor kunstenaars/fotografen gemaakt met php en mysql met een CMS, alleen nooit met flash. Dit soort dingen vormen echt obstakels dan. Maar ik zal me meer moeten gaan verdiepen in actionscript, heb ook Actionscriptboek van O'Reilly gekocht, daar kan ik wel wat mee denk ik. Anders hier ;)

Laiverd
%Europe/Berlin %890 %2005, 22:21
Flash heeft ook gewoon wat eigenaardigheden (zoals het coordinaten systeem en de omgang met registratiepunten), die je alleen maar kunt leren kennen door er veel mee aan de gang te gaan. Er staat veel in de handleiding, maar dit soort eigenaardigheden zit vaak weer diep verstopt, als het er al in staat. Ik neem aan dat je het boek van Moock hebt gekocht?? Als dat zo is; goede keuze. Succes.

John

wood
%Europe/Berlin %893 %2005, 22:26
jup die heb ik. kGa wel wat kloten deze vakantie.
thnx

hockmen
%Europe/Berlin %621 %2005, 14:55
ok ik heb dit gedaan. dus dit is mijn code tot nu.


//stop even totdat de boel is ingeladen
stop();
//nieuw loadVars object
kv = new LoadVars();
//laad het nieuwe nieuws in
var nummer = _global.x
kv.load("portfolio.php?mode=contenttekst&categorie=web&ident="+nummer, lv);
//check of het is gelukt
kv.onLoad = function(ok) {
//zo ja
if (ok) {
//zet het gevraagde item in tekstvelden
titel.htmlText = kv.titel;
appz.htmlText = kv.appz;
beschrijving.htmlText = kv.beschrijving;
sizes.htmlText = kv.sizes;

var maxFotoWidth = 269;
var maxFotoHeight = 188;
resizeFotos(holder, maxFotoHeight, maxFotoWidth);

//speel weer verder
play();
//zo niet
} else {
//vertel dat het niet is gelukt
titel.htmlText = "loading failed";
//en speel toch verder
play();
}
};
function resizeFotos(holder, height, width) {
//grootte checken en aanpassen
trace("resize "+holder._width+" "+holder._height);
if (holder._height>height) {
var verkleining = height/holder._height*100;
//het verkleinings precentage
holder._height = height;
holder._width = verkleining*holder._width/100;
}
if (holder._width>width) {
var verkleining = width/holder._width*100;
//het verkleinings precentage
holder._height = verkleining*holder._height/100;
holder._width = width;
}
trace("resize "+holder._width+" "+holder._height);

// movie laden
// movie laden
loadMovie(kv.picture, _root.holder);
// even preloader clipje maken
_root.createEmptyMovieClip("preloader_mc", 0);
// preloader starten
preloader_mc.onEnterFrame = function() {
// geladen bytes;
l = _root.holder.getBytesLoaded();
// totaal aantal bytes te laden
t = _root.holder.getBytesTotal();
// checken of die gelijk zijn en t ook groter dan 4
if (l == t && t > 4) {
// de afbeelding is geladen, dus we kunnen 'm positioneren (de code van hierboven dus)
hCenter = (cen._x + cen._width) / 2;
vCenter = (cen._y + cen._height) / 2;
_root.holder._x = Math.round(hCenter - _root.holder._width / 2);
_root.holder._y = Math.round(vCenter - _root.holder._height / 2);
// de loop moet weer gestopt; hier door het preloader clipje te verwijderen
_root.preloader_mc.removeMovieClip();
}
};


}


zoals je ziet verklein ik de ingeladen foto(dit doet hij) maar centreren in de holder niet.
ik heb de holder in een layer boven de cen (center_mc)geplaats. het centreren is dus een probleem.

alvast bedankt.
hockmen

theFlashWizard
%Europe/Berlin %661 %2005, 15:52
waarom loadMovie ipv de in dit geval veel handigere moviecliploader class?
daarin zit een preloader systeem ingebouwt..