Flochiller
Here to stay
|
Hi, ich möchte meine Klasse gerne mit dem unten angegebenen Konstruktor initialisieren, leider spuckt er immer wieder: "1047: Parameterinitialisierer unbekannt oder keine Kompilierungszeit-Konstante." aus, wenn ich =[] und Konsorten einfüge. Gibt es eine Möglichkeit, Standardwerte für Arrays zu definieren?! package {
public class Kunde {
public var imagePath:Array;
public var Ordner:String;
public function Kunde(fol:String="",img:Array=[]):void {
Ordner = fol;
imagePath=img;
}
public function getData():String {
return imagePath.toString();
};
}
}
tia Flo
|
d3cod3
Legend...
|
ich versteh nicht ganz was du machen willst. wenn du es mit dem konstruktor aufrufen willst übergibst du doch eh den string bzw den array wert an der stelle wo du eben den konstruktor aufrufst. du rufst ja Kunde(blubb, array[10]) auf. dann muss dein konstruktor ja nur wissen welches datenformat in array[10] drinsteht und nicht mehr. (das ist jetzt nur theoretisch. keinen schimmer ob das die exakte as3 syntax ist) wenn es immer der selbe wert sein soll definierst du das halt irgendwo. hoffe das war die frage
Bearbeitet von d3cod3 am 26.09.2010, 19:40
|
Flochiller
Here to stay
|
leider nein  es ist so ich will die klasse in ein array packen und dann jeder klasse folgende eigenschaften zuteilen: name = Kundenname ordner= selbstredend imagePath= Array mit den Dateinamen der Bilder. Wenn ich jetzt aber keine Bilder habe so will ich nur einen Namen übergeben und keinen ordner/Path. ==> leere autowerte Oder bin ich grad einfach in einer Richtung steckengeblieben?! As3 unterstützt leider keine multiple constructors
Bearbeitet von Flochiller am 26.09.2010, 19:52
|
Nico
former person of interest
|
mach keinen defaultwert, sondern check den inhalt vor der zuweisung innerhalb des konstruktors.
|
Flochiller
Here to stay
|
also soll ich einfach nur var Kunde1 = new Kunde("Name",[],"") schreiben? Is auch eine Möglichkeit, dachte mir aber er wäre auch eleganter zu lösen...
|
d3cod3
Legend...
|
so würd ichs zumindest machen. das was du machen willst funktioniert glaub ich nicht.
|
ica
hmm
|
public function Kunde(fol:String="",img:Array=null):void
wäre eine möglichkeit - dann noch ein simples if dazu - ist imho schöner.
|
Flochiller
Here to stay
|
img:Array=null Eben das geht leider nicht: "1067: Implizite Umwandlung eines Werts des Typs Array in einen nicht verwandten Typ String". bzw. [null] oder "new Array()" liefert das altbekannte.(1047: Parameterinitialisierer unbekannt oder keine Kompilierungszeit-Konstante.) Dann muss ichs wohl mit nem workaround machen... trotzdem danke für die Hilfe
|
ica
hmm
|
das funktioniert sehr wohl.
|
Flochiller
Here to stay
|
Aber er spuckt bei mir aus, dass "1067: Implizite Umwandlung eines Werts des Typs Array in einen nicht verwandten Typ String", wenn ich img:array=null schreib?! Ich checks ned
|
ica
hmm
|
poste mal den code der ganzen klasse bzw. des ganzen Konstruktors.
|
Flochiller
Here to stay
|
Vielleicht könnt ihr mir ja sonst auch noch ein paar Tipps geben. Ich bin normal ein Spaghetticoder, da ich bis jetzt noch nie einen Vorteil von Klassen gesehen habe. In diesem Fall siehts allerdings so aus, als wäre es viel einfacher damit zu lösen. Worum gehts? BilderLaufband (klick auf Bild --> Laufband stopp + bild groß anzeigen) mit darunterliegenden in Spalten angeordneten Menü zur Auswahl des Laufbands. Hier der Code in der FLA: import Kunde;
var Menu_array:Array = new Array();
Menu_array.push(new Kunde("Firma","Ordner",["neuerTisch.jpg","Sesselliege 8.jpg","Sesselliege6.jpg","Sesselliege7.jpg","Tisch.jpg"],this));
/*................usw*/
j=0;
var kick:int=5;
for (i in Menu_array) {
small_mc.addChild(Menu_array[i].CreateText(i,j,kick));
if (i%kick==kick-1)j++;
}
hier liegen auch die MovieClips (blende_mc,laufband_mc,...) Hier die Klasse: package {
import flash.events.*,flash.text.*,flash.display.*,fl.transitions.Tween,fl.transitions.easing.*,fl.transitions.TweenEvent,flash.net.URLRequest;
/*******************************************************************Klasse***************************************************************************/
public class Kunde {
public var imagePath:Array=[];//Dateinamen
private var _imagePath:Array=[];//temporäres Array für imageload
private var imageArray:Array = [];//Array für Zugriff auf einzelne Bilder -> Buttons
private var lastx=0;//nächster Anfangswert für Bild
private var selectedMenue:String="";
public var Ordner:String="";//Speicherordner
public var KundenName:String;//Linkname
public var hasImages:Boolean=false;//Bildercheck, ==> grau oder nicht
private var Root:MovieClip;//Zugriff auf MovieClips
private var textFieldMenu:TextField = new TextField();
/** Farb und Fonts**/
/*******************************************************************Konstruktor***************************************************************************/
public function Kunde(nam:String,fol:String,img:Array,roo:MovieClip):void {
KundenName=nam;
Root=roo;
if (img.length!=0) {
hasImages=true;
Ordner = fol;
imagePath=img;
imagePath.push(imagePath[0]);//Für Endlosschleife die ersten Bilder hinten angehängt
imagePath.push(imagePath[1]);
_imagePath=imagePath.concat();
}
}
/*******************************************************************Textfelder***************************************************************************/
public function CreateText(i:int,j:int,kick:int):TextField {
textFieldMenu.name = i+"_Menu_txt";
if (hasImages) {
textFieldMenu.defaultTextFormat = Menu_format;
/*on over/out events*/
textFieldMenu.addEventListener(MouseEvent.CLICK,function(event:MouseEvent) {SlideShow();}); ;//Weil wenn direkt auf SlideShow muss man Event als argument haben
} else {
textFieldMenu.defaultTextFormat = MenuX_format;
}
textFieldMenu.text = KundenName;
/***diverse Positionierung usw....*/
return textFieldMenu;
}
/*******************************************************************SlideShow***************************************************************************/
public function SlideShow() { //Initialisierung des Laufbandes
_imagePath=imagePath.concat(); //Kopieren nicht Referenzieren von imagePath
for (var i in Root.Menu_array)//Alle Klickbaren auf Schwarz schalten
if (Root.Menu_array[i].hasImages)
Root.Menu_array[i].textFieldMenu.textColor =black;
textFieldMenu.textColor =pink;
selectedMenue=textFieldMenu.text;
Root.laufband_mc.alpha=0;
Root.wait_mc.visible=true;
loadImage(_imagePath[0]);
}
/******************************************************************************************************************************************************/
private function loadImage(img:String) {
var imageLoader:Loader = new Loader();
imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, ImageLoaded);
imageLoader.load(new URLRequest ("/"+Ordner+"/"+img));
}
/******************************************************************************************************************************************************/
private function ImageLoaded(event:Event) {
var Target=event.target.content;
/**diverses Positionieren***/
/***................**/
lastx+=Target.width;
var tmp_mc:MovieClip = new MovieClip;//Movieclip für Schaltflächenfunktionen
tmp_mc.addChild(Target);
tmp_mc.name=_imagePath.shift();//erstes Element entfernt und Rest nachrücken
imageArray.push(tmp_mc);
Root.laufband_mc.addChild(imageArray[imageArray.length-1]);
if (_imagePath.length > 0) {
loadImage(_imagePath[0]);//Rekursiver Aufruf bis nix mehr da
} else {
var alphaTween:Tween = new Tween(Root.laufband_mc, "alpha", Regular.easeOut, 0, 1,2,true);//Nach Ladevorgang langsames einblenden
alphaTween.addEventListener(TweenEvent.MOTION_FINISH, function (){Root.wait_mc.visible=false});//Loader kicken
var letztbilder=-Root.laufband_mc.width+imageArray[imageArray.length-1].width+imageArray[imageArray.length-2].width+Root.laufband_mc.x;//Laufband
var myTween:Tween = new Tween(Root.laufband_mc, "x", None.easeOut, Root.laufband_mc.x, letztbilder,Root.laufband_mc.width/3,false);
myTween.addEventListener(TweenEvent.MOTION_FINISH, function(){ myTween.rewind();myTween.start()});
/*vielleicht wieder auf x+=3 umschreiben, ruckeln ist dasselbe*/
for (var i in imageArray) { //bei klick aufs bild stoppen und groß zeigen
imageArray[i].addEventListener(MouseEvent.CLICK,showPic);
}
function showPic(event:MouseEvent) {
myTween.stop();
var imageLoader:Loader = new Loader();
imageLoader.load(new URLRequest ("/"+Ordner+"/"+event.target.name));
imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadbig);
function loadbig(ev:Event) {
var Target=ev.target.content;
Root.showpic_mc.addChild(Target);
}
}
Root.blende_mc.addEventListener(MouseEvent.CLICK,killall);//alles einblenden und band weiterlaufen lassen
function killall(event:MouseEvent) {
myTween.resume();
Root.reset();
}}}}}
grad kämpf ich auch noch ein bisschen mit dem Löschen des laufband_mc, bei klick auf anderen Kunden.
|
ica
hmm
|
brrr, der code wär nix für mich womit codest du denn? die formatierung ist etwas strange. würde dir entweder flash builder oder flashdevelop empfehlen. auch wärs nicht schlecht wenn du dich wenigstens an deinen eigenen coding standard halten würdest - nicht einmal eine funktion groß schreiben und einmal klein... aber egal, darum gehts ja nicht - ich seh hier nirgends den versuch von optionalen konstruktor parametern. noch ein tip: schau dir tweenmax bzw. tweenlite von greensock an - sind weitaus besser als die flash tweening klassen.
|
Flochiller
Here to stay
|
Ich code in Flash direkt... (ich mag die autovervollständigung) standard hab ich leider keinen  ich progge relativ selten bin für jeden Tipp dankbar  @konstruktor: hab jetzt darauf verzichtet, da es nicht gefunkt hat
|
ica
hmm
|
public function Kunde(nam:String,fol:String,img:Array = null,roo:MovieClip = null):void
muss eigentlich funktionieren. und in flash direkt coded man eigentlich nicht wirklich - ich kenne zumindest keinen der das macht. andere editoren haben eine weitaus bessere autovervollständigung.
|