Précédent   Forum du club des développeurs et IT Pro > Autres langages > Pascal > Flash Pascal
Flash Pascal Forum d'entraide sur la création de fichiers Flash en Object Pascal
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 05/11/2012, 11h35   #1
Archimède
Membre émérite
 
Avatar de Archimède
 
Homme anthony
Enseignant
Inscription : avril 2005
Messages : 1 028
Détails du profil
Informations personnelles :
Nom : Homme anthony
Localisation : France, Charente Maritime (Poitou Charente)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : avril 2005
Messages : 1 028
Points : 979
Points : 979
Par défaut Synthèse additive et obligation d'un fond noir

Ci-joint dans la foulée, la synthèse additive avec blendmode:='add' :

Code :
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
 
program PsyntheseAdd;
 
{$FRAME_WIDTH 650}
{$FRAME_HEIGHT 400}
{$FRAME_RATE 32}
{$BACKGROUND $00000}
 
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)
  rouge,vert,bleu:lumiere;
  constructor create;
 end;
 
 
constructor scene.create;
begin
 inherited create(_root,'scene',0);
 
 rouge:=lumiere.create(self,250,$0000ff);
 with rouge do
 begin
  _x:=300;
  _y:=150;
 end;
 
 vert:=lumiere.create(self,250,$ff0000);
 with vert do
 begin
  _x:=400;
  _y:=150;
 end;
 
 bleu:=lumiere.create(self,250,$00ff00);
 with bleu do
 begin
  _x:=350;
  _y:=250;
 end;
 
end;
 
constructor lumiere.create(aowner:movieclip;taille,couleur:integer);
begin
 inherited create(aowner,'diapo', aowner.getNextHighestDepth());
 Linestyle(10,clblack);
 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;
 
begin
  scene.create;
end.
Le souci étant que la synthèse de chaque movieclip se fait avec la couleur de l'arrière plan (ou le movie du dessous), il est nécessaire de partir au départ du noir pour le fond pour ne pas modifier la couleur des movieclips situés juste au dessus.

la parade serait de mettre un cache noir sans blendmode de même dimension sous chaque movieclip et d'utiliser ainsi la couleur désirée pour le Background de la scène.

Ce n'est pas très pratique si l'on veut animer les disques de lumière dans un onEnterFrame...

Une idée pour faire mieux ?
__________________
Citation:
tout développeur plongé dans son code subit une poussée d'urticaire de bas en haut égale au poids du volume d'unités qu'il ajoute.
Archimède est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2012, 12h31   #2
Archimède
Membre émérite
 
Avatar de Archimède
 
Homme anthony
Enseignant
Inscription : avril 2005
Messages : 1 028
Détails du profil
Informations personnelles :
Nom : Homme anthony
Localisation : France, Charente Maritime (Poitou Charente)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : avril 2005
Messages : 1 028
Points : 979
Points : 979
Avec l'animation :

Code :
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
 
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());
 Linestyle(10,clblack);
 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;
end;
 
begin
  scene.create;
end.
__________________
Citation:
tout développeur plongé dans son code subit une poussée d'urticaire de bas en haut égale au poids du volume d'unités qu'il ajoute.
Archimède est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 05/11/2012, 14h56   #3
Paul TOTH
Expert Confirmé Sénior
 
Avatar de Paul TOTH
 
Homme Paul TOTH
Freelance
Inscription : novembre 2002
Messages : 4 414
Détails du profil
Informations personnelles :
Nom : Homme Paul TOTH
Âge : 43
Localisation : Réunion

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

Informations forums :
Inscription : novembre 2002
Messages : 4 414
Points : 10 795
Points : 10 795
sympa
__________________
Developpez.com: Mes articles, forum FlashPascal
Entreprise: Execute SARL
Produits : UPnP, RemoteOffice, FlashPascal
Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5%
Paul TOTH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2012, 16h50   #4
Archimède
Membre émérite
 
Avatar de Archimède
 
Homme anthony
Enseignant
Inscription : avril 2005
Messages : 1 028
Détails du profil
Informations personnelles :
Nom : Homme anthony
Localisation : France, Charente Maritime (Poitou Charente)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : avril 2005
Messages : 1 028
Points : 979
Points : 979
merci, ça permet de voir avec la discussion précédente deux applications simples de blendmode...
__________________
Citation:
tout développeur plongé dans son code subit une poussée d'urticaire de bas en haut égale au poids du volume d'unités qu'il ajoute.
Archimède est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h04.


 
 
 
 
Partenaires

Hébergement Web