Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 19-05-2010, 13:43   #1 (permalink)
Neuer User
 
Registriert seit: May 2010
Beiträge: 13
Anfängerfrage: anzuzeigende Bildgröße von externem Bild ändern

Hi in die Runde,

ich versuche mich als langjähriger PHP-Scripter seit kurzem an AS3 mit folgender Aufgabe:

Ich möchte externe Bilder verschiedener Größen einlesen und in eine Art blätterbare Fotogalerie einbinden.

Das Einlesen der Bilder klappt, auch voll dynamisch, doch die verschiedenen Größen stellen mich gerade vor ein Problem, wenn ich ein externes Bild lade und die Größe ändern will, verschwindet es schlicht in der Anzeige. Lasse ich mir die Größe des Bildes (width oder height) ausgeben, steht diese auf 0.

Hier der aktuelle vereinfachte Script zum zeigen dieses Problems:

var title:TextField = new TextField();
title.name="TextFeld";
title.text="Dies ist ein Test";
var pict:Loader = new Loader();
var url:URLRequest = new URLRequest("banana.jpg");
pict.load(url);
pict.name = "banana";
this.addChild(title);
title.x=0;
title.y=200;
this.addChild(pict);
pict.width=400;
pict.x=100;
pict.y=0;

Der Stolperstein ist der Befehl "pict.width=400;", der dafür sorgt, das das Bild nicht mehr angezeigt wird. Nehme ich den raus, wird das Bild in der Originalgröße angezeigt.
Was mich verwirrt ist, das die Positionierung funktioniert, aber die Größenangabe zum verkleinern oder vergrößern nicht zu gehen schein.

Wer mag mir hier einen Rat geben?

Vielen Dank

Rainer
Sunyani ist offline   Mit Zitat antworten
Alt 19-05-2010, 13:56   #2 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Du darfst Dein Bild erst skalieren wenn es geladen ist. Vorher ist die Breite nämlich nicht definiert und wenn sie umgerechnet wird wird scaleX und scaleY auf den Defaultwert 0 gesetzt.

Also: Eventlistener zur Loaderklasse hinzufügen und das Bild erst dann skalieren, wenn es da ist!
__________________
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 offline   Mit Zitat antworten
Alt 19-05-2010, 14:17   #3 (permalink)
Neuer User
 
Registriert seit: May 2010
Beiträge: 13
Hi Martin,

danke für Deine Antwort. Darf ich Dir noch ein paar Verständnisfragen dazu stellen? (irgendwie komme ich mir grad vor, als würde ich durch ein Schlüsselloch einen Hausflur tapezieren)

Es geht mir darum ein Bild in der Breite (und damit in der Höhe) anzupassen, wenn es falsche Werte aufweist.

Welcher Befehl genau sorgt für das Laden, nachdem die Höhe / Breite gesetzt werden kann? Ich dachte, es wäre das addChild. Das was du schreibst, deutet darauf hin, das das noch gar nicht ausgeführt ist, wenn ich die Breite ändere, richtig? Also ein addeventlistener, damit ich erst dann die Breite ändere, wenn es geladen ist, richtig?

Urks, nun habe ich mir gerade die Hilfe dazu durchgelesen, dann der Parametertyp (wo finde ich die möglichen Typen?), dann der Name (gleiche Frage?) und dann dahinter das was dann ausgeführt werden soll, also die Breitenänderung, richtig so?

Also pict.addeventlistener(Event,Event.name, pict.width=300);

Danke für Deine Hilfe

Rainer

Geändert von Sunyani (19-05-2010 um 14:28 Uhr)
Sunyani ist offline   Mit Zitat antworten
Alt 19-05-2010, 14:24   #4 (permalink)
Neuer User
 
Benutzerbild von RAMSEI
 
Registriert seit: Oct 2001
Ort: Bayreuth
Beiträge: 455
erst laden und nach onComplete kannst du die werte ändern.


gruß sascha
__________________
Konservative sind sehr für den Fortschritt sofern der auf der Stelle tritt. ( Norman Mailer )
RAMSEI ist offline   Mit Zitat antworten
Alt 19-05-2010, 14:26   #5 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Für das Laden sorgt logischerweise:
Code:
var url:URLRequest = new URLRequest("banana.jpg");
pict.load(url);
Das ist aber nicht das Problem, das Problem ist die Ladekontrolle. Du musst Dir das so vorstellen:

