Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-12-2011, 11:46   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2010
Beiträge: 64
Bild extern laden und in MC umwandeln

Ich möchte Bilder von extern laden. Das klappt auch wunderbar. collection.php gibt dabei nen String zurück mit den ganzen Bildern die geladen werden sollen.

PHP-Code:
pictureLoader.dataFormat URLLoaderDataFormat.VARIABLES
pictureLoader
.load(new URLRequest("collection.php"))
pictureLoader.addEventListener(Event.COMPLETEloadPicturesToArray)


function 
loadPictures(CollectionPictures)
{    
    for(var 
i:int=0i<CollectionPictures.lengthi++) {
        
        var 
pictureLoader:Loader = new Loader(); 
        var 
pictureUrlReq:URLRequest = new URLRequest(CollectionPictures[i]); 
        
pictureLoader.load(pictureUrlReq); 
        
        
pictureLoader.name CollectionPictures[i];
        
        if(
CollectionPictures.length>4//if less than 4 pictures degreace the space
        
{
            
pictureLoader.130*i;
        } else {
            
pictureLoader.400+130*i;
        }
        
        
pictureLoader.300;
        
        
// add new event for every picture
        
pictureLoader.addEventListener(MouseEvent.MOUSE_OVER,makeBigger);
        
pictureLoader.addEventListener(MouseEvent.MOUSE_OUT,makeSmaller);
        
pictureLoader.addEventListener(MouseEvent.CLICK,showBigPicture);
        
        
collectionSlideshow.addChild(pictureLoader); // load picture on stage
        
        
collectionSlideshow.getChildByName(CollectionPictures[i]).scaleY .5;
        
collectionSlideshow.getChildByName(CollectionPictures[i]).scaleX .5;
        
collectionSlideshow.getChildByName(CollectionPictures[i]).alpha .5;
    }

Ich würde jetzt gerne jedem Bild einen bestimmten Instance-Name zuweisen um den später weiter zu verwenden. Dafür muss ich das Bild ja in ein MC umwandeln. Geht das und wenn ja, wie? Oder würde man dafür besser einen MC designen und das Bild in eine Instance von diesem MC laden?

Danke!
magic_al ist offline   Mit Zitat antworten
Alt 26-12-2011, 12:11   #2 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zitat:
Zitat von magic_al Beitrag anzeigen
Ich würde jetzt gerne jedem Bild einen bestimmten Instance-Name zuweisen um den später weiter zu verwenden. Dafür muss ich das Bild ja in ein MC umwandeln. Geht das und wenn ja, wie?
Nein, das geht nicht (MovieClips und Loader bzw. Bitmaps sind nicht kompatibel)! Das ist aber auch garnicht nötig, weil MCs (genauso wie Instanznamen und getChildByName) in diesem Fall genauso wie 99% aller Fälle in AS3 unnötig sind.

Das geladene Bild (pictureLoader.content) bzw. die Loader-Instanz (pictureLoader), mit der du es lädst, sind doch bereits Referenzen. Mit diesen kannst Du arbeiten:
ActionScript:
  1. pictureLoader.scaleY = .5;
  2. pictureLoader.scaleX = .5;
  3. pictureLoader.alpha = .5;
Und sie zur späteren Verwendung direkt in ein Array schreiben:
ActionScript:
  1. var pictures:Array = [];
  2.  
  3. // In Deiner Schleife:
  4. pictures.push(pictureLoader);

P.S.: Methoden- und Variablennamen sollten in AS3 immer mit einem Kleinbuchstaben anfangen. Große Anfangsbuchstaben sind den Klassen vorbehalten.

Zudem sollten Variablen und Funktionen immer typisiert werden. Also:
ActionScript:
  1. function loadPictures( collectionPictures:Array ):void  {
  2. //...
  3.  
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (26-12-2011 um 12:13 Uhr)
Martin Kraft ist gerade online   Mit Zitat antworten
Alt 26-12-2011, 12:48   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2010
Beiträge: 64
Danke für die Antwort, hat mir sehr geholfen.
magic_al ist offline   Mit Zitat antworten
Alt 26-12-2011, 15:22   #4 (permalink)
Neuer User
 
Registriert seit: Dec 2010
Beiträge: 64
Proportionale Größenänderung von geladenen Bildern

Ich habe folgenden Code um Bilder auf meine Stage zu laden:

PHP-Code:
for (var i:int 0i<galleryXML.IMAGE.length(); i++){
                
                
pictureLoader = new Loader(); 
                
pictureUrlReq = new URLRequest(galleryXML.IMAGE[i].URL); 
                
pictureLoader.load(pictureUrlReq); 
                
pictureLoader.name galleryXML.IMAGE[i].URL;
                
pictureLoader.addPictureToX;
                
addPictureToX addPictureToX 10 Number(galleryXML.IMAGE[i].WIDTH);
                
                
sec_gallery_slide.addChild(pictureLoader); // load picture on stage
                
            
}; 
Ich würde jetzt gerne jedes Bild was rein geladen wird verkleinern.

pictureLoader.width und height funktionieren beide nicht bei mir. Mit ScaleX und ScaleY kann ich nur relative angaben machen. Das Problem ist, dass die Bilder alle unterschiedliche groß sind.

Ich möchte jetzt, dass alle Bilder, auf eine Höhe von 150 Pixel scaliert werden und die Breite proportional dazu angepasst wird. Gibt es da einen einfachen Weg?
magic_al ist offline   Mit Zitat antworten
Alt 26-12-2011, 17:07   #5 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
// zuerst das event abwarten, das dir meldet, dass das bild komplett geladen wurde,
// danach die gewünschte breite setzen
xxx.width = 150;
// die dazu passende höhe hat die selbe scalierung wie die breite
xxx.scaleY = xxx.scaleX;

// bzw. natürlich
xxx.height = 150;
xxx.scaleX = xxx.scaleY;
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (26-12-2011 um 17:12 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 26-12-2011, 21:04   #6 (permalink)
Neuer User
 
Registriert seit: Dec 2010
Beiträge: 64
Danke, das ist genau das was ich brauche. Ich habe den complete Event jetzt so eingerichtet:

PHP-Code:
pictureLoader.contentLoaderInfo.addEventListener(Event.COMPLETEadjustChild); 
Ich weiß aber nicht, wie ich in adjustChild() auf das entsprechende Child zugreifen kann.

PHP-Code:
getChildByName(pictureLoader.name
Gibt mir einen Fehler aus, dass der Wert nicht existiert, wobei ich vor dem Laden die name-Eigenschaft mit

PHP-Code:
pictureLoader.name galleryXML.IMAGE[i].URL
gesetzt habe.

Wie handel ich das?
magic_al ist offline   Mit Zitat antworten
Alt 26-12-2011, 23:05   #7 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.041
Die Funktion erhält einen Parameter, der ein Event Objekt ist, dieses kennt den ".target" also Auslöser des Events.
__________________
anbei Grüße vom milchreis: Viva la [Silb]
"Selbst wenn uns nur noch der Zynismus treibt, wir werden trotzdem einfach immer weiter gehen!"

[Von null auf Flash in einem Klick.] <<< klick
milchreis ist offline   Mit Zitat antworten
Alt 26-12-2011, 23:21   #8 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
Zitat:
Zitat von magic_al Beitrag anzeigen
Ich weiß aber nicht, wie ich in adjustChild() auf das entsprechende Child zugreifen kann.
und ich weiss nicht, warum du das möchtest ;-)
die referenz auf deinen loader heisst pictureLoader - fertig. mit namen arbeitet man möglichst garnicht und wohin du deinen loader zur ansicht add'est ist erstmal wurscht.

zur programmierung allgemein:
immer ein auge in der flash-hilfe lassen. die ist beim programm dabei und im internet
flash.display.Loader - ActionScript® 3.0 Referenzhandbuch für die Adobe® Flash®-Plattform
da hat's auch immer beispiele dabei, an denen man sich ganz gut orientieren kann.



nur am rande, auf die bühnenobjekte greift man z.b. so zu (wenn man die referenzen nicht mehr hat):
sec_gallery_slide.addChild(pictureLoader);
trace(sec_gallery_slide.numChildren); // wieviele bühnenobjekte gibt es in sec_gallery_slide
trace(sec_gallery_slide.getChildAt(0)); // das wäre dann das unterste in sec_gallery_slide
usw.

pictureLoader.name="fritz";
// du kannst dem kind einen namen geben und danach den namen auch wieder auslesen, aber wozu? du hast die referenz auf das objekt!
// du versuchst das url als einen namen zu verwenden. mit all den sonderzeichen könnte das problematisch sein .. und nochmal, ist vollkommen unnötig.

xxx.getChildByName( pictureLoader.name );
// bei welchem xxx-bühnenobjekt fragst du nach einem objekt mit diesem namen nach?
// wegen
sec_gallery_slide.addChild( pictureLoader );
// sollte gehen
sec_gallery_slide.getChildByName( pictureLoader.name );
// und das ist - wie wir inzwischen alle wissen - niemand anderes als: pictureLoader :-)



private var pictureLoader:Loader;
..
pictureLoader.addEventListener(Event.COMPLETE, completeHandler); // lass contentLoaderInfo weg

private function completeHandler(event:Event):void {
var loader:Loader = Loader(event.target);
trace(event.target);
trace(loader); // wenn mehrere loader die selbe function benützen, dann den event auslösenden loader nehmen
trace(pictureLoader); // andernfalls diese referenz gilt in deiner kompletten klasse, also geht's hier natürlich auch noch
..
// und wichtig!! alle events müssen auch wieder entfernt werden. sonst wächst der speicherbedarf immer mehr.
pictureLoader.removeEventListener(Event.COMPLETE, completeHandler);
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (26-12-2011 um 23:45 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 27-12-2011, 09:51   #9 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Ich muss hgseib an 2 Stellen korrigieren:
Zitat:
Zitat von hgseib Beitrag anzeigen
die referenz auf deinen loader heisst pictureLoader - fertig. mit namen arbeitet man möglichst garnicht und wohin du deinen loader zur ansicht add'est ist erstmal wurscht.
Da pictureLoader aber in dieser Schleife mehrfach überschrieben wird, dürfte man damit bei Event.COMPLETE nicht mehr viel anfangen können...

Nein, in diesem Fall ist man darauf angewiesen die Referenz auf den Loader aus dem Event zu rekonstruieren:[AS]var loader:Loader =

Zitat:
Zitat von hgseib Beitrag anzeigen
private var pictureLoader:Loader;
..
pictureLoader.addEventListener(Event.COMPLETE, completeHandler); // lass contentLoaderInfo weg
Nein. contentLoaderInfo ist hier notwendig, da Event.COMPLETE eben von der LoaderInfo-Instanz ausgelöst wird und nicht vom Loader selbst:
ActionScript:
  1. pictureLoader.addEventListener(Event.COMPLETE, completeHandler);
  2.  
  3. //...
  4.  
  5. function completeHandler(e:Event):void {
  6.    var loader:Loader = LoaderInfo(e.target).loader;
  7.    //...
  8. }

@magic_al:
Ich werde Diesen Thread mal mit Deinem letzten zusammenfassen, da es ja im Grunde noch um dasselbe Problem geht, und würde Dich bitte das in Zukunft genauso zu handhaben und nicht für jeden Aspekt einen neuen Thread aufzumachen - Danke!
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (27-12-2011 um 09:52 Uhr)
Martin Kraft ist gerade online   Mit Zitat antworten
Alt 27-12-2011, 16:12   #10 (permalink)
Neuer User
 
Registriert seit: Dec 2010
Beiträge: 64
Danke an alle für die Antworten!

Martin mit deinem Code hats dann super geklappt, verstanden hab ichs auch. Danke.
magic_al ist offline   Mit Zitat antworten
Alt 27-12-2011, 16:27   #11 (permalink)
Neuer User
 
Registriert seit: Dec 2010
Beiträge: 64
PHP-Code:
public function adjustChild(event:Event):void {
            
            var 
loader:Loader LoaderInfo(event.target).loader;

Wie kann ich jetzt die x und y Eigenschaften von meinem loader auslesen. Ich kann mir zwar loader.name ausgeben lassen. aber loader.x oder y ist immer 0.GetChildByName gibt einen Fehler.
magic_al ist offline   Mit Zitat antworten
Alt 28-12-2011, 00:19   #12 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zeig mal den kompletten Code!
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist gerade online   Mit Zitat antworten
Alt 28-12-2011, 11:22   #13 (permalink)
Neuer User
 
Registriert seit: Dec 2010
Beiträge: 64
PHP-Code:
package com.abubu {
    
    
import flash.display.*;
    
import flash.events.*; 
    
import flash.net.*;
    
import fl.transitions.*;
    
    public class 
sec_gallery extends flash.display.MovieClip {

        public function 
sec_gallery() {
            
        
            
galleryXMLLoader.load(new URLRequest(galleryXMLURL));
            
galleryXMLLoader.addEventListener(Event.COMPLETEloadXML);
            
        }
        
        public var 
galleryXML:XML;
        public var 
galleryXMLLoader:URLLoader = new URLLoader();
        public var 
galleryXMLURL:String "http://localhost/xml_collection.php";
        
        public var 
speed:Number;
        public var 
pictureLoader:Loader;
        public var 
pictureUrlReq:URLRequest;
        public var 
addPictureToX:Number 0;
        public var 
letztesBildIstGeladen:Boolean false;
        
        private function 
loadXML(event:Event):void {
            
            
galleryXML = new XML(event.target.data);
            
            
//bilder in slide laden
            
for (var i:int 0i<galleryXML.IMAGE.length(); i++){
                
                
pictureLoader = new Loader(); 
                
pictureUrlReq = new URLRequest(galleryXML.IMAGE[i].URL); 
                
pictureLoader.load(pictureUrlReq); 
                
pictureLoader.name String(i);

                
pictureLoader.contentLoaderInfo.addEventListener(Event.COMPLETEadjustChild);
                
                
sec_gallery_slide.addChild(pictureLoader);

            }
            
        }
        
        public function 
adjustChild(event:Event):void {
            
            var 
loader:Loader LoaderInfo(event.target).loader;
        
        }
        

// ab hier ist ein scroll effekt eingefügt, der mit dem eigentlichen laden der bilder nichts zu tun hat.
    
        
public function scrollEvent(evt:Event):void {
            
            if(
mouseX<200){
                
speed = (200 mouseX)/10
            
} else if(mouseX>700){
                
speed = -1*(mouseX 700)/10
            
} else {
                
speed 0;
            }
            
            
sec_gallery_slide.+= speed;
            if(
sec_gallery_slide.x>50){
                
sec_gallery_slide.50;
            } else if(
sec_gallery_slide.x< (stage.stageWidth sec_gallery_slide.width 50 )){
                
sec_gallery_slide.= (stage.stageWidth sec_gallery_slide.width 50)
            }
            
        }
                        
    }
    

magic_al ist offline   Mit Zitat antworten
Alt 28-12-2011, 11:58   #14 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
  • Zitat:
    Zitat von magic_al Beitrag anzeigen
    Wie kann ich jetzt die x und y Eigenschaften von meinem loader auslesen. Ich kann mir zwar loader.name ausgeben lassen. aber loader.x oder y ist immer 0.
    Logisch. Wenn Du x und y nicht auf andere Werte setzt, bleiben sie auf dem Standardwert 0 sein!

  • Zitat:
    Zitat von magic_al Beitrag anzeigen
    GetChildByName gibt einen Fehler.
    Mal abgesehen davon, dass man diese Methode (aus den oben genannten Gründen) eh nur in Ausnahmefällen verwenden sollte:
    Ihr Name beginnt zum einen einen kleinen Anfangsbuchstaben und zum anderen gibt es diese Methode nur bei DisplayObjectContaineren...

    Wo hast Du getChildByName denn wie (und warum) angewandt und welche Fehlermeldung hast Du bekommen?
    Fehlermeldungen sind zum lesen da!

  • Wo deklarierst Du eigentlich sec_gallery_slide?

  • Du solltest Dich mal mit den Coding Conventions beschäftigen! Wenn man die einhält, wird es wesentlich einfacher für andere den Code zu lesen. Darin steht dann z.B. dass Klassennamen immer mit einem Großbuchstaben beginnen und camelCased geschrieben werden sollten. _s gibt es eigentlich nur in KONSTANTEN_NAMEN.
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (28-12-2011 um 13:02 Uhr)
Martin Kraft ist gerade online   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Skalierung von Geladenen Bildern hothead89 ActionScript 3 3 04-03-2010 07:45
Registrierungspunkte bei geladenen Bildern sejau ActionScript 3 6 17-07-2009 15:34
Crossfade mit dyn. geladenen Bildern wangman ActionScript 1 4 15-11-2006 15:52
Probleme mit geladenen Bildern xoos ActionScript 1 5 22-01-2006 17:04
yugop mit dynamisch geladenen Bildern? bit ActionScript 1 15 05-09-2004 12:29


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:34 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele