Avatar billede supermand69 Nybegynder
04. januar 2007 - 23:11 Der er 56 kommentarer og
1 løsning

dynamisk liste

var track_arr = array(
54 => 'Bamses Venner - Fløjtesangen',
85 => 'Kandis - Min nabo har 3 hunde',
90 => 'Kjeld & Hilda - Se min gøj'
);

Jeg skal have listet ovenstående array nedender hinanden med en tilknyttet onPress, og på en eller anden måde skal jeg have lavet en "mouseover", så baggrunden bag hver linje (værdi) bliver fremhævet?

Jeg er ikke helt med på hvordan man kan lave fremhævelsen?
Avatar billede kragekjaer Praktikant
04. januar 2007 - 23:20 #1
Hey, der er ikke meget superman over dig, prøv nu selv og kom tilbage når du går istå. Det er sgu da meget at forlange, at en person herinde skal lave det for dig fra bunden. Eller betal dig fra det i $
Avatar billede supermand69 Nybegynder
05. januar 2007 - 15:25 #2
det er meget godt når jeg ikke aner hvordan de forskellige syntakser ser ud
Avatar billede maqhem Nybegynder
05. januar 2007 - 17:36 #3
Din initialisation af arrayet ligner mere PHP-kode end Flash-kode. I Flash ser syntaxen således ud:

var track_arr:Array = new Array();
track_arr[54] = "Bamses Venner - Fløjtesangen";
track_arr[85] = "Kandis - Min nabo har 3 hunde";
track_arr[90] = "Kjeld & Hilda - Se min gøj";

Men lad mig hjælpe dig lidt. Lav følgende i stedet for:

Flash:
#include "kode.as"
addValue(54, "Bamses Venner - Fløjtesangen");
addValue(85, "Kandis - Min nabo har 3 hunde");
addValue(90, "Kjeld & Hilda - Se min gøj");
generateList();

kode.as:
import Linje;
var track_arr:Array = new Array();
function addValue(nnumber:Number, nvalue:String):Void {
    track_arr[nnumber] = nvalue;
}
function generateList():Void {
    var count:Number = new Number(0);
    for(var i:Number = new Number(0); i < track_arr.length; i++) {
        if(track_arr[i] != undefined) {
            this[track_arr] = new Linje(track_arr[i]);
            // 20 er mellemrummet mellem de forskellige linier,
            // 50 er start-x og 100 er start-y.
            this[track_arr].X = 100;
            this[track_arr].Y = 20 * count++ + 50;
            this[track_arr].generate();
        }
    }
}

Linje.as:
class Linje {
    private var val:String;
    private var xp:Number;
    private var yp:Number;
    public function Linje(nval:String) {
        val = new String();
        xp = new Number(0);
        yp = new Number(0);
        if(nval) {
            val = nval;
        }
    }
    public function generate():Void {
        var tempValue:String = new String(val);
        with(_root.createEmptyMovieClip(val + "t", _root.getNextHighestDepth()).createTextField("txt", 0, xp, yp, 0, 0)) {
            autoSize = true;
            wordWrap = false;
            selectable = false;
            var my_fmt:TextFormat = new TextFormat();
            my_fmt.color = 0x000000;
            my_fmt.bold = true;
            my_tfm.type = "static";
            text = this.Value;
            setTextFormat(my_fmt);
        }
        var tempTextWidth:Number = new Number(_root[val + "t"].txt.textWidth);
        var tempTextHeight:Number = new Number(_root[val + "t"].txt.textWidth);
        with(_root.createEmptyMovieClip(val + "p", _root.getNextHighestDepth())) {
            _x = this.X;
            _y = this.Y + 2;
            beginFill(0xffff00, 100);
            lineTo(tempTextWidth + 4, 0);
            lineTo(tempTextHeight + 4, 16);
            lineTo(0, 16);
            lineTo(0, 0);
            _alpha = 0;
        }
        _root[val + "p"].onRollOver = function() {
            this.useHandCursor = false;
            this._alpha = 60;
        }
        _root[val + "p"].onRollOut = function() {
            this._alpha = 0;
        }
        _root[val + "p"].onPress = function() {
            trace(tempValue);
        }
        _root[val + "t"].swapDepths(_root.getNextHighestDepth());
    }
    public function set X(newx:Number):Void {
        xp = newx;
    }
    public function set Y(newy:Number):Void {
        yp = newy;
    }
    public function get X():Number {
        return xp;
    }
    public function get Y():Number {
        return yp;
    }
    public function set Value(nval:String):Void {
        val = nval;
    }
    public function get Value():String {
        return val;
    }
}

Læg nu Flash-filen, kode.as og Linje.as i samme mappe, og så er det faktisk ikke sværere :)
Avatar billede maqhem Nybegynder
05. januar 2007 - 17:39 #4
NB: Det er vigtigt, at Linje.as er med stort L, ellers får du problemer.

Derudover må du endeligt sige til, hvis du skal have hjælp :)
Avatar billede maqhem Nybegynder
05. januar 2007 - 17:42 #5
En mindre fejl. Linje.as skal se sådan hér ud:

class Linje {
    private var val:String;
    private var xp:Number;
    private var yp:Number;
    public function Linje(nval:String) {
        val = new String();
        xp = new Number(0);
        yp = new Number(0);
        if(nval) {
            val = nval;
        }
    }
    public function generate():Void {
        var tempValue:String = new String(val);
        with(_root.createEmptyMovieClip(val + "t", _root.getNextHighestDepth()).createTextField("txt", 0, xp, yp, 0, 0)) {
            autoSize = true;
            wordWrap = false;
            selectable = false;
            var my_fmt:TextFormat = new TextFormat();
            my_fmt.color = 0x000000;
            my_fmt.bold = true;
            my_tfm.type = "static";
            text = this.Value;
            setTextFormat(my_fmt);
        }
        var tempTextWidth:Number = new Number(_root[val + "t"].txt.textWidth);
        var tempTextHeight:Number = new Number(_root[val + "t"].txt.textHeight);
        with(_root.createEmptyMovieClip(val + "p", _root.getNextHighestDepth())) {
            _x = this.X;
            _y = this.Y + 2;
            beginFill(0xffff00, 100);
            lineTo(tempTextWidth + 4, 0);
            lineTo(tempTextWidth + 4, tempTextHeight + 2);
            lineTo(0, tempTextHeight + 2);
            lineTo(0, 0);
            _alpha = 0;
        }
        _root[val + "p"].onRollOver = function() {
            this.useHandCursor = false;
            this._alpha = 60;
        }
        _root[val + "p"].onRollOut = function() {
            this._alpha = 0;
        }
        _root[val + "p"].onPress = function() {
            trace(tempValue);
        }
        _root[val + "t"].swapDepths(_root.getNextHighestDepth());
    }
    public function set X(newx:Number):Void {
        xp = newx;
    }
    public function set Y(newy:Number):Void {
        yp = newy;
    }
    public function get X():Number {
        return xp;
    }
    public function get Y():Number {
        return yp;
    }
    public function set Value(nval:String):Void {
        val = nval;
    }
    public function get Value():String {
        return val;
    }
}
Avatar billede supermand69 Nybegynder
05. januar 2007 - 17:54 #6
en ting jeg straks lægger mærke til er at det er som om der hele tiden laves "dobbeltcheck" når man opretter nye værdier mm.

eks.
var track_arr:Array = new Array();
var count:Number = new Number(0);

er det virkelig nødvendigt? :)
Avatar billede maqhem Nybegynder
05. januar 2007 - 18:00 #7
Det er ikke nødvendigt, men jeg gør det for helhedens skyld. Jeg synes, det ser pænt ud.

var betyder "ny variabel".
:Array, :Number, :String, :Object etc. betyder "er instans af ...". Altså :Array betyder "er instans af Array".
new betyder "ny", og bruges til at lave en ny instans af en klasse.
Number(0) betyder "instans af klassen Number (nummer), og skal have standartværdien 0".

Så dette:
var count:Number = new Number(0);
betyder "variablen count er af instansen Number, og lig med ny instand af klassen Number med standartværdi 0".

Man kan faktisk bare skrive count = 0;, men jeg foretrækker det andet :)
Avatar billede maqhem Nybegynder
05. januar 2007 - 18:02 #8
Rettelse: "... og lig med ny instans af klassen".

Og man kan sige, at det nederste (count = 0;), betyder "count er 0". Men nu kan count også sættes til eksempelvis "hej", mens en Number-instans ikke kan. Så er det en fejl.
Avatar billede maqhem Nybegynder
05. januar 2007 - 18:06 #9
:Klasse betyder, at variablen kun kan indeholde typer af denne instans. For at gøre forskllen på :Array og new Array() klar, kan du se hér:

var a:Object = new Number(5);
a = new String("hej");
var b:String = new Number();

a giver ingen fejl, da Object godt kan indeholde rene tal.
b giver fejl, da String ikke kan indeholde rene tal.
Avatar billede maqhem Nybegynder
05. januar 2007 - 18:07 #10
An linje med a giver heller ingen fejl, da Object også kan indeholde strenge.
Avatar billede maqhem Nybegynder
05. januar 2007 - 18:07 #11
*Anden
Avatar billede maqhem Nybegynder
05. januar 2007 - 18:13 #12
Og man kan jo sige "hvorfor sætte Object til new String(), når både type og klasse forbliver Object, og String ikke kan aflæses nogle steder?". Det kan jeg faktisk ikke svare dig på. Det er vidst nok noget bed debugging.
Men uanset hvad, så synes jeg, det er pænt :)
Avatar billede supermand69 Nybegynder
05. januar 2007 - 20:30 #13
jeg kan godt følge dig i det du siger.. er også selv påpasselig med at få det lavet korrekt og udføre det hele på den "rigtige" og mest simple, egnede måde

men jeg ser lige på din kode her i weekenden :) skal lige sætte mig lidt ind i hvad de forskellige ting gør
Avatar billede supermand69 Nybegynder
05. januar 2007 - 20:43 #14
jeg modtager en fejl:

**Error** C:\Documents and Settings\Administrator\Desktop\array\kode.as: Line 10: The class or interface 'Linje' could not be loaded.
                this[track_arr] = new Linje(track_arr[i]);

Total ActionScript Errors: 1     Reported Errors: 1
Avatar billede supermand69 Nybegynder
05. januar 2007 - 20:48 #15
lige en ting mere.. hvad er det her for en klasse?

:Void
Avatar billede maqhem Nybegynder
05. januar 2007 - 20:57 #16
Så har du ikke fået lagt Linje.as ind i samme mappe. Eller har du? Måske er det med lille L i stedet for det store, som er vigtigt.

Void er, som den eneste kolon-klassificering, ingen klasse. Den fortæller, at funktionen ingenting returnerer.
Avatar billede supermand69 Nybegynder
05. januar 2007 - 21:06 #17
Avatar billede maqhem Nybegynder
05. januar 2007 - 21:14 #18
Jeg siger det gerne igen, altså for tredje gang: Linje.as SKAL være med stor L, og ikke lille, som du har skrevet det :)
Avatar billede maqhem Nybegynder
05. januar 2007 - 21:21 #19
Stor L, majuskel L, L - ikke lille l, minuskel l, l.
L ikke l.

Hehe, nu er det skåret ud i pap, så kan du ikke misforstå ;)
Desuden har jeg testet efter, og det fungerer upåklageligt med stort L frem for lille l.
Avatar billede supermand69 Nybegynder
05. januar 2007 - 21:23 #20
sejt - det virker!

