S silfver Medlem sedan apr. 2003 12 679 inlägg Frågan 3 mars 2007 14:23 #1 Jag har den här koden som läser in en bild i ett movieclip jag gjort:
x.onLoad = function() {
var images:Array = this.firstChild.childNodes;
for(i=0;i<images.length;i++) {
urls.push(images[i].attributes.url);
captions.push(images[i].attributes.caption);
}
holder.loadMovie(urls[0]);
caption.text = captions[0];
current = 0;
}
Problemet är att själva rutan är 800x600 pixlar. Läser jag in en stor bild, låt säga 1280x1024 så ser jag ju bara en bråkdel av bilden.
Hur ska man skriva så att bilden anpassar sig till 800x600? Jag vill inte sätta måttet på bilden till 800x600 så att proportionerna blir fel utan jag vill fortfarande få samma proportioner i bilden.
Förstår ni hur jag menar? :)
Först och främst bör du köra MovieClipLoader för att kunna kolla när bilden laddat...den måste vara laddad innan du kan kolla storlek.
Lite kod:
var my_mcl:MovieClipLoader=new MovieClipLoader();
var myListener:Object = new Object();
myListener.owner=this;
myListener.onLoadInit = function (target_mc:MovieClip) {
var imgW:Number=800;
var imgH:Number=600;
if (w>imgW) {
xPc = (w*100)/imgW;
}
if (h>imgH) {
yPc = (h*100)/imgH;
}
if (xPc>yPc) {
target_mc._width /= (xPc/100);
target_mc._height /= (xPc/100);
} else {
target_mc._width /= (yPc/100);
target_mc._height /= (yPc/100);
}
};
my_mcl.addListener(myListener);
my_mcl.loadClip(url, holder);
En liten varning....om du publicerar för Flash 8 kan bilderna se lite fula ut då de skalas om du inte omvandlar de till ett bitmap object med smoothing.
Lite info om problemet och kod för att lösa det:
http://www.kaourantin.net/2005/12/dynamically-loading-bitmaps-with.html
S silfver Medlem sedan apr. 2003 12 679 inlägg Tack för koden! Men jag får det inte riktigt att fungera. Vart skall den appliceras? Detta är all min kod:
var x:XML = new XML();
x.ignoreWhite = true;
var urls:Array = new Array();
var captions:Array = new Array();
var current:Number;
x.onLoad = function() {
var images:Array = this.firstChild.childNodes;
for(i=0;i<images.length;i++) {
urls.push(images[i].attributes.url);
captions.push(images[i].attributes.caption);
}
holder.loadMovie(urls[0]);
caption.text = captions[0];
current = 0;
}
x.load("images.xml");
previous.onRelease = function() {
if(current > 0) {
current--;
holder.loadMovie(urls[current]);
caption.text = captions[current];
}
}
next.onRelease = function() {
if(current < urls.length-1) {
current++;
holder.loadMovie(urls[current]);
caption.text = captions[current];
}
}
Kanske detta funkar:
var x:XML = new XML();
x.ignoreWhite = true;
var urls:Array = new Array();
var captions:Array = new Array();
var current:Number;
var imgNum:Number;
x.onLoad = function() {
var images:Array = this.firstChild.childNodes;
for(i=0;i<images.length;i++) {
urls.push(images[i].attributes.url);
captions.push(images[i].attributes.caption);
}
loadImg(0);
caption.text = captions[0];
current = 0;
imgNum=0;
}
x.load("images.xml");
function loadImg(num:Number){
var my_mcl:MovieClipLoader=new MovieClipLoader();
var myListener:Object = new Object();
myListener.owner=this;
myListener.num=num;
myListener.onLoadInit = function (target_mc:MovieClip) {
var imgW:Number=800;
var imgH:Number=600;
if (w>imgW) {
xPc = (w*100)/imgW;
}
if (h>imgH) {
yPc = (h*100)/imgH;
}
if (xPc>yPc) {
target_mc._width /= (xPc/100);
target_mc._height /= (xPc/100);
} else {
target_mc._width /= (yPc/100);
target_mc._height /= (yPc/100);
}
this.owner.caption.text = this.owner.captions[this.num];
this.owner.loadImg(this.owner.currImg);
};
my_mcl.addListener(myListener);
my_mcl.loadClip(urls[num], holder);
currImg++;
}
previous.onRelease = function() {
if(current > 0) {
current--;
holder.loadMovie(urls[current]);
caption.text = captions[current];
}
}
next.onRelease = function() {
if(current < urls.length-1) {
current++;
holder.loadMovie(urls[current]);
caption.text = captions[current];
}
}
Inte så konstigt då jag ser att jag kallade variabeln "imgNum" för "currImg" i loadImg funktionen. Prova och byt ut dem och om det inte funkar berätta gärna vad som händer och eventuella felmeddelanden.