|
Beiträge: 151 Registriert: May 2010
Themenautor/in
| 14.01.2011, 08:26
ja das wäre echt cool...denn flash in zusammenhang mit xml stellt für mich oft noch eine große Hürde dar. ich bin für jede Hilfe sehr dankbar. Vorallem, wenn ich sie danach nachvollziehen kann und in Zunkunft damit weiterarbeiten kann. Aber auch deine Version mit den Arrays hat mir schon viel gebracht und ich konnte wieder einiges dazulernen. Thx for that ;-) |
|
|
Beiträge: 151 Registriert: May 2010
Themenautor/in
| 14.01.2011, 09:31
ok, ich glaube solangsam habe ich zumindest verstanden, wie man auf die einzelnen "elemente" der xml zugreift..ich will aber nicht auf feste Werte zugreifen, sondern die sollen ja variabel sein. Also wenn ich jetzt alle getYearByName() anzeigen lassen will, die in der xml enthalten sind, was muss ich da tun? |
|
|
Beiträge: 151 Registriert: May 2010
Themenautor/in
| 14.01.2011, 15:40
ActionScript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | var xmlLoader:URLLoader = new URLLoader();
//var xmlData:XML = new XML();
xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
var stage_size = 0;
var xmlPath:String = "image-scroller.xml";
xmlLoader.load(new URLRequest(xmlPath));
trace("loading xml from: " + xmlPath);
var bildanzeige:MovieClip = new MovieClip;
var dataProvider:Object;
function LoadXML(e:Event):void {
dataProvider = parseXML(new XML(e.target.data));
trace(dataProvider);
trace(dataProvider.getYearByName(""));
//yearArray = [dataProvider.getYearByName("017").name + dataProvider.getYearByName("010").name];
//trace(dataProvider.getGalleriesByYearId(1).length)
var galleries:Array = dataProvider.getYearById(2).getGalleries();
var years:Array = dataProvider.getYearByName("");
//trace(dataProvider.getYearByName("2010"));
for each (var gallery:Object in galleries)
{
trace(gallery.title);
trace(gallery.image);
trace(gallery.getImages().length);
//trace(gallery.imageItem.src);
}
for each (var year:Object in years)
{
trace(year.name);
for (var j:uint =0; j< dataProvider.getYearByName.length; j++)
{
trace("JAHR" + year.name);
text_color = 0xFFFFFF;
Year[j] = year.name;
trace(Year[j]);
var thisOne:MovieClip = new MovieClip();
var blackBox3:Sprite = new Sprite();
blackBox3.graphics.beginFill(0x000000);
blackBox3.graphics.drawRect(0,0, 200,50);
blackBox3.alpha = thumbFadeOut;
blackBox4.visible = true;
blackBox4.graphics.beginFill(0x000000);
blackBox4.graphics.drawRect(0,0, 250,500);
blackBox4.alpha = thumbFadeOut;
addChildAt(blackBox4, 0);
thisOne.blackBox = blackBox3;
thisOne.addChild(blackBox3);
//-----------------------------------------------------------------------------------//
var gallery_text2:TextField = new TextField();
var gallery_text:TextField = new TextField();
var Format:TextFormat = new TextFormat();
Format.font = "ArialRoundedMTBold";
Format.size = 18;
gallery_text2.defaultTextFormat = Format;
gallery_text2.textColor = text_color;
gallery_text2.selectable = false;
gallery_text2.wordWrap = true;
gallery_text.defaultTextFormat = Format;
gallery_text.textColor = text_color;
gallery_text.selectable = false;
gallery_text.wordWrap = true;
gallery_text2.text =Year[j];
thisOne.Text=gallery_text2;
thisOne.addChild(gallery_text2);
gallery_text2.textColor = 0xFFFFFF;
gallery_text2.selectable = false;
gallery_text2.wordWrap = true;
gallery_text2.x = blackBox3.width/2.7;
yearArray[j]=thisOne;
gallery_text2.width = 300;
gallery_text.width = 300;
scroller3.addChild(thisOne);
thisOne.buttonMode = true;
scroller3.alpha = 0.7;
scroller3.scaleX = 1;
scroller3.scaleY = 1;
scroller3.addChild(thisOne);
yearArray[j].y = yearArray[j].myy = (30 + padding)* j;
yearArray[j].addEventListener(MouseEvent.ROLL_OVER, overScrollerItem2);
thisOne.buttonMode = true;
thisOne.mouseChildren = false;
}
}
}
function overScrollerItem2(e:MouseEvent):void {
Tweener.addTween(e.currentTarget, {scaleX:1.2, scaleY:1.2} );
e.currentTarget.blackBox.alpha =1;
scroller3.alpha =1 ;
}
|
so die Jahre bekomme ich untereinander getraced..also 2010 und 2011..aber wenn ich die nun in den MC thisOne einfügen will, damit die untereinander anzeigbar sind und auch einzeln auswählbar sind, was vorher auch geklappt hat, klappt das jetzt nicht :-(....was mache ich falsch...was muss ich anders machen ;-) |
|
|
Beiträge: 1776 Wohnort: Laimbach 6 1/2 Registriert: Nov 2002
| 14.01.2011, 16:47
Muß zugeben, das sich mir das ganze, auch noch nicht so erschließt wie ich dachte.
Hab schon ein wenig damit gespielt, aber an die einzelnen Galerien ("Weihnachten") zb. komm ich auch nicht ran :-(
Vielleicht kann uns "badskill" da schlauer machen ;-)Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muss erst gehen lernen" |
|
|
Beiträge: 151 Registriert: May 2010
Themenautor/in
| 14.01.2011, 16:50
puh, ich dachte schon, ich wäre wieder mal einfach zu blöd ;-)..also ich finde das auch sehr schwierig... |
|
|
Beiträge: 5285 Wohnort: Bernau (bei
Berlin) Registriert: Nov 2002
| 14.01.2011, 21:23
Ihr hättet die API um die erforderlichen Methoden erweitern müssen/können.
Ich hab das Teil mal erweitert:
ActionScript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | var model:Function = function():Object
{
var years:Array = [];
var galleries:Array = [];
var images:Array = [];
// siehe addGallery
var imagesByGallery:Function = function():Array
{
var result:Array = [];
for each (var image:Object in images)
{
if (image.galleryId == this.id) result.push(image);
}
return result;
}
// siehe addYear
var getGalleries:Function = function():Array
{
var result:Array = [];
for each (var gallery:Object in galleries)
{
if (gallery.yearId == this.id) result.push(gallery);
}
return result;
}
// siehe addYear
var getGalleriesByTitle:Function = function(title:String):Array
{
var result:Array = [];
var galleries:Array = this.getGalleries();
for each (var gallery:Object in galleries)
{
if (gallery.title == title) result.push(gallery);
}
return result;
}
return {
getYearByName : function(name:String):Object {
for each (var year:Object in years)
{
if (year.name == name) return year;
}
return null;
},
getYearById : function(id:uint):Object {
return years[id] || null;
},
getGalleriesByYearId : function(yearId:uint):Array {
var result:Array = [];
for each (var gallery:Object in galleries)
{
if (gallery.yearId == yearId) result.push(gallery);
}
return result;
},
getGalleriesByTitle : function(title:String):Array {
var result:Array = [];
for each (var gallery:Object in galleries)
{
if (gallery.title == title) result.push(gallery);
}
return result;
},
getGalleryById : function(id:uint):Object {
return galleries[id];
},
getAllYears : function():Array {
return years;
},
addYear : function(year:Object):void {
year.getGalleries = getGalleries;
year.getGalleriesByTitle = getGalleriesByTitle;
years[year.id] = year;
},
addGallery : function(gallery:Object):void {
gallery.getImages = imagesByGallery;
galleries[gallery.id] = gallery;
},
addImage : function(image:Object):void {
images.push(image);
}
}
}
|
Beispiele:
ActionScript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // alle Jahre
var years:Array = dataProvider.getAllYears();
// alle Galerien mit dem Titel "Weihnachten"
var galleries:Array = dataProvider.getGalleriesByTitle("Weihnachten");
// alle Galerien mit dem Titel "Weihnachten" von einem bestimmten Jahr
var galleries:Array = dataProvider.getYearByName("2010").getGalleriesByTitle("Weihnachten");
var galleries:Array = dataProvider.getYearById(2).getGalleriesByTitle("Weihnachten");
// alle Galerien eines bestimmten Jahres
var galleries:Array = dataProvider.getYearById(2).getGalleries();
var galleries:Array = dataProvider.getYearByName("2010").getGalleries();
var galleries:Array = dataProvider.getGalleriesByYearId(2);
// eine Galerie mit einer bestimmten Id
var gallery:Object = dataProvider.getGalleryById(3);
|
|
Geändert von badskill am 14.01.11 um 21:26 Uhr | |
|
|
Beiträge: 1776 Wohnort: Laimbach 6 1/2 Registriert: Nov 2002
| 15.01.2011, 02:40
*Ihr hättet die API um die erforderlichen Methoden erweitern müssen/können.*
Ich hätte vielleicht können, nach angemessener Studiums-zeit Deines Scripts, wenn ich die Zeit dazu hätte :-)
Aber Purgar, das hättest Du raus lesen können, das der das nicht (noch nicht) kann ;-)
Aber Danke an der Stelle, für die Erweiterung :-)Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muss erst gehen lernen" |
|
|
Beiträge: 151 Registriert: May 2010
Themenautor/in
| 15.01.2011, 18:13
ui ui....also studieren ist echt das passende wort ;-)...sieht alles sehr complicated aus |
|
|
Beiträge: 151 Registriert: May 2010
Themenautor/in
| 15.01.2011, 18:33
so wie bekomme ich es denn jetzt hin, mit dem script, was ich gestern hier gepostet habe, dass die jahreszahlen untereinander angezeigt werden, was vorher ja funtkioniert hat? |
|
|
Beiträge: 5285 Wohnort: Bernau (bei
Berlin) Registriert: Nov 2002
| 15.01.2011, 19:16
Ist einfacher als du denkst. ;)
Damit das Skript kurz bleibt, hab ich ein paar Zeilen rausgeschmissen (ebenso die Funktionen parseXML und model). Die musst du wieder nachtragen:
ActionScript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | var dataProvider:Object;
function LoadXML(e:Event):void {
dataProvider = parseXML(new XML(e.target.data));
buildUI();
}
function buildUI():void
{
var years:Array = dataProvider.getAllYears();
for (var i:uint = 0, j:uint = years.length; i < j; i++)
{
var thisOne:MovieClip = new MovieClip();
/*
blackboxes ...
*/
thisOne.addChild(blackBox3);
/*
textfelder ...
*/
gallery_text2.text = years[i].name;
// ...
thisOne.addChild(gallery_text2);
// ...
scroller3.addChild(thisOne);
thisOne.y = thisOne.myy = (30 + padding)* i;
thisOne.addEventListener(MouseEvent.ROLL_OVER, overScrollerItem2);
// der rest
}
}
|
|
Geändert von badskill am 15.01.11 um 19:16 Uhr | |
|
|
Beiträge: 151 Registriert: May 2010
Themenautor/in
| 15.01.2011, 19:45
hmmm...danke erstmal..naja so einfach finde ich das echt nicht ;-)...
aber wenn ich jetzt ActionScript:1 | gallery_text2.text = years[i].name;
|
eingebe
bekomme ich in der ausgabe die meldung, dass ein begriff nicht definiert ist und keine eigenschaft hat...oh man, ich blick da irgendwann bestimmt noch durch... |
|
|
Beiträge: 5285 Wohnort: Bernau (bei
Berlin) Registriert: Nov 2002
| 15.01.2011, 19:57
Der Fehler liegt bei mir. Tausche die Methode "getAllYears" in der Funktion "model" mit dieser hier aus:
ActionScript:1 2 3 4 5 6 7 8 | getAllYears : function():Array {
var result:Array = [];
for each (var year:Object in years)
{
result.push(year);
}
return result;
}
|
|
|
|
Beiträge: 151 Registriert: May 2010
Themenautor/in
| 15.01.2011, 20:15
wow, danke erstmal..genauso meinte ich das..coole sache...werde aber bestimmt nochmals auf dich zurückkommen (müssen)..trotzdem erstmal vielen lieben dank..werde mir jetzt erstmal alles genau anschauen und versuchen, dass ganze nachzuvollziehen..denn so wie immer, in erster linie will ich lernen und nicht nur kopieren und einfügen...und badskills hat mir schon einiges beigebracht..genauso wie rusty, der mir arrays und den umgang mit diesen näher bringen konnte mit seinen beispielen..erstmal vielen lieben dank dafür...und der beitrag bleibt noch geöffnet, denn da wird bestimmt noch die ein oder andere frage kommen ;-).. |
|
|
Beiträge: 5285 Wohnort: Bernau (bei
Berlin) Registriert: Nov 2002
| 15.01.2011, 20:22
Prima,
dann bis zum nächsten mal. :) |
|
|
Beiträge: 151 Registriert: May 2010
Themenautor/in
| 16.01.2011, 10:13
und heute ist wohl " das nächste mal" ;-)..ich versuche gerade die images zu laden,...ich dachte das mache ich mit ActionScript:1 | var images:Array = dataProvider.imagesByGallery(1) ;
|
aber ich bekomme dann immer eine fehlermeldung, dass "imagesByGallery keine function sei" häää?!?!? |
|