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.