ActionScript 3.0: brug af slice(), indexOf() og length med Strings

20. oktober 2008

forestil dig at hente denne tekststreng ind i Flash vha. XML eller URLparameter;
<![CDATA[<a href="http://www.campjohn.dk/wp/?p=114">ActionScript 3.0: how to add parameter to eventListener</a>]]>;

tekstfeltet, der skal vise denne tekststreng kan indeholde 38 tegn, men linien ovenfor indeholder 55 tegn, altså har jeg et problem.
men her er en måde at løse det på.

først bruger jeg slice() til at sætte den første html-del af tekststrengen lig en ny midlertidig tekststreng.
dvs. denne del: <![CDATA[<a href="http://www.campjohn.dk/wp/?p=114">

derefter bruger jeg en kombination af slice() og indexOf() til at sætte tekstdelen af tekststrengen lig endnu en ny midlertidig tekststreng.
dvs. denne del: ActionScript 3.0: how to add parameter to eventListener

jeg måler længden af den nyeste midlertidige tekststreng, og hvis den er længere end hvad der kan vises i mit tekstfelt, bruger jeg slice() til at tilpasse den.
efter at have tilpasset længden klistrer jeg "..." på enden af tekststrengen, så man kan se, at teksten er blevet tilpasset tekstfeltet.
slutteligt klistrer jeg de to midlertidige tekststrenge sammen, tilføjer et afsluttende html-tag for ikke at ende op med et ufærdigt link, og assigner den til mit tekstfelts htmlText-parameter.
:O)

her er et eksempel på hvordan ovenstående ser ud i ActionScript 3.0:
var myString:String = <![CDATA[<a href="http://www.campjohn.dk/wp/?p=114">ActionScript 3.0: how to add parameter to eventListener</a>]]>;
trace("myString = "+myString+" myString.length = "+myString.length);

trace("myString.indexOf(>) = "+myString.indexOf('">'));
var myTemp:String = myString.slice(0, (myString.indexOf('">')+2));
var myTemp2:String = myString.slice((myString.indexOf('">')+2), (myString.indexOf('</')));
trace("myTemp = "+myTemp);
trace("myTemp2 = "+myTemp2);

if (myTemp2.length > 38) {
            myTemp2 = myTemp2.slice(0, 35)+"...";
}

myString = ""+myTemp+myTemp2+"</a>";
trace("myString = "+myString);

myText.htmlText = myString;

Vær den første til at give point

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , , , ,

ActionScript3.0: sådan laves et "fortryllet billedmodul" i Flash

15. juni 2008


ved at loade 2 billeder ovenpå hinanden, og kun lade det øverste billede være synligt ved mouseOver, kan man let lave et "fortryllet billedmodul" i Flash.
et sådan modul kunne fungere på denne måde:
http://campjohn.dk/AS3/Invita/enhancedPicture/exampla.html


(billederne i dette eksempel er lavet af min kollega Rune, der er en mester i Paint :D )


i ActionScript3.0 kunne eksemplet ovenfor kodes på denne måde:

//stop timeline i Flash'en
stop();

//importer de klasser, man har brug for
import caurina.transitions.Tweener;

//lav en Sprite, der skal indeholde det billede, der vises ved mouseOver
//en Sprite er som et MovieClip, men Sprites har - modsat MovieClips - ingen timeline.
//det har vi ikke brug for, så en Sprite er fint i denne henseende
var myForegroundSprite:Sprite = new Sprite();

//opret de to links til billederne, der skal bruges
var myBackgroundPictureURL:String = "infoPicRED.jpg";
var myForegroundPictureURL:String = "infoPicRED_shift.jpg";

//sæt funktionen createBackground igang
createBackground();


//funktionen createBackground
function createBackground():void {
    //opret en loader, der kan håndtere at loade et billede ind i Flash'en
    var myBackgroundLoader:Loader = new Loader();

    //load billedet ind i Flash'en
    var url:String = myBackgroundPictureURL;
    var urlReq:URLRequest = new URLRequest(url);
    myBackgroundLoader.load(urlReq);

    //gør billedet synligt ved at placere det på scenen i Flash
    addChild(myBackgroundLoader);

    //sæt funktionen createForeground igang
    createForeground();
}

//funktionen createForeground
function createForeground():void {
    //smid myForegroundSprite på scenen
    addChild(myForegroundSprite);

    //
    var myForegroundLoader:Loader = new Loader();
   
    //
    var url:String = myForegroundPictureURL;
    var urlReq:URLRequest = new URLRequest(url);
    myForegroundLoader.load(urlReq);

    //sæt myForegroundSprite'n gennemsigtighed til 0, så det stadig er myBackgroundLoader, der er synlig, selv når myForegroundSprite'n smides ovenpå   
    myForegroundSprite.alpha = 0;

    //put myForegroundLoader ind i myForegroundSprite'n og smid det på scenen.
    //grunden til at myForegroundLoaderen ikke smides direkte på scenen er, at man ikke kan interagere med Loader'e
    //det kan man derimod med Sprites
    myForegroundSprite.addChild(myForegroundLoader);

    //sæt funktionen createInteraction igang
    createInteraction();
}

function createInteraction():void {
    //hvis musen kommer over myForegroundSprite, skal funktionen myMouseOver køre  
    myForegroundSprite.addEventListener(MouseEvent.MOUSE_OVER, myMouseOver);

    //hvis musen forlader myForegroundSprite, så skal funktionen myMouseOut køre       
    myForegroundSprite.addEventListener(MouseEvent.MOUSE_OUT, myMouseOut);
   
    //lad håndikonet vises istedet for pilikonet for musen, når musen interagerer med myForegroundSprite  
    myForegroundSprite.buttonMode = true;
}


function myMouseOver(e:Event):void {
    //lad myForegroundSprite blive helt synlig over 0.7 sekund
    Tweener.addTween(myForegroundSprite, {alpha:1, time:0.7, transition:"linear"});
}
function myMouseOut(e:Event):void {
    //lad myForegroundSprite blive helt usynlig over 0.7 sekund  
    Tweener.addTween(myForegroundSprite, {alpha:0, time:0.7, transition:"linear"});
}





her er koden uden alle kommentarerne:
stop();

import caurina.transitions.Tweener;

var myForegroundSprite:Sprite = new Sprite();

var myBackgroundPictureURL:String = "infoPicRED.jpg";
var myForegroundPictureURL:String = "infoPicRED_shift.jpg";

createBackground();

function createBackground():void {
    var myBackgroundLoader:Loader = new Loader();
    var url:String = myBackgroundPictureURL;
    var urlReq:URLRequest = new URLRequest(url);
    myBackgroundLoader.load(urlReq);
    addChild(myBackgroundLoader);
    createForeground();
}

function createForeground():void {
    addChild(myForegroundSprite);
    var myForegroundLoader:Loader = new Loader();
    var url:String = myForegroundPictureURL;
    var urlReq:URLRequest = new URLRequest(url);
    myForegroundLoader.load(urlReq);
    myForegroundSprite.alpha = 0;
    myForegroundSprite.addChild(myForegroundLoader);
    createInteraction();
}

function createInteraction():void {
    myForegroundSprite.addEventListener(MouseEvent.MOUSE_OVER, myMouseOver);
    myForegroundSprite.addEventListener(MouseEvent.MOUSE_OUT, myMouseOut);
    myForegroundSprite.buttonMode = true;
}


function myMouseOver(e:Event):void {
    Tweener.addTween(myForegroundSprite, {alpha:1, time:0.7, transition:"linear"});
}
function myMouseOut(e:Event):void {
    Tweener.addTween(myForegroundSprite, {alpha:0, time:0.7, transition:"linear"});
}

Vær den første til at give point

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , , , , , , , ,

Powered by BlogEngine.NET 1.3.1.0
Theme by Mads Kristensen (Modifed by Co3)


Om mig

Felix Sanchez Felix Sanchez
Flashin’ about

Send mig en mail Send mail

Kategorier

None

Seneste kommentarer