2011-06-18 5 views
0

Je vais bientôt avoir besoin d'une perruque pour remplacer les cheveux que j'ai arrachés en ce qui concerne ce problème! J'ai un élément flash sur mon site Web qui est une galerie XML. Il est supposé se fondre parfaitement avec l'arrière-plan. J'ai importé un PNG qui a la transparence dont un bord est le bord de mélange avec l'autre BG. Bien sûr, il y a un changement de couleur sur Mac et Windows. J'ai essayé d'importer du PSD, de l'enregistrer au format JPG, d'utiliser GammaSlamma pour supprimer le profilage, toutes sortes de choses. Je pensais que j'allais avoir à ajuster manuellement l'image pour correspondre et ensuite servir deux fichiers Flash différents en fonction de l'OS de l'utilisateur ou quelque chose de fou comme ça, mais ensuite j'ai vu que AS3 supporte la correction des couleurs et beaucoup de gens ont semblé le trouver utile. Inutile de dire que j'étais très excité Cependant, je n'ai jamais utilisé AS3 auparavant, et je suis en train de développer un gros mal de tête.Flash AS3 Correction de couleur

J'ai trouvé un diaporama gratuit de remplacement qui est AS3 mais je n'ai aucune idée où ajouter ce code dans

code

que selon http://kelsocartography.com/blog/?tag=as3-color-correction est tout ce qu'il faut.

stage.colorCorrection = ColorCorrection.ON; 

Le code pour la galerie (désolé pour un si long extrait):

//---------------------------------------------------------------------------------------------------- 
// XMLSlideshow.as 
// 19 Feb 2009 
// www.simplistika.com 
//---------------------------------------------------------------------------------------------------- 
package com.simplistika 
{ 
import flash.display.*; 
import flash.events.*; 
import flash.net.URLRequest; 
import flash.utils.Timer; 

//Color correction 
import flash.display.ColorCorrection; 
stage.colorCorrection = ColorCorrection.ON; 

//---------------------------------------------------------------------------------------------------- 
// class definition 
//---------------------------------------------------------------------------------------------------- 
public class XMLSlideshow extends cXMLApp 
{ 
//---------------------------------------------------------------------------------------------------- 
// member data 
//---------------------------------------------------------------------------------------------------- 
private var mTimer : Timer; 
private var mPlaceholder1 : Loader = new Loader(); 
private var mPlaceholder2 : Loader = new Loader(); 
private var mControl : mcControl = new mcControl(); 
private var mSlide : int; 

//---------------------------------------------------------------------------------------------------- 
// slideshow setup 
//---------------------------------------------------------------------------------------------------- 
private var mFile : String = "http://www.simplistika.com/files/ssp/Slideshow.xml";  // path to xml file 
private var mInterval : uint = 8000;             // slide interval 

//---------------------------------------------------------------------------------------------------- 
// constructor 
//---------------------------------------------------------------------------------------------------- 
public function 
XMLSlideshow( 
) : void 
{  
    trace(this + " " + "XMLSlideshow.constructor"); 
    mTimer = new Timer(mInterval, 0); 

    mPlaceholder1.contentLoaderInfo.addEventListener(Event.OPEN, fOpen); 
    mPlaceholder1.contentLoaderInfo.addEventListener(Event.COMPLETE, fResult); 
    mPlaceholder2.contentLoaderInfo.addEventListener(Event.OPEN, fOpen); 
    mPlaceholder2.contentLoaderInfo.addEventListener(Event.COMPLETE, fResult); 

    //this.addEventListener(MouseEvent.MOUSE_OVER, fOnMouseOver); 
    //this.addEventListener(MouseEvent.MOUSE_OUT, fOnMouseOut); 
    //this.addEventListener(MouseEvent.CLICK, fOnClick); 
    mTimer.addEventListener(TimerEvent.TIMER, fTimer); 

    addChild(mPlaceholder1); 
    addChild(mPlaceholder2); 
    addChild(mControl); 

    mSlide = 0; 
    mControl.btnForward.alpha = mControl.btnBack.alpha = mControl.btnPause.alpha = 0.0; 
    //mControl.btnForward.buttonMode = mControl.btnBack.buttonMode = mControl.btnPause.buttonMode = true; 
    mControl.btnForward.visible = mControl.btnBack.visible = false; 

    super(mFile); 
    super.addEventListener("XMLLoaded", fStart); 
} 

//---------------------------------------------------------------------------------------------------- 
// fStart 
//---------------------------------------------------------------------------------------------------- 
private function 
fStart(
    e : Event 
) : void 
{ 
    trace(this + " " + "XMLSlideshow.fStart"); 

    fLoadImage(); 
} 

//---------------------------------------------------------------------------------------------------- 
// fOnMouseOver 
//---------------------------------------------------------------------------------------------------- 
/* private function 
fOnMouseOver(
e : MouseEvent 
) : void 
{ 

    switch (e.target.name) 
    { 
    case "btnPause": 
     mTimer.running ? mControl.txtDesc.text = "Pause" : mControl.txtDesc.text = "Play"; 
     break;  
    case "btnForward": 
     mControl.txtDesc.text = "Next"; 
     break;  
    case "btnBack": 
     mControl.txtDesc.text = "Back";  
     break; 
    default: 
     return; 
    } 
    mControl.txtDesc.alpha = 1; 
    e.target.alpha = 0.7; 
} 

//---------------------------------------------------------------------------------------------------- 
// fOnMouseOut 
//---------------------------------------------------------------------------------------------------- 
private function 
fOnMouseOut(
e : MouseEvent 
) : void 
{ 
    switch (e.target.name) 
    { 
    case "btnPause": 
    case "btnForward": 
    case "btnBack": 
     e.target.alpha = 0.5; 
     mControl.txtDesc.alpha = 0; 
     return; 
    } 
} 

//---------------------------------------------------------------------------------------------------- 
// fOnClick 
//---------------------------------------------------------------------------------------------------- 
private function 
fOnClick(
    e : MouseEvent 
) : void 
{ 
    trace(this + " " + "XMLSlideshow.fOnClick " + e.target.name); 

    switch (e.target.name) 
    { 
    case "btnPause": 
     if (mControl.txtDesc.text == "Pause") 
     { 
      mTimer.stop(); 
      mControl.btnBack.visible = mControl.btnForward.visible = true; 
      mControl.txtDesc.text = "Play"; 
     } 
     else 
     { 
      mTimer.start(); 
      mControl.btnBack.visible = mControl.btnForward.visible = false; 
      mControl.txtDesc.text = "Pause"; 
     } 
     return; 
    case "btnForward": 
     mSlide == mItems - 1 ? mSlide = 0 : mSlide++; 
     break; 
    case "btnBack": 
     mSlide == 0 ? mSlide = mItems - 1 : mSlide--; 
     break; 
    default: 
     return; 
    }  
    fLoadImage(); 
} */ 

//---------------------------------------------------------------------------------------------------- 
// fLoadImage 
//---------------------------------------------------------------------------------------------------- 
private function 
fLoadImage(
) : void 
{ 
    getChildIndex(mPlaceholder1) != 0 ? 
     mPlaceholder2.load(new URLRequest(mData.slide[mSlide].url)) : 
      mPlaceholder1.load(new URLRequest(mData.slide[mSlide].url)); 
} 

//---------------------------------------------------------------------------------------------------- 
// fTimer 
//---------------------------------------------------------------------------------------------------- 
private function 
fTimer(
    e : TimerEvent 
) : void 
{ 
    mSlide == mItems - 1 ? mSlide = 0 : mSlide++; 
    fLoadImage(); 
} 

//---------------------------------------------------------------------------------------------------- 
// fOpen 
//---------------------------------------------------------------------------------------------------- 
private function 
fOpen(
    e : Event 
) : void 
{ 
    mTimer.stop(); 
} 

//---------------------------------------------------------------------------------------------------- 
// fResult 
//---------------------------------------------------------------------------------------------------- 
private function 
fResult(
    e : Event 
) : void 
{ 
    if (!mControl.btnForward.visible) 
     mTimer.start(); 

    getChildIndex(mPlaceholder1) == 0 ? fNextImage(mPlaceholder1) : fNextImage(mPlaceholder2); 
} 

//---------------------------------------------------------------------------------------------------- 
// fKenBurns 
//---------------------------------------------------------------------------------------------------- 
private function 
fNextImage(
    vPlaceholder : Loader 
) : void 
{ 
    setChildIndex(vPlaceholder, this.numChildren - 2); 
    vPlaceholder.alpha = 0; 
    vPlaceholder == mPlaceholder1 ? cTween.to(mPlaceholder2, {alpha:0}, 1) : cTween.to(mPlaceholder1, {alpha:0}, 1); 
    cTween.to(vPlaceholder, { alpha:1 }, 1); 
} 

//---------------------------------------------------------------------------------------------------- 
} // class 

//---------------------------------------------------------------------------------------------------- 
} // package 

Vous pouvez voir que j'ajouté « la correction des couleurs » là-bas, mais je reçois cette erreur quand je lance le fichier:

ReferenceError: Error #1065: Variable stage is not defined. 
at global$init() 

Une suggestion? Merci ...

Répondre

2

C'est parce que la scène n'est pas encore définie/créée. Donc, voici 2 options:

  1. Utilisez l'auditeur ADDED_TO_STAGE à attente pour le diaporama à ajouter à la scène. Il faudrait donc ajouter le suivant au constructeur:

    addEventListener(Event.ADDED_TO_STAGE, 
    

    _added); Et ajouter cette fonction à la classe:

    private _added function(e:Event) 
    { 
        removeEventListener(Event.ADDED_TO_STAGE, 
    

    _added); stage.colorCorrection = ColorCorrection.ON; }

  2. Faire une classe de document (voir http://goo.gl/b92SU pour une Tut sur ces) pour votre flash comme ceci:

    package 
    { 
        import flash.display.MovieClip; 
    
        public class Main extends MovieClip 
        { 
        function Main() 
        { 
         addEventListener(Event.ADDED_TO_STAGE, _added); 
         //other code that was in your main timeline 
        } 
    
        private function _added(e:Event):void 
        { 
         removeEventListener(Event.ADDED_TO_STAGE, _added); 
         stage.colorCorrection = ColorCorrection.ON; 
        } 
        } 
    } 
    
+0

Je suis désolé d'avoir une telle douleur, mais où pourrais-je ajouter la première partie? Lorsque j'ai essayé votre # 2, j'ai eu cette erreur: ReferenceError: Erreur # 1065: L'étape variable n'est pas définie. \t à com.simplistika :: XMLSlideshow $ cinit() \t à global $ init() ----- Je l'ai ajouté sous le "private var mSlide: int;" ligne. – Sara

+0

On dirait que le XMLSlideshow se fait avant que la scène ne puisse l'être. J'ai mis à jour ma réponse sur la façon de mettre en œuvre # 1 dans la classe. – Obto

+0

merci. Je pense que je l'ai eu à travailler via l'étape 1 et il reprend la couleurCorrection étant ajouté. Mais encore je reçois toujours l'erreur: ReferenceError: Erreur # 1065: Variable ColorCorrection n'est pas défini. \t at com.simplistika :: XMLSlideshow/_added() ---- Je ne comprends tout simplement pas pourquoi ColorCorrection n'est pas une variable! – Sara

0

Vous ne peut pas code mis hors d'une classe. Supprimez la ligne

stage.colorCorrection = ColorCorrection.ON; 

Et placez-le sur votre constructeur de classe de document. Si vous avez des problèmes avec cela, cela signifie que votre application n'est pas correctement définie. Je vous recommande de créer une nouvelle question, ou lire this tutorial.

+0

voulez-vous dire le mettre dans la zone publique XMLSlideshow de la fonction? Même quand je fais ça, je reçois le [objet XMLSlideshow] XMLSlideshow.constructor [objet XMLSlideshow] cXMLApp.constructor ReferenceError: Erreur # 1065: ColorCorrection variable n'est pas défini. \t à l'erreur com.simplistika :: XMLSlideshow(). – Sara

+0

Avez-vous supprimé la ligne d'importation? – Veehmot

+0

J'ai vu qu'il y a un "import flash.display. *;" au début du fichier. J'ai donc supprimé "import flash.display.ColorCorrection" car je pensais qu'il était déjà importé. Même quand je suis retourné là-bas et l'ai ajouté, j'ai toujours cette erreur. – Sara