PDA

Volledige versie bekijken : opzet class?


celar
%Europe/Berlin %930 %2005, 23:20
Hallo,

ik ben bezig met het schrijven van een gallery class. Nu heb ik al wat bouw blokken gemaakt maar ben er niet zeker van of dit een correcte opzet is van wat ik wil. Wat ik wil is alle blokken die ervoor zorgen dat de gallery werkt appart schrijven. Dus een aparte datacollector, thumbclass, buildclass. Maar doe ik in de datacolletor class een xml load. dan wil ik die eigenlijk uitlezen in de buildclass. Want die kan pas wat bouwen als hij de gegevens weet. Nu had ik wat gemaakt met dispatchEvent maar vond dat de twee classes niet echt los stonden van elkaar. En omdat een xml object al eigenlijk een losse class is dacht ik waarom die dan opnieuw in een aparte class gebruiken. Nu heb ik de data-afhandeling in een aparte class gezet. Daarin wordt geregeld wat er geladen is en hoe je de data eruit kan halen. Maar het xml object zit nu in de buildclass.

Is dit een goeie opzet? zit ik op de goeie weg? ik probeer zo goed mogelijk OOP te programmeren maar begin er eigenlijk net mee. Dus beter goed aanleren dan verkeerd.

De classes
galleryGrid(de buildclass)
import thumb;
import galleryData;

class galleryGrid{
private var parent, gridData:Object;
private var xmlData:XML;
private var xmlURL:String;
private var galleryContainer:MovieClip;

public var blockArray:Array;
public var rows, cols:Number;

public function galleryGrid(parent,xmlURL:String){
this.parent = parent;
this.xmlURL = xmlURL;
this.gridData = new Object();
//create container for the Grid
galleryContainer = parent.createEmptyMovieClip("container_mc", parent.getNextHighestDepth());


loadXML();
}

private function loadXML():Void{
var myRoot:Object = this;
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.load(xmlURL);
xmlData.onLoad = function(success){
if (success){
myRoot.createGrid();
myRoot.fillGrid();
}
}
}

private function fillGrid(){
gridData.fill();
}
private function createGrid(){
gridData = new galleryData(this, xmlData);
rows = gridData.getrows();
cols = gridData.getcols();

blockArray = new Array();
for (var i=0; i<rows; i++) {
blockArray.push(new Array());
}

for (var bx=0; bx<rows; bx++) {
trace(gridData.getcols(bx));
for (var by=0; by<gridData.getcols(bx); by++) {
blockArray[bx][by] = new thumb(this,galleryContainer, 0, 0, bx,by);
blockArray[bx][by].sety(blockArray[bx][by].getwidth()*bx);
blockArray[bx][by].setx(blockArray[bx][by].getheight()*by);
}
}
}
public function createThumb(x,y:Number){
var newThumb:thumb = new thumb(this,galleryContainer,x,y);
}
}


galleryData(de datacollector class)
class galleryData{
private var xmlData:XML;
private var parent:Object;

public function galleryData(parent, xmlData:XML) {
this.parent = parent;
this.xmlData = xmlData;
}

public function fill(){
for (var bx=0; bx<parent.rows; bx++) {
for (var by=0; by<parent.gridData.getcols(bx); by++) {
var imagelink:String = xmlData.firstChild.childNodes[bx].childNodes[by].firstChild.nodeValue
parent.blockArray[bx][by].loadImage(imagelink);
}
}
}

public function getrows():Number{
return xmlData.firstChild.childNodes.length;
}
public function getcols(row):Number{
if (row){return xmlData.firstChild.childNodes[row].childNodes.length;}else{return xmlData.firstChild.firstChild.childNodes.length;}
}
}


thumb class
class thumb{
private var x,y:Number;
private var parent:Object;
private var container_mc, mctarget, thumb_mc, mask_mc:MovieClip;
private var gridPos:Array;
private var imageLoader:MovieClipLoader;

private static var thumbDepth:Number = 1;
private static var maskDepth:Number = 2;

public function thumb(parent:Object, mctarget:MovieClip, x,y:Number, gx,gy){
this.parent = parent;
this.mctarget = mctarget;
this.gridPos = new Array(gx,gy);
this.x = x;
this.y = y;
imageLoader = new MovieClipLoader();
imageLoader.addListener(this);

//create thumbnail container en fill it
container_mc = mctarget.createEmptyMovieClip("thumbnail"+gx+"_"+gy, mctarget.getNextHighestDepth());
container_mc.parent = this;
container_mc.onRollOver = rollOver;
container_mc.onRollOut = rollOut;
createThumb();
createMask();
}

private function createThumb():Void{
//create imagecontainer
thumb_mc = container_mc.createEmptyMovieClip("thumb_mc", thumbDepth);
}
private function createMask():Void{
//create imageMask
mask_mc = container_mc.createEmptyMovieClip("mask_mc", maskDepth);
mask_mc.beginFill(0xF2F2F2,100);
mask_mc.moveTo(0,0);
mask_mc.lineTo(0,70);
mask_mc.lineTo(70,70);
mask_mc.lineTo(70,0);
mask_mc.lineTo(0,0);
mask_mc.endFill();
}

private function rollOver(){
parent.parent.gridData.test();
parent.container_mc._alpha= 30;
}

private function rollOut(){
parent.container_mc._alpha = 100;
}

public function getwidth():Number{
return container_mc._width;
}
public function getheight():Number{
return container_mc._height;
}
public function setx(x):Void{
container_mc._x = x;
}
public function sety(y):Void{
container_mc._y = y;
}

public function loadImage(image:String):Void{
imageLoader.loadClip(image, thumb_mc);
}
public function onLoadInit(target:MovieClip):Void{
container_mc.thumb_mc.setMask(container_mc.mask_mc );
}

}