In dem Augenblick wo der obengenannte Befehl aus geführt wird, sendet Flash eine Anfrage an den Server und der beginnt die Daten des Bildes zu senden. Da wir auf Clientseite sind und das ganze asynkron geschieht, mach Flash einfach weiter während der Server noch Daten sendet (Sonst müsste ja der Flashfilm einfrieren bis die sagen wir 3MB Deines Bildes geladen sind).

Das heißt aber, dass zu dem Zeitpunkt wo Du die Größe setzt willst noch gar kein Bild da ist.

Du musst also einen EventListener hinzufügen, der wartet bis dass Bild komplett geladen wurde und es erst dann anzeigt und skaliert. Wie das geht steht in der Flash-Hilfe zur Loader-Klasse.
__________________
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 (19-05-2010 um 14:28 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 19-05-2010, 14:45   #6 (permalink)
Neuer User
 
Registriert seit: May 2010
Beiträge: 13
Hi Martin und Sascha,

soweit verstanden, nun hängt es an der Synthax. Ich füge nun nach dem Load - Befehl den EventListener zu:

pict.addEventListener(Event.COMPLETE, pict.width=200);

und bekomme den Fehler:

1067: Implizite Umwandlung eines Werts des Typs Number in einen nicht verwandten Typ Function.

Kann der zweite Parameter nur eine Funktion sein und nicht der Befehl selbst?

Viele Grüße
Rainer
Sunyani ist offline   Mit Zitat antworten
Alt 19-05-2010, 14:48   #7 (permalink)
Neuer User
 
Benutzerbild von RAMSEI
 
Registriert seit: Oct 2001
Ort: Bayreuth
Beiträge: 455
pict.addEventListener(Event.COMPLETE, pict.width=200);

nee so nicht ..

loader.ddEventListener(Event.COMPLETE, irgendeine_funktion);

function irgendeine_funktion(e:Event):void{

pict.width=200;

}

auf die art...

gruß sascha
__________________
Konservative sind sehr für den Fortschritt sofern der auf der Stelle tritt. ( Norman Mailer )

Geändert von RAMSEI (19-05-2010 um 14:53 Uhr)
RAMSEI ist offline   Mit Zitat antworten
Alt 19-05-2010, 15:03   #8 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
wohl eher so:
PHP-Code:
import flash.display.Loader;
import flash.events.Event;
import flash.net.URLRequest;

var 
pict:Loader = new Loader();
pict.load( new URLRequest("banana.jpg") );

pict.contentLoaderInfo.addEventListener(Event.COMPLETE, function() {
    
//Hier Dein Code

    
addChildpict );
    
pict.name "banana";
    
pict.width 400;
    
pict.100;
    
pict.0;

}); 
__________________
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 (19-05-2010 um 15:04 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 19-05-2010, 15:07   #9 (permalink)
Neuer User
 
Registriert seit: May 2010
Beiträge: 13
Hi Sascha,

wahrscheinlich rollst du schon mit den Augen wegen der vielen Schläuche, mit denen ich jongliere.

Nun sieht mein Script so aus:

function irgendeine_funktion(e:Event):void{

pict.width=200;

}

var title:TextField = new TextField();
title.name="TextFeld";
title.text="Dies ist ein Test";
var pict:Loader = new Loader();
var url:URLRequest = new URLRequest("banana2.jpg");
Loader.addEventListener(Event.COMPLETE, irgendeine_funktion);
pict.load(url);
pict.name = "banana";
this.addChild(title);
title.x=0;
title.y=200;
this.addChild(pict);

und ich bekomme diesen Fehler:

1061: Aufruf für eine möglicherweise nicht definierte Methode addEventListener über einen Verweis mit statischem Typ Class.

Hängt das an dem e:Event ? Oder ist die Funktion falsch deklariert? Wenn ich die swf aufrufe, ist das Bild in groß kurz zu sehen und verschwindet dann ...

DANKE!!!

Rainer

Geändert von Sunyani (19-05-2010 um 15:09 Uhr)
Sunyani ist offline   Mit Zitat antworten
Alt 19-05-2010, 15:08   #10 (permalink)
Neuer User
 
Benutzerbild von RAMSEI
 
Registriert seit: Oct 2001
Ort: Bayreuth
Beiträge: 455
nein ich roll nicht meine Augen, ich bin auch am As3 lernen ..



PHP-Code:
var my_loader:Loader = new Loader();
my_loader.load(new URLRequest("banana.jpg"));
addChild(my_loader);

my_loader.contentLoaderInfo.addEventListener(Event.COMPLETEstartListener);
function 
startListener (e:Event):void{
trace("Loading Completed");
addChild(my_loader.content)

aber ich denk martin seine Lösung ist auch sehr gut verständlich.

gruß sascha
__________________
Konservative sind sehr für den Fortschritt sofern der auf der Stelle tritt. ( Norman Mailer )

Geändert von RAMSEI (19-05-2010 um 15:15 Uhr)
RAMSEI ist offline   Mit Zitat antworten
Alt 19-05-2010, 15:17   #11 (permalink)
Neuer User
 
Registriert seit: May 2010
Beiträge: 13
jepp, das ist es!!!

Ich danke euch!!!!

Rainer
Sunyani ist offline   Mit Zitat antworten
Alt 19-07-2010, 09:40   #12 (permalink)
Neuer User
 
Registriert seit: Jul 2010
Beiträge: 2
Und was tue ich, wenn das Bild in einem Objekt steckt?

Ich erzeuge mittels einer Klasse einen Button (der von MovieClip erbt, per "extends MovieClip"); Dieser enthält ein Bild, ein Shape, einen Rollover-Effekt und ein paar Funktionen. Das funktioniert auch prima.

Wenn ich aber versuche den Button per as3 aus meiner dokument-klasse raus zu skalieren verschwindet er. Die .height und .width-properties sind und bleiben 0, egal was ich mache.

Hier meine Button-Klasse (reduziert aufs wesentliche):

PHP-Code:
package testscript
{
    
//import modules
    
import flash.display.MovieClip;
    
import flash.display.Loader;

    
import flash.net.URLRequest;
    
import flash.net.URLLoader;
    
    
import flash.events.Event;
        
    
//DynamicPicture class
    
public class testpicture extends MovieClip
    
{
        public var 
image:MovieClip;    
        
        
// constructor
        
public function testpicture():void
        
{    
            
image                =   new MovieClip;
            
image.addChild(loadImage());
            
            
// set basic button-functionality
            
this.buttonMode true;
            
this.useHandCursor true;    
        }
        
        
// begin loading image
        
private function loadImage()
        {    
            var 
returnImage:Loader = new Loader();
            
returnImage.load(new URLRequest("chinese.png"));
            
returnImage.contentLoaderInfo.addEventListener(Event.INITfinishedLoading);
            return 
returnImage;    
        }
        
        
// execute when image is fully loaded
        
private function finishedLoading(event:Event):void 
        
{
            
// draw button                
            
this.addChild(image);
        }  
    }

Warum zum Henker kann ich den Button nicht skalieren? Der eventlistener sollte eigentlich doch sicherstellen, dass das Bild bei der Erzeugung des Buttons komplett geladen wird?

Ich habs sogar schon damit versucht, nen eigenen setter dazuzufügen, der so aussah:
PHP-Code:
        public function setWidth(value:Number):void
        
{
            
trace("1: "+this.width);
            
this.width value;
            
trace("2: "+this.width);
        }
        
        public function 
setHeight(value:Number):void
        
{
            
trace("1: "+this.height);
            
this.height value;
            
trace("2: "+this.height);
        } 
Hat auch nichts genutzt. Die trace-Kommandos geben bei 1 und 2 jeweils "0" aus, egal welchen Wert ich als value übergebe.
Forrest_Gimp ist offline   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
physikalische bildgröße vor´m upload ändern figure8 ActionScript 3 2 20-08-2008 17:39
bildgröße bei externem bild wertzut Flash 8 2 31-12-2005 10:23
Bildgröße ändern Rothbarsch Am Rande 3 27-08-2003 15:46
bild geladen abfragen/bildgröße Eva ActionScript 1 9 22-05-2003 13:23
nochmal frage: popup-fenster mit bild autom. bildgröße ohne php? shck Flash 4 und Flash 5 2 06-12-2001 11:39


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:53 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele