Je me suis essayé sur un dégradé radial sur un exemple simple :

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
 
 program degraderadial;
 
uses Flash8,Math;
 
 {$FRAME_WIDTH 400}
 {$FRAME_HEIGHT 400}
 
 
type
  TMovieclip = class(MovieClip)
    constructor Create;
    procedure circle(r,cx,cy:double);
  end;
 
 
 
constructor TMovieclip.Create;
var  Matrix1 :Matrix;
begin
 inherited Create(nil,'mymovieclip',1);
 matrix1:=Matrix.create;
 matrix1.createBox(1,1,0,200,200 );//1-1 : echelle 100% - 0 rad pour la rotation du dégradé - (200,200 ) coord du centre du dégradé radial
 beginGradientFill('radial',[$ff0000,$00ff00,$0000ff],[100,100,100],[10,30,80],Matrix1);
 circle(200,200,200);
 endFill();
end;
 
procedure  TMovieclip.Circle(r,cx,cy:double);
var a,b:Double;
begin
  a:= r * 0.414213562;
  b:= r * 0.707106781;
  lineStyle(3, $FFFBF0);
  moveTo(r+cx, cy);
  curveTo( r+cx, -a+cy, +b+cx, -b+cy);
  curveTo( a+cx, -r+cy, cx, -r+cy);
  curveTo(-a+cx, -r+cy, -b+cx, -b+cy);
  curveTo(-r+cx, -a+cy, -r+cx, cy);
  curveTo(-r+cx, +a+cy, -b+cx, +b+cy);
  curveTo(-a+cx, +r+cy, cx, +r+cy);
  curveTo( a+cx, +r+cy, +b+cx, +b+cy);
  curveTo( r+cx, +a+cy, +r+cx, cy);  
end;
 
 
 
begin
 TMovieclip.Create;
end.
Ma question est la suivante : pour le dernier tableau de BeginGradiantFill qui concerne tableau des positions sur lesquelles sont centrées les couleurs, le résultat est différent de celui attendu ...

Normalement, les positions des couleurs devraient être repérées par rapport au centre du dégradé vers le bout extérieur du rayon.

Le résultat ne semble pas être le cas...Comment ça marche

@+