IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flash Pascal Discussion :

Fusion de couches [Flash Pascal]


Sujet :

Flash Pascal

  1. #1
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut Fusion de couches
    mon problème est le suivant : pour ma synthèse additive des couleurs, je voudrais faire varier les intensités de couleur de mes spots.
    J'ai rajouté un bouton marche-arrêt et un zoom...je voulais avoir quelque chose de plus complet...

    Le premier réflexe est de changer la couleur du beginfill() des spots à l'aide de trackbars... Je ne l'ai pas fait puisqu'il est nécessaire de redessiner et ça plombe l'animation. Du coup, j'ai pensé qu'il me fallait changer uniquement le opaquebackground et faire un mask circulaire...

    pour me faire comprendre, ci-joint un exemple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    program Pspot;
     
    {$FRAME_WIDTH 1000}
    {$FRAME_HEIGHT 600}
    {$BACKGROUND $000000}
     
    uses
      Flash8,utrack;
     
     
    type
     TTrackbar1=class(TTrackbar)
      procedure onChange;override;
     end;
     
     Tspot=class(movieclip)
      track:TTrackbar1;
      Procedure circle(Cx,Cy,Radius:number);
      constructor create;
     end;
     
     
     
    var spot:Tspot;
     
    Function RGB(R,V,B:integer):number;
    begin
     result:=65536*R+256*V+B;
    end;
     
    Procedure Tspot.circle(Cx,Cy,Radius:number);
    var a,b,R: number;
    begin
      R:=Radius;
      a:= R * 0.414213562;
      b:= R * 0.707106781;
      moveTo(Cx+R,Cy);
      CurveTo(Cx+ R, Cy+-a, Cx+b,Cy -b);
      CurveTo(Cx+ a,Cy-R,Cx,Cy -r);
      CurveTo(Cx-a,Cy -R,Cx-b,Cy -b);
      CurveTo(Cx-R, Cy-a,Cx-R,Cy);
      CurveTo(Cx-R,Cy+a,Cx-b,Cy+b);
      CurveTo(Cx-a,Cy +R,Cx,Cy+r);
      CurveTo(Cx+a,Cy +R,Cx+b,Cy+b);
      CurveTo(Cx+R,Cy+a,Cx+R,Cy);
    end;
     
    constructor Tspot.create;
    begin
     inherited create(_root,'spot',0);
     opaquebackground:=clred;
     beginFill(0);
     lineto(400,0);
     lineto(400,400);
     lineto(0,400);
     circle(200,200,150);
     track:=TTrackbar1.create(_root,300,0,255,255,'vertical');
     with track do
     begin
       _x:=600;
       _y:=150;
     end;
     _x:=100;
     _y:=100;
    end;
     
    procedure TTrackbar1.onChange;
    begin
     spot.opaquebackground:=rgb(floor(position),0,0);
    end;
     
    begin
     spot:=Tspot.create;
    end.
    +utrack...(rappel)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
     
    unit UTrackbar;
     
    interface
    uses Flash8;
     
     
    type
     
       TTrackcur=class(MovieClip)
        orientation:string;
        xmouse,ymouse,trackmin,trackmax:number;
        xcur,ycur:Integer;
        downcur:Boolean;
        Procedure circle(Cx,Cy,Radius:number);
        constructor Create(AOWNER:Movieclip;trmin,trmax:number);
        procedure onPress;Override;
        procedure onEnterFrame;override;
        procedure onMouseUp;override;
       end;
     
       TTrackbar=class(MovieClip)
       private
        w,h:number;
        state:string;
        cur: TTrackcur;
        procedure Roundrect(x,y,w,h,radius:number);
        procedure DrawTrackbar(Width,Height:number);
     
       public
        position:number;
        procedure onChange; virtual;
        constructor Create(AOWNER:Movieclip;FTaille,trmin,trmax,posi:number;Kind:string);
       end;
     
    implementation
     
     
    constructor TTrackcur.create(AOWNER:Movieclip;trmin,trmax:number);
     var matrix: Flash8.Matrix;
    begin
      inherited Create(AOWNER,'cur',AOWNER.getNextHighestDepth);
      matrix := Flash8.Matrix.Create();
      matrix.createBox(1,1,0,10,14);
      linestyle(1,$87B6B7);
      beginGradientFill('radial',[$008080,clwhite],[100,100],[0,14],matrix);
      Circle(6,6,15);
      downcur:=false;
      xmouse:=0;
      ymouse:=0;
      trackmin:=trmin;
      trackmax:=trmax;
    end;
     
    constructor TTrackbar.Create(AOWNER:Movieclip;FTaille,trmin,trmax,posi:number;Kind:string);
    begin
     inherited Create(AOWNER,'trackbar',AOWNER.getNextHighestDepth);
     w:=FTaille;
     state:=Kind;
     DrawTrackBar(w,12);
     cur:=TTrackcur.Create(self,trmin,trmax);
     cur.orientation:=Kind;
     position:=posi;
     if kind='horizontal' then
     begin
      cur._x:=(posi-trmin)*w/(trmax-trmin);
      cur._y:=0;
     end else
     if kind='vertical' then
     begin
      cur._y:=(trmax-posi)*w/(trmax-trmin);
      cur._x:=0;
     end;
    end;
     
    procedure TTrackbar.DrawTrackbar(Width, Height: number);
    var matrix: Flash8.Matrix;
    begin
     matrix := Flash8.Matrix.Create();
     if state='horizontal' then
     begin
      matrix.createGradientBox(width, height, Math.PI/2, 0, 0);
      beginGradientFill('linear',[$deedf6,$c4e5f6,$98d1ef,$66afd7],[100,100,100,100],[8,64,127,255],matrix);
      linestyle(2,$98d1ef);
      RoundRect(0,0,width,height,height/2);
     end else if state='vertical' then
     begin
      matrix.createGradientBox(height,width,0, 0, 0);
      beginGradientFill('linear',[$deedf6,$c4e5f6,$98d1ef,$66afd7],[100,100,100,100],[8,64,127,255],matrix);
      RoundRect(0,0,height,width,height/2);
      linestyle(2,$98d1ef);
     end;
    end;
     
    procedure  TTrackcur.onPress;
    begin
     downcur:=true;
     xmouse:=_xmouse;
     ymouse:=_ymouse;
    end;
     
    procedure  TTrackcur.onEnterFrame;
    var tr:TTrackbar;
    begin
         tr:= TTrackbar(_parent);
     
         if downcur then
         if orientation='horizontal' then
         begin
          _x:= _x + _xmouse -xmouse;
          if _x<0 then _x:=0;
          if _x>tr.w then _x:=tr.w;
          tr.position:=_x*(trackmax-trackmin)/tr.w+trackmin;
         end
         else if orientation='vertical' then
         begin
          _y:= _y +_ymouse -ymouse;
          if _y<0 then _y:=0;
          if _y>tr.w then _y:=tr.w;
          tr.position:=trackmax-(_y*(trackmax-trackmin)/tr.w);
         end;
         tr.onChange;
    end;
     
     
     
    procedure  TTrackcur.onMouseUp;
    begin
     downcur:=false;
    end;
     
    procedure TTrackbar.Roundrect(x,y,w,h,radius:number);
    var
     ra,b:number;
    begin
      ra := x + w;
      b := y + h;
      moveTo(x+radius, y);
      lineTo(ra-radius, y);
      CurveTo(ra,y, ra, y+radius);
      lineTo(ra, y+h-radius);
      CurveTo(ra, b, ra-radius, b);
      lineTo(x+radius, b);
      CurveTo(x, b,x, b-radius);
      lineTo(x, y+radius);
      CurveTo(x, y, x+radius,y);
    end;
     
    Procedure TTrackcur.circle(Cx,Cy,Radius:number);
    var a,b,R: number;
    begin
      R:=Radius;
      a:= R * 0.414213562;
      b:= R * 0.707106781;
      moveTo(Cx+R,Cy);
      CurveTo(Cx+ R, Cy+-a, Cx+b,Cy -b);
      CurveTo(Cx+ a,Cy-R,Cx,Cy -r);
      CurveTo(Cx-a,Cy -R,Cx-b,Cy -b);
      CurveTo(Cx-R, Cy-a,Cx-R,Cy);
      CurveTo(Cx-R,Cy+a,Cx-b,Cy+b);
      CurveTo(Cx-a,Cy +R,Cx,Cy+r);
      CurveTo(Cx+a,Cy +R,Cx+b,Cy+b);
      CurveTo(Cx+R,Cy+a,Cx+R,Cy);
    end;
     
    procedure TTrackbar.onChange;
    begin
    end;
     
    end.
    Donc me voilà tranquille avec la modif de couleurs sans plomber l'animation...
    Mais le problème, c'est que je rajoute une couche avec cette technique de masque et le BlendMode:='add' ne marche plus (3 couches...)

    J'ai tenté de créer un movieclip appartenant à Tspot au niveau 0 et j'ai dessiné dedans plutôt que dans TSpot directement.
    Je me suis dit que peut-être, cet ensemble ne constituerait plus qu'une seule couche... ça ne marche pas.

    comment fusionner des couches si cela est possible ?

    par une autre technique setmask, je ne peux pas faire de masque sous forme de trou... ça plante.

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    je pense que tu peux t'en sortir soir avec un masque, soit avec un filtre

    pour le masque tu peux regarder l'exemple SpotLight, pour les filtres j'en utilise sur des bitmap dans l'exemple Woods, mais ça doit pouvoir fonctionner sur un MovieClip
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    J'ai déjà survolé spotlight... je vais regarder ça plus précisément...
    pareil pour le motif couleur bois...
    [code]

    sinon, voilà ce que ça fait pour reprendre le code que j'avais déjà posté...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
     
     
    program PsyntheseAdd;
     
    {$FRAME_WIDTH 1024}
    {$FRAME_HEIGHT 600}
    {$FRAME_RATE 60}
    {$BACKGROUND $000000}
     
    uses
      Flash8;
     
    type
     
     lumiere=class(movieclip)
      private
       Procedure circle(Cx,Cy,Radius:number);
      public
       constructor create(aowner:movieclip;taille,couleur:integer);
     end;
     
     scene=class(movieclip)
      retour:boolean;
      rouge,vert,bleu:lumiere;
      constructor create;
      Procedure onEnterFrame;override;
     end;
     
    Const D=250;
          dl=2;
     
    constructor scene.create;
    begin
     inherited create(_root,'scene',0);
     
     rouge:=lumiere.create(self,D,$FF0000);
     with rouge do
     begin
      _x:=Stage.width/2-stage.height/2+D/2;
      _y:=stage.height/2;
     end;
     
     vert:=lumiere.create(self,D,$00FF00);
     with vert do
     begin
      _x:=Stage.width/2+stage.height/2-D/2;
      _y:=stage.height/2;
     end;
     
     bleu:=lumiere.create(self,D,$0000FF);
     with bleu do
     begin
      _x:=Stage.width/2;
      _y:=stage.height-D/2;
     end;
     retour:=false;
    end;
     
    constructor lumiere.create(aowner:movieclip;taille,couleur:integer);
    begin
     inherited create(aowner,'diapo', aowner.getNextHighestDepth());
     opaquebackground:=couleur;
     beginFill(0);
     moveto(-taille/2,-taille/2);
     lineto(taille/2,-taille/2);
     lineto(taille/2,taille/2);
     lineto(-taille/2,taille/2);
     lineto(-taille/2,-taille/2);
     circle(0,0,taille/2);
     blendmode:='add';
    end;
     
    Procedure lumiere.circle(Cx,Cy,Radius:number);
    var a,b,R: number;
    begin
      R:=Radius;
      a:= R * 0.414213562;
      b:= R * 0.707106781;
      moveTo(Cx+R,Cy);
      CurveTo(Cx+ R, Cy+-a, Cx+b,Cy -b);
      CurveTo(Cx+ a,Cy-R,Cx,Cy -r);
      CurveTo(Cx-a,Cy -R,Cx-b,Cy -b);
      CurveTo(Cx-R, Cy-a,Cx-R,Cy);
      CurveTo(Cx-R,Cy+a,Cx-b,Cy+b);
      CurveTo(Cx-a,Cy +R,Cx,Cy+r);
      CurveTo(Cx+a,Cy +R,Cx+b,Cy+b);
      CurveTo(Cx+R,Cy+a,Cx+R,Cy);
    end;
     
    procedure scene.onEnterFrame;
    begin
     if  (rouge._x >stage.width/2) or (rouge._x<Stage.width/2-stage.height/2+D/2)  then retour:=not retour;
     if not retour then
     begin
      rouge._x:=rouge._x+dl;
      vert._x:=vert._x-dl;
      bleu._y:=bleu._y-dl;
     end else
     begin
      rouge._x:=rouge._x-dl;
      vert._x:=vert._x+dl;
      bleu._y:=bleu._y+dl;
     end;
    end;
     
    begin
      scene.create;
    end.
    merci, je cogite avec tes exemples...

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    hello je t'ai dit des bêtises, dans spotLight je n'utilise pas un mask, je voulais le faire mais je ne sais plus pourquoi ça ne fonctionnait pas comme je le voulais


    mais j'ai trouve un truc pour toi MovieClip.Transform.ColorTransform, le seul truc particulier c'est la façon dont il faut le modifier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    var
      t: Transform;
      c: ColorTransform;
    begin
    // rouge.transform.colortransform.alphaMultiplier := 0.5; !!! marche pas !!!
     t := rouge.transform;
     c := t.ColorTransform;
     c.alphaMultiplier := 0.5;
     t.ColorTransform := c;
     rouge.transform := t;
    end;
    avec ça tu peux même avoir des disques blancs et jouer sur redMultiplier, greedMultiplier et blueMultiplier
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    nickel, je tente le coup ce soir...

    un essai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    program Pspot;
     
    {$FRAME_WIDTH 1000}
    {$FRAME_HEIGHT 600}
    {$BACKGROUND $000000}
     
    uses
      Flash8,utrack;
     
     
    type
     TTrackbar1=class(TTrackbar)
      procedure onChange;override;
     end;
     
     Tspot=class(movieclip)
      track:TTrackbar1;
      Procedure circle(Cx,Cy,Radius:number);
      constructor create;
     end;
     
     
     
    var spot:Tspot;
        t: Transform;
        c: ColorTransform;
     
    Function RGB(R,V,B:integer):number;
    begin
     result:=65536*R+256*V+B;
    end;
     
    Procedure Tspot.circle(Cx,Cy,Radius:number);
    var a,b,R: number;
    begin
      R:=Radius;
      a:= R * 0.414213562;
      b:= R * 0.707106781;
      moveTo(Cx+R,Cy);
      CurveTo(Cx+ R, Cy+-a, Cx+b,Cy -b);
      CurveTo(Cx+ a,Cy-R,Cx,Cy -r);
      CurveTo(Cx-a,Cy -R,Cx-b,Cy -b);
      CurveTo(Cx-R, Cy-a,Cx-R,Cy);
      CurveTo(Cx-R,Cy+a,Cx-b,Cy+b);
      CurveTo(Cx-a,Cy +R,Cx,Cy+r);
      CurveTo(Cx+a,Cy +R,Cx+b,Cy+b);
      CurveTo(Cx+R,Cy+a,Cx+R,Cy);
    end;
     
    constructor Tspot.create;
    begin
     inherited create(_root,'spot',0);
     beginfill(clred);
     circle(200,200,150);
     track:=TTrackbar1.create(_root,300,0,100,100,'vertical');
     with track do
     begin
       _x:=600;
       _y:=150;
     end;
     _x:=100;
     _y:=100;
    end;
     
    procedure TTrackbar1.onChange;
    begin
     t := spot.transform;
     c := t.ColorTransform;
     c.redmultiplier :=position/100; //max 1 (de 0 à 1)
     t.ColorTransform := c;
     spot.transform := t;
    end;
     
    begin
     spot:=Tspot.create;
    end.
    concluant

    merci c'est top !

  6. #6
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    En brut de décoffrage sans optimisation du onEnterFrame, voilà ce que ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
     
    program PsyntheseAdd;
     
    {$FRAME_WIDTH 1024}
    {$FRAME_HEIGHT 600}
    {$FRAME_RATE 60}
    {$BACKGROUND $000000}
     
    uses
      Flash8,utrack;
    type
     lumiere=class(movieclip)
      private
       Procedure circle(Cx,Cy,Radius:number);
      public
       constructor create(aowner:movieclip;taille,couleur:integer);
     end;
     
     scene=class(movieclip)
      retour:boolean;
      track1,track2,track3:TTrackbar;
      constructor create;
      Procedure onEnterFrame;override;
     end;
     
    Const D=250;
          dl=2;
     
    var  t: Transform;
         c: ColorTransform;
         rouge,vert,bleu:lumiere;
     
    constructor scene.create;
    begin
     inherited create(_root,'scene',0);
     
     rouge:=lumiere.create(self,D,$FF0000);
     with rouge do
     begin
      _x:=Stage.width/2-stage.height/2+D/2;
      _y:=stage.height/2;
     end;
     
     vert:=lumiere.create(self,D,$00FF00);
     with vert do
     begin
      _x:=Stage.width/2+stage.height/2-D/2;
      _y:=stage.height/2;
     end;
     
     bleu:=lumiere.create(self,D,$0000FF);
     with bleu do
     begin
      _x:=Stage.width/2;
      _y:=stage.height-D/2;
     end;
     
     track1:=TTrackbar.create(_root,300,0,100,100,'vertical');
     with track1 do
     begin
       _x:=880;
       _y:=150;
     end;
     
     
     track2:=TTrackbar.create(_root,300,0,100,100,'vertical');
     with track2 do
     begin
       _x:=920;
       _y:=150;
     end;
     
     track3:=TTrackbar.create(_root,300,0,100,100,'vertical');
     with track3 do
     begin
       _x:=960;
       _y:=150;
     end;
     
    retour:=false;
    end;
     
    constructor lumiere.create(aowner:movieclip;taille,couleur:integer);
    begin
     inherited create(aowner,'diapo', aowner.getNextHighestDepth());
     beginFill(couleur);
     circle(0,0,taille/2);
     blendmode:='add';
    end;
     
    Procedure lumiere.circle(Cx,Cy,Radius:number);
    var a,b,R: number;
    begin
      R:=Radius;
      a:= R * 0.414213562;
      b:= R * 0.707106781;
      moveTo(Cx+R,Cy);
      CurveTo(Cx+ R, Cy+-a, Cx+b,Cy -b);
      CurveTo(Cx+ a,Cy-R,Cx,Cy -r);
      CurveTo(Cx-a,Cy -R,Cx-b,Cy -b);
      CurveTo(Cx-R, Cy-a,Cx-R,Cy);
      CurveTo(Cx-R,Cy+a,Cx-b,Cy+b);
      CurveTo(Cx-a,Cy +R,Cx,Cy+r);
      CurveTo(Cx+a,Cy +R,Cx+b,Cy+b);
      CurveTo(Cx+R,Cy+a,Cx+R,Cy);
    end;
     
    procedure scene.onEnterFrame;
    begin
     if  (rouge._x >stage.width/2) or (rouge._x<Stage.width/2-stage.height/2+D/2)  then retour:=not retour;
     if not retour then
     begin
      rouge._x:=rouge._x+dl;
      vert._x:=vert._x-dl;
      bleu._y:=bleu._y-dl;
     end else
     begin
      rouge._x:=rouge._x-dl;
      vert._x:=vert._x+dl;
      bleu._y:=bleu._y+dl;
     end;
     
     t :=rouge.transform;
     c := t.ColorTransform;
     c.redmultiplier :=track1.position/100;
     t.ColorTransform := c;
     rouge.transform := t;
     
     t :=vert.transform;
     c := t.ColorTransform;
     c.Greenmultiplier :=track2.position/100;
     t.ColorTransform := c;
     vert.transform := t;
     
     t :=bleu.transform;
     c := t.ColorTransform;
     c.bluemultiplier :=track3.position/100;
     t.ColorTransform := c;
     bleu.transform := t;
     
    end;
     
    begin
      scene.create;
    end.
    Par contre, une valeur décimale multipliée par une intensité de couleur, ça ne m'explique pas que ça puisse me renvoyer une valeur entière comprise entre 0 et 255.

    Quelle est le dessous de cette transformation ?

    j'ai supposé qu'ici, ça ne fait que le floor du résultat du produit de la valeur décimale (de 0 à 1) par mon intensité de couleur...

    Sinon, c'est encore du grand Chef

    merci

  7. #7
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    oui Flash se débrouille pour ne conserver qu'une valeur entre 0..255

    en fait plus je découvre Flash plus je trouve qu'il y a des tas de choses sympas si j'avais un peu de temps je me lancerais bien dans une version ActionScript 3 mais ça demande trop de travail pour le temps que j'ai à y consacrer.

    car, pour info, avec FlashPascal on peut faire une application AIR (car il est possible de transformer un .SWF en .AIR). L'avantage de AIR c'est qu'on n'est plus dans un navigateur, c'est une appli avec icône sur le bureau et qui apparait dans le panneau de config et tout

    On peut même, et là ça devient carrément intéressant, développer avec AIR sous Android...SAUF, et oui il y a un gros bémol, que AIR sous Android ne supporte pas ActionScript2, et donc FlashPascal2 ne fonctionne pas !
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #8
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    pour info, avec FlashPascal on peut faire une application AIR (car il est possible de transformer un .SWF en .AIR). L'avantage de AIR c'est qu'on n'est plus dans un navigateur, c'est une appli avec icône sur le bureau et qui apparait dans le panneau de config et tout

    On peut même, et là ça devient carrément intéressant, développer avec AIR sous Android...SAUF, et oui il y a un gros bémol, que AIR sous Android ne supporte pas ActionScript2, et donc FlashPascal2 ne fonctionne pas !
    Très intéressant..., je vais essayé le .AIR...
    C'est vrai que Flash est étonnant par ses possibilités !
    Je me mettrais bien à as3 mais quand je fais autre chose que du pascal, je suis vite lassé par la lourdeur de l'écriture et j'abandonne rapidement...
    Le plaisir n'est plus là.

    merci encore pour ta contribution

  9. #9
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    car il est possible de transformer un .SWF en .AIR).
    Comment ? , je n'ai pas trouvé de convertisseur...

  10. #10
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par Archimède Voir le message
    Comment ? , je n'ai pas trouvé de convertisseur...
    il faut utiliser le SDK Flex...ce n'est pas immédiat, mais je lance un nouveau Thread avec une manipulation simplifiée
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  11. #11
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    il faut utiliser le SDK Flex...ce n'est pas immédiat, mais je lance un nouveau Thread avec une manipulation simplifiée
    Merci, nickel !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fusion de lignes de tables en éliminant les redondances
    Par MinsK dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 22/04/2004, 09h21
  2. [MFC]Info sur da la fusion sous Word
    Par kor dans le forum MFC
    Réponses: 6
    Dernier message: 22/08/2003, 11h14
  3. Fusion directe dans word
    Par wozzy dans le forum Access
    Réponses: 10
    Dernier message: 03/06/2003, 21h02
  4. Tri par fusion d'un tableau
    Par Mailgifson dans le forum C
    Réponses: 5
    Dernier message: 12/12/2002, 14h53
  5. programmation reseau - couche 2 du modele osi
    Par sahor dans le forum C++Builder
    Réponses: 3
    Dernier message: 06/11/2002, 18h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo