Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 01-12-2011, 21:11   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2011
Beiträge: 4
Was mache ich falsch? Scrollpane, MovieClip, Content

Hallo Zusammen,

ich habe eine Frage bezüglich meiner Anwendung. Es gibt eine Scrollpane und einen MovieClip der als Contentholder dient. Der Contentholder MC hält unterschiedliche Loader Instanzen, die die Scrollpane zu verwalten hat. Rufe ich meine Funktion einmal auf, klappt alles wunderbar und die Loaderinstanzen werden korrekt der Scrollpane hinzugefügt. Eine Combobox löst ein Event aus, so dass die Inhalte innerhalb der Scrollpane in Abhängigkeit einer ID gelöscht und wieder hinzugefügt werden sollen. Kurzum: Ein Ereignis soll vorhandene Inhalte löschen und neue hinzufügen.

Das Script:

Code:
function ParseProdContent():void {
	this.previewContent_arr.length=0;

	var selectedProdID:int=this.attributeHolder.GetSelectedProdID();
           //selectedProdID von der Combobox, stimmt auch
	if (selectedProdID==0) {
		this.prodContentList=this.phi.GetProductlistContent();
	} else {
		this.prodContentList=this.phi.GetProductlistContentByProdID(selectedProdID);
           //prodContentList hat auch alle relevanten Items
	}
	if (stage.getChildByName("conti")!=null) {
		while (container.numChildren >0 && container!=null) {
			container.removeChildAt(0);
		}
		stage.removeChild(container);
	}
	var container:MovieClip = new MovieClip();
	container.name="conti";
	stage.addChild(container);
	for (var i:int=0; i<this.prodContentList.length; i++) {
		var imgURLReq:URLRequest=new URLRequest(prodContentList[i].PathThum);
		//trace(imgURLReq.url);
		var ac:ActiveContent = new ActiveContent();
		ac.SetImgID(prodContentList[i].ImageID);
		ac.SetProdID(prodContentList[i].ProdID);
		ac.SetImgPathPreview(prodContentList[i].PathPrev);
		this.previewContent_arr.push(ac);
		var imgLoader:Loader = new Loader();

		imgLoader.name=ac.GetProdID().toString();
		imgLoader.load(imgURLReq);
		if (i%2==0) {
			x_pos=148;
			y_pos+=imgLoader.height+133;

		} else {
			x_pos=imgLoader.width+15;
		}
		imgLoader.x=x_pos;
		imgLoader.y=y_pos;

		imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, ImageLoaded);
		imgLoader.addEventListener(MouseEvent.CLICK,LoadContentOnStage);
		imgLoader.addEventListener(MouseEvent.MOUSE_OVER,MouseOver);
		imgLoader.addEventListener(MouseEvent.MOUSE_OUT,MouseOut);
		container.addChild(imgLoader);

		//this.scrollPaneContent.addChild(DrawRect(imgLoader.x,imgLoader.y,128,128,1,0x858585));
	}//foreach
	sp.source=stage.getChildByName("conti");
}
Das Problem ist, dass zwar alle Inhalte in der Anzahl übereinstimmen und auch der Scrollbalken entsprechend der vorhandenen Elemente vorhanden ist oder nicht, aber keine Inhalte sichtbar sind.

Freu mich über Antworten
LG Randy
multiview.de ist offline   Mit Zitat antworten
Alt 01-12-2011, 22:11   #2 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.866
suf den ersten blick sollte folgender Code:
PHP-Code:
    if (stage.getChildByName("conti")!=null) {
        while (
container.numChildren >&& container!=null) {
            
container.removeChildAt(0);
        }
        
stage.removeChild(container);
    }
    var 
container:MovieClip = new MovieClip();
    
container.name="conti";
    
stage.addChild(container); 
einen Fehler erzeugen:
Code:
Error #1009: Der Zugriff auf eine Eigenschaft oder eine Methode eines null-Objektverweises ist nicht möglich
weil du erst prüfst wie viele Kindobjekte der container hat, und danach erst, ob es überhaupt einen container gibt.
besser so:
PHP-Code:
    var container:Sprite stage.getChildByName("conti");    //ein Sprite reicht hier vollkommen aus
    
if (container){    //!= null && != false && != 0 && != ""
        
while (container.numChildren 0) {
            
container.removeChildAt(0);
        }
        
//stage.removeChild(container);    //wozu, kannst du doch wieder benutzen
    
}else{
        
container = new Sprite();
        
//die referenz abzuspeichern wäre definitiv die besser Lösung zu einem namen
        
container.name "conti";
        
        
//sowas ist böse; die stage gehört dir nicht, also fummel da nicht dran rum
        
stage.addChild(container);
    } 
noch paar Anmerkungen:
  • Coding-Convention in AS ist, dass nur Klassen mit Großbuchstaben beginnen
  • namen sind in AS3 bestenfalls langsam, nutz besser die Referenzen
    PHP-Code:
    //statt
    imgLoader.name=ac.GetProdID().toString();
    //...
    container.getChildByName(ac.getProdID()).something

    //besser
    ac.loader imgLoader;
    //...
    ac.loader.something 
  • x_pos && y_pos: camelCase oder underscores, aber nicht beides in der selben Anwendung
    in AS ist folgendes üblich: KlassenName, variablenName, methodenBezeichnung, KONSTANTEN_BEZEICHNUNG
__________________
greetz Thomas

plz RTFM & Coding Conventions

Geändert von thomas_E (01-12-2011 um 22:13 Uhr)
thomas_E ist offline   Mit Zitat antworten
Alt 02-12-2011, 11:50   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2011
Beiträge: 4
Hallo Thomas,

danke erst einmal für die Antwort. Der Code selber verursachte keine Fehler. Ich habe die Änderungen vorgenommen, aber die lösen nicht das Problem. Um es ganz einfach zu machen. Wird die Funktion, so wie sie jetzt umgeändert wurde zweimal hintereinander aufgerufen, bleibt die ScrollPane leer. Der Scrollbalken wächst oder schrumpft aber keine Inhalte sind im zweiten Durchlauf sichtbar. Vielleicht hast du noch eine Idee. Ich vermute es könnte an der Quellenzuweisung für die ScrollPane liegen...

Liebe Grüße
Randy

Geändert von multiview.de (02-12-2011 um 11:52 Uhr)
multiview.de ist offline   Mit Zitat antworten
Alt 02-12-2011, 18:01   #4 (permalink)
Neuer User
 
Registriert seit: Dec 2011
Beiträge: 4
Hallo Zusammen,

bis jetzt bin ich nicht weitergekommen. Allerdings ist es so, wenn ich die while schleife weglasse, weitere Elemente der ScrollPane zugefügt werden. Die alten und die neu zu ladenen Elemente. Alles stimmt soweit...die Pfade für den Loader, die Anzahl der Elemente im Array...nur das Löschen der alten und das Hinzufügen der neuen Elemente geht nicht.

Liebe Grüße
Randy
multiview.de 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
[Flash CS3] Was mache ich falsch? darja Flash Einsteiger 8 05-08-2009 22:49
Button lädt Scrollpane nicht, was mache ich falsch? moontyke Komponenten und SmartClips 3 21-05-2008 12:26
was mache ich falsch ? siketch Flash MX 2004 2 17-10-2005 03:27
was mache ich zum t. falsch ? help! Frashier Flash und Datenbanken 4 21-03-2004 18:58
Was mache ich falsch? Promillo Flash 4 und Flash 5 4 02-03-2002 12:14


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:57 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele