ho fatto la mia ennesima domanda scema?![]()
Notte ragazzi, tramite i tutorial di Flep, sto cercando di capire il funzionamento delle classi, ho messo su una prima classe, che dovrebbe rappresentare il punto di partenza di ogni nuovo lavoro, un fluido, un movieclip e un nuovo elemento nel menu del tasto destro.
Ho fatto bene? Vedete qualcosa di sbagliato? Perchè in quasi tutti i vostri esempi, la funzione costruttrice è quasi vuota?
Preferite utilizzare una "init" privata e non la public principale, per attivare tutto il codice, non capisco perchè, è un errore il mio?
PHP Code:package codice
{
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.ui.*;
public class Main extends MovieClip
{
private var numero:Number = 8;
private var coloreUno:Number = 0xf1f5fa;
private var coloreDue:Number = 0x00FF00;
private var mc:MovieClip;
public function Main()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.addEventListener(Event.RESIZE,funzioneResize);
initMenu();
init();
funzioneResize(null);
}
private function init():void
{
mc = new MovieClip ;
mc.graphics.beginFill(coloreDue,1);
mc.graphics.drawRect(0,0,100,100);
addChild(mc);
}
private function initMenu():void
{
var etichetta:String = "Nuova Etichetta";
var nuovoMenu:ContextMenu = new ContextMenu ;
var item:ContextMenuItem = new ContextMenuItem(etichetta);
nuovoMenu.hideBuiltInItems();
nuovoMenu.customItems.push(item);
item.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,nuovoItem);
this.contextMenu = nuovoMenu;
}
private function nuovoItem(event:ContextMenuEvent):void
{
var url:String = "http://www.google.com/";
var request:URLRequest = new URLRequest(url);
navigateToURL(request,'_parent');
}
private function funzioneResize(event:Event):void
{
var sw:Number = stage.stageWidth;
var sh:Number = stage.stageHeight;
mc.x = sw / 2 - mc.width / 2;
mc.y = sh / 2 - mc.height / 2;
}
}
}
ho fatto la mia ennesima domanda scema?![]()
ecco, voi avreste fatto così, utilizzando la costruttrice solo per attivare la funzione di inizializzazione.
Perchè non inizializzate direttamente dalla costruttrice?
PHP Code:package codice
{
import flash.display.*;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.*;
import flash.net.*;
import flash.ui.*;
public class Main extends MovieClip
{
private var numero:Number = 8;
private var coloreUno:uint = 0xf1f5fa;
private var coloreDue:uint = 0x00FF00;
private var mc:MovieClip;
public function Main()
{
init();
}
private function init():void
{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.addEventListener(Event.RESIZE, onResize);
mc = new MovieClip ;
mc.graphics.beginFill(coloreDue,1);
mc.graphics.drawRect(0,0,100,100);
addChild(mc);
onResize(null);
initMenu();
}
private function initMenu():void
{
var etichetta:String = "Nuova Etichetta";
var nuovoMenu:ContextMenu = new ContextMenu ;
var item:ContextMenuItem = new ContextMenuItem(etichetta);
nuovoMenu.hideBuiltInItems();
nuovoMenu.customItems.push(item);
item.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,nuovoItem);
this.contextMenu = nuovoMenu;
}
private function nuovoItem(event:ContextMenuEvent):void
{
var url:String = "http://www.google.com/";
var request:URLRequest = new URLRequest(url);
navigateToURL(request,'_parent');
}
private function onResize(event:Event):void
{
var sw:Number = stage.stageWidth;
var sh:Number = stage.stageHeight;
mc.x = sw / 2 - mc.width / 2;
mc.y = sh / 2 - mc.height / 2;
}
}
}
come non detto -.-
Penso che sia per una questione di chiarezza.
Ad esempio si inizializzano le varie parti in sequenza come segue (evitando richiami annidati come hai fatto tu):
In questo modo il codice è più leggibile con tutti i benefici che ciò comporta. Quindi è corretto anche come fai tu ma meno leggibile.Code:... public function Main() { init(); initMenu(); } ...
Spero di avere chiarito il tuo dubbio
Ciao,
Davide
Ti ringrazio Davide, ho capito.
Usate la costruttrice come una sorta di indice di un libro, chiarissimo! In effetti è molto più leggibile così..
Sembrava una scemenza ma io non me lo spiegavo e volevo capire
Grazie mille![]()
Ciao Davide, sono sempre io e sempre con lo stesso dubbio.
Seguendo il tuo ragionamento, quindi utilizzando la costruttrice come una sorta di indice senza annidare le chiamate alle varie funzioni, mi ritroverei a non poter gestire gli eventi, no?
Metti il caso che dalla costruttrice faccio partire un parsing(), al complete, con i dati caricati, mi chiamo la funzione esempio(), funzione, che non funzionerebbe prima, senza i dati caricati e analizzati dal parser, quindi mi troverei costretto ad annidare la chiamata esempio() al complete del parsing().
Da vedere è brutto, e poco pulito, c'è qualche trucco, qualche metodo che voi utilizzate? Come fate a non annidare una chiamata?! Io non ci riesco proprio, ma voglio farlo!!
Bookmarks