men jeg troede du omtalte Linje i scriptet og ikke filnavne :)

tak for hjælpen
Avatar billede maqhem Nybegynder
05. januar 2007 - 21:25 #21
Det var så lidt. Skal noget rettes til? Jeg har set, du har nummeriseret de forskellige værdier i arrayet. Skal det bruges til noget bestemt?
Avatar billede supermand69 Nybegynder
05. januar 2007 - 21:25 #22
god weekend :)
Avatar billede supermand69 Nybegynder
05. januar 2007 - 21:26 #23
ja, jeg forsøger at lave en mp3 afspiller, hvor man kan lytte til previews (120-180 sek)

det er så id's på selve tracket
Avatar billede maqhem Nybegynder
05. januar 2007 - 21:28 #24
Skal jeg kode dem ind i scriptet på en bestemt måde? Eller er det kun til at bestemme rækkefølgen i arrayet? :)

Og tak, i lige måde.
Avatar billede supermand69 Nybegynder
05. januar 2007 - 21:36 #25
id'et skal ikke bestemme rækkefølgen, men det skal ske efter angivelsen i track_arr..

id'et skal bare være en indikation

når man tilføjer et nyt track i playlisten, skal det bare føjes til fra bunden
Avatar billede maqhem Nybegynder
05. januar 2007 - 21:39 #26
Det gør det nemlig ikke nu. Hvordan skal man så kunne se/kalde id'et?
Avatar billede maqhem Nybegynder
05. januar 2007 - 21:41 #27
Nu proppes den på fra bunden af:

kode.as:
import Linje;
var track_arr:Array = new Array();
function addValue(nnumber:Number, nvalue:String):Void {
    track_arr.push(nvalue);
}
function generateList():Void {
    var count:Number = new Number(0);
    for(var i:Number = new Number(0); i < track_arr.length; i++) {
        this[track_arr] = new Linje(track_arr[i]);
        // 20 er mellemrummet mellem de forskellige linier,
        // 50 er start-x og 100 er start-y.
        this[track_arr].X = 100;
        this[track_arr].Y = 20 * count++ + 50;
        this[track_arr].generate();
    }
}
Avatar billede maqhem Nybegynder
05. januar 2007 - 22:10 #28
... men nu bruger den ikke id til noget mere. Så det burde se således ud:

kode.as:
import Linje;
var track_arr:Array = new Array();
function addValue(nnumber:Number, nvalue:String):Void {
    track_arr.push(nvalue);
}
function generateList():Void {
    for(var i:Number = new Number(0); i < track_arr.length; i++) {
        this[track_arr] = new Linje(track_arr[i]);
        // 20 er mellemrummet mellem de forskellige linier,
        // 50 er start-x og 100 er start-y.
        this[track_arr].X = 100;
        this[track_arr].Y = 20 * i + 50;
        this[track_arr].generate();
    }
}

Og så i Flash:
#include "kode.as"
addValue("Bamses Venner - Fløjtesangen");
addValue("Kandis - Min nabo har 3 hunde");
addValue("Kjeld & Hilda - Se min gøj");
generateList();

Men nu skal id ikke identificeren nogen steder. Hvor skal den så proppes ind henne? :)
Avatar billede supermand69 Nybegynder
06. januar 2007 - 14:56 #29
jeg har ikke lige afprøvet det seneste du har skrevet, men er det ikke muligt at vedligeholde keys i et array?
Avatar billede supermand69 Nybegynder
06. januar 2007 - 14:59 #30
det jeg mener er at når man opretter et array vil det ALTID starte fra 0 og tælle numerisk frem?
Avatar billede maqhem Nybegynder
06. januar 2007 - 15:00 #31
Hvis du mener det på denne måde:

var track_arr:Array = new Array();
track_arr[54] = "Bamses Venner - Fløjtesangen";
track_arr[85] = "Kandis - Min nabo har 3 hunde";
track_arr[90] = "Kjeld & Hilda - Se min gøj";

Så jo, det er det da. Men så bliver track_arr[54] jo sat til "Bamses Venner - Fløjtesangen". Hvis de bare skal proppes på fra bunden af, og det stadigvæk skal holdet på et associativt niveau, så kunne man jo gøre som følgende:

var track_arr:Array = new Array();
track_arr["associativ54"] = "Bamses Venner - Fløjtesangen";
track_arr["associativ85"] = "Kandis - Min nabo har 3 hunde";
track_arr["associativ90"] = "Kjeld & Hilda - Se min gøj";

Så vil rækkefølgen nemlig ikke være påvirket af tallet i din nøgle. Er det sådan noget, du ønsker?
Avatar billede supermand69 Nybegynder
06. januar 2007 - 15:09 #32
når man kører arrayet igennem en for løkke skal id'et skrives med titlen
Avatar billede maqhem Nybegynder
06. januar 2007 - 15:13 #33
Kan du så ikke bare gøre som i mit sidste eksempel, og gøre således i stedet:

Flash:
#include "kode.as"
addValue("54 Bamses Venner - Fløjtesangen");
addValue("85 Kandis - Min nabo har 3 hunde");
addValue("90 Kjeld & Hilda - Se min gøj");
generateList();
Avatar billede supermand69 Nybegynder
06. januar 2007 - 15:14 #34
Måden det skal virke på er at jeg har et array som sendes fra et Javascript ind i min swf. I swf'en skal der være et tilsvarende array, som muligvis ikke er tomt.

Array'et fra JS skal så merges ind i swf'en, hvor det skal beholde id intakt
Avatar billede supermand69 Nybegynder
06. januar 2007 - 15:15 #35
jo, men jeg har flere variabler som skal sendes med

id
title
time
genre
Avatar billede maqhem Nybegynder
06. januar 2007 - 15:15 #36
#include "kode.as"
addValue(" Bamses Venner - Fløjtesangen");
addValue("85 Kandis - Min nabo har 3 hunde");
addValue("90 Kjeld & Hilda - Se min gøj");
generateList();
Avatar billede maqhem Nybegynder
06. januar 2007 - 15:16 #37
Hovsa, det sidste var en fejl.

Hvordan ser det ud i javascriptet?
Avatar billede supermand69 Nybegynder
06. januar 2007 - 15:23 #38
jo, men er heller ikke helt sikker på hvordan det skal arrangeres i JS? :)

men jeg vil tro det skal se nogenlunde sådan her ud (fortæl mig hvis du mener anderledes.. hehe)

var id_arr = new Array(
    54,
    85,
    90
);

var title_arr = new Array(
    'Bamses Venner - Fløjtesangen',
    'Kandis - Min nabo har 3 hunde',
    'Kjeld & Hilda - Se min gøj'
);

var time_arr = new Array(
    205,
    351,
    125
);

var title_arr = new Array(
    'Techno-jazz',
    'Trampemusik',
    'Anden genre'
);
Avatar billede supermand69 Nybegynder
06. januar 2007 - 15:24 #39
hov, den sidste skulle så være genre_arr og ikke title_arr
Avatar billede supermand69 Nybegynder
06. januar 2007 - 15:32 #40
jeg er vandt til at kode i PHP og det er jo forholdsvis "let" da der findes mange indbyggede funktioner til mange basale opgaver
Avatar billede maqhem Nybegynder
06. januar 2007 - 15:34 #41
Ja, hvorfor ordnet du det dog ikke bare i PHP? :)

Jeg mixer lige en løsning til dit problem...
Avatar billede supermand69 Nybegynder
06. januar 2007 - 15:36 #42
Jeg bliver vel nød til at lave det i JS, da det jo skal sendes til mit swf object?
Avatar billede maqhem Nybegynder
06. januar 2007 - 15:41 #43
Uha, hvis du tror JavaScript er det eneste, der kan snake med Flash, så er det da næsten synd. PHP gør det selvfølgelig også.

Hvad ville Flash være uden kommunikation til omverdenen? Og var JavaScript det eneste, så er det da slet ikke sjovt :)

Skal jeg lave et udførligt script, der henter variablerne fra PHP?
Avatar billede supermand69 Nybegynder
06. januar 2007 - 15:49 #44
jamen så er der vist noget jeg har misforstået :)

gider du lige give mig et lille eks. på hvordan det kan lade sig gøre?
Avatar billede supermand69 Nybegynder
06. januar 2007 - 15:50 #45
altså princippet i hvordan det foregår
Avatar billede maqhem Nybegynder
06. januar 2007 - 15:51 #46
Jeg laver lige nogle filer, jeg så uploader, som du kan se :)
Avatar billede maqhem Nybegynder
06. januar 2007 - 16:35 #47
Fra PHP til Flash går ingen specialbogstaver, så dem må du kode dig til. Det duer heller ikke med eksempelvis &38;, men jeg har løst det anderledes. Sådan hér:

æ = |ae|
ø = |oe|
å = |aa|
& = |og|

Der er vidst ingen andre udveje, men dette burde ikke være det store problem.

Så skal resten bare se sådan hér ud:


PHP:
<?php
    $array = array(
        array(54, "Bamses Venner - Fl|oe|jtesangen", 205, "Techno-jazz"),
        array(85, "Kandis - Min nabo har 3 hunde", 351, "Trampemusik"),
        array(90, "Kjeld |og| Hilda - Se min g|oe|j", 125, "Anden genre")
    );
   
    echo "sange=";
    foreach ($array as $value) {
        echo ":" . $value[0] . "*" . $value[1] . "*" . $value[2] . "*" , $value[3];
    }
?>

Flash:
#include "kode.as"

kode.as:
import Linje;
var track_arr:Array = new Array();
var PHP:LoadVars = new LoadVars();
PHP.onLoad = function() {
    for(var i:Number = new Number(1); i < PHP.sange.split(":").length; i++) {
        var temp:String = new String(PHP.sange.split(":")[i]);
        addValue(temp.split("*")[0], convert(temp.split("*")[1]), temp.split("*")[2], convert(temp.split("*")[3]));
    }
    generateList();
}
PHP.load("http://www.maqhem.com/exp/mitPHP.php");
function addValue(id:Number, sang:String, tid:Number, genre:String):Void {
    track_arr.push([id, sang, tid, genre]);
}
function convert(cVal:String):String {
    return cVal.split("|ae|").join("æ").split("|oe|").join("ø").split("|aa|").join("å").split("|og|").join("&");
}
function generateList():Void {
    var count:Number = new Number(0);
    for(var i:Number = new Number(0); i < track_arr.length; i++) {
        this[track_arr] = new Linje(track_arr[i][0], track_arr[i][1], track_arr[i][2], track_arr[i][3]);
        this[track_arr].X = 100;
        this[track_arr].Y = 20 * count++ + 50;
        this[track_arr].generate();
    }
}

Linje.as:
class Linje {
    private var id:Number;
    private var val:String;
    private var time:Number;
    private var genre:String;
    private var xp:Number;
    private var yp:Number;
    public function Linje(nid:Number, nval:String, ntime:Number, ngenre:String) {
        id = new Number(0);
        val = new String(null);
        time = new Number(0);
        genre = new String(null);
        xp = new Number(0);
        yp = new Number(0);
        if(nid) {
            id = nid;
        }
        if(nval) {
            val = nval;
        }
        if(ntime) {
            time = ntime;
        }
        if(ngenre) {
            genre = ngenre;
        }
    }
    public function generate():Void {
        var tempValue:String = new String(val);
        with(_root.createEmptyMovieClip(val + "t", _root.getNextHighestDepth()).createTextField("txt", 0, xp, yp, 0, 0)) {
            autoSize = true;
            wordWrap = false;
            selectable = false;
            html = true;
            var my_fmt:TextFormat = new TextFormat();
            my_fmt.color = 0x000000;
            my_tfm.type = "static";
            htmlText = "<font face='Courier New'>" + this.Id + " </font><b>" + this.Value + "</b> (<i>" + this.Genre + "</i>) - " + this.Time;
            setTextFormat(my_fmt);
        }
        var tempTextWidth:Number = new Number(_root[val + "t"].txt.textWidth);
        var tempTextHeight:Number = new Number(_root[val + "t"].txt.textHeight);
        with(_root.createEmptyMovieClip(val + "p", _root.getNextHighestDepth())) {
            _x = this.X;
            _y = this.Y + 2;
            beginFill(0xffff00, 100);
            lineTo(tempTextWidth + 4, 0);
            lineTo(tempTextWidth + 4, tempTextHeight + 2);
            lineTo(0, tempTextHeight + 2);
            lineTo(0, 0);
            _alpha = 0;
        }
        _root[val + "p"].onRollOver = function() {
            this.useHandCursor = false;
            this._alpha = 60;
        }
        _root[val + "p"].onRollOut = function() {
            this._alpha = 0;
        }
        _root[val + "p"].onPress = function() {
            trace(tempValue);
        }
        _root[val + "t"].swapDepths(_root.getNextHighestDepth());
    }
    public function set Id(nid:Number):Void {
        id = nid;
    }
    public function get Id():Number {
        return id;
    }
    public function set Value(nval:String):Void {
        val = nval;
    }
    public function get Value():String {
        return val;
    }
    public function set Time(ntime:Number):Void {
        time = ntime;
    }
    public function get Time():Number {
        return time;
    }
    public function set Genre(ngenre:String):Void {
        genre = ngenre;
    }
    public function get Genre():String {
        return genre;
    }
    public function set X(newx:Number):Void {
        xp = newx;
    }
    public function get X():Number {
        return xp;
    }
    public function set Y(newy:Number):Void {
        yp = newy;
    }
    public function get Y():Number {
        return yp;
    }
}

Så duer det fint.
Du skal selvfølgelig lige erstatte http://www.maqhem.com/exp/mitPHP.php i kode.as med din url til din php-side. Men du må gerne bruge den til at teste efter med :)
Avatar billede maqhem Nybegynder
06. januar 2007 - 16:43 #48
Du kan få filerne hér:

http://www.maqhem.com/exp/filer.zip
Avatar billede supermand69 Nybegynder
06. januar 2007 - 17:10 #49
jeg vil gerne være besværlig :)

det skulle jo gerne være sådan at man kan tilføje sange over flere omgange.. så hvordan kan flash vide hvornår mitPHP.php bliver opdateret?
Avatar billede maqhem Nybegynder
06. januar 2007 - 17:12 #50
Pyt med det, så lærer jeg jo også mere :)

Sætter lige noget sammen...
Avatar billede supermand69 Nybegynder
06. januar 2007 - 17:15 #51
Jeg vil så nok bare mene at JS forslaget ville virke bedst til denne opgave.. Ikke mindst fordi PHP modellen ikke er kompatibel med specielle tegn, og ikke fordi det direkte er et problem, men det vanskeliggør bare det hele lidt. Man skal jo næsten lave en omskrivning for ALLE specieltegn, da man på forhånd ikke aner hvilke tegn scriptet bliver udsat for

Ud overdet skal der på vilkårlige tidspunkter være mulighed for at føje flere tracks til listen i Flash, som jeg igen mener er bedst ved hjælp af JS :)

Jeg ved ikke særlig meget om Flash, da det er forholdsvis nyt for mig. Men det er bare som jeg ser det ud fra de her 2 metoder
Avatar billede maqhem Nybegynder
06. januar 2007 - 17:28 #52
Jeg programmerer ikke JavaScript, og kan ikke lave dette til dig. Men jeg kan lave det med PHP, og når der i PHP-listen tilføjes eller ændres tracks, så gør den også i Flash, hvis du ændrer kode.as til dette:

import Linje;
var track_arr:Array;
update();
function update():Void {
var PHP:LoadVars = new LoadVars();
    var tempArray:Array = new Array();
    if(track_arr) {
        tempArray = track_arr;
    } else {
        tempArray = null;
    }
    track_arr = new Array();
    PHP.onLoad = function() {
        for(var i:Number = new Number(1); i < PHP.sange.split(":").length; i++) {
            var temp:String = new String(PHP.sange.split(":")[i]);
            addValue(temp.split("*")[0], convert(temp.split("*")[1]), temp.split("*")[2], convert(temp.split("*")[3]));
        }
        if(tempArray != null) {
            for(var i:Number = new Number(0); i < tempArray.length; i++) {
                _root[tempArray[i][1] + "t"].removeMovieClip();
            }
        }
        generateList();
        update();
    }
    PHP.load("http://www.maqhem.com/exp/mitPHP.php");
}
function addValue(id:Number, sang:String, tid:Number, genre:String):Void {
    track_arr.push([id, sang, tid, genre]);
}
function convert(cVal:String):String {
    return cVal.split("|ae|").join("æ").split("|oe|").join("ø").split("|aa|").join("å").split("|og|").join("&");
}
function generateList():Void {
    var count:Number = new Number(0);
    for(var i:Number = new Number(0); i < track_arr.length; i++) {
        this[track_arr] = new Linje(track_arr[i][0], track_arr[i][1], track_arr[i][2], track_arr[i][3]);
        this[track_arr].X = 100;
        this[track_arr].Y = 20 * count++ + 50;
        this[track_arr].generate();
    }
}

Desuden kan du ikke komme uden om dette med specialtegn. Flash kan kun adskille variabler fra hinanden ved &, og hvis du så vil have dette tegn, må du jo kode dig fra det. Jeg ved ikke, hvordan Flash modtager variablerne fra JavaScript, men det er nok noget i samme stil.

Uanset hvad, så kan du godt vide, hvilke tegn, dit PHP kommer ud for. Det kan kun være normale, og så følgende:

æ, ø, å, Æ, Ø, Å, ", ', (, [, ), ], -, &

Andre tegn har jeg dog aldrig set i en sangtitel.
Avatar billede maqhem Nybegynder
06. januar 2007 - 17:31 #53
Desuden, hvis du kan få begrænset dine specialtegn, så kan du sikkert også få PHP til at gøre hele arbejdet for dig i scriptet, inden det bliver sendt til Flash.
Avatar billede maqhem Nybegynder
06. januar 2007 - 17:35 #54
Og så vil jeg lige tilføje, at jeg lige har testet, og kun + og * skal kodes om af følgende:

() [] $@#123½}{ ,. ? -/+*

Så det er altså ikke alle specialtegn :)
Avatar billede mat Nybegynder
06. januar 2007 - 19:32 #55
angående specialkarakterer fra php, så kig på php funktionen utf8_encode (evt sammen med urlencode) så er i fri for det streng parseri for at erstatte tegn i flash - det virker en kende for "hacket" ;)

mvh mat
Avatar billede maqhem Nybegynder
06. januar 2007 - 19:47 #56
Ja, det er lidt noget hø at skal uden om det på denne måde... Men når du siger, det kan løses anderledes, så kan det jo nok :)

Men ampersanden og lighedsoperatoren skal vel stadig kodes om, ikke?
Avatar billede mat Nybegynder
06. januar 2007 - 19:53 #57
nøh det tror jeg ikke, de erstattes jo i strengen?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester