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 :

Matrix et paramètres manquants


Sujet :

Flash Pascal

  1. #1
    Membre expérimenté
    Matrix et paramètres manquants
    Je ne retrouve pas tous les paramètres d'actionscript au niveau des matrices....
    Le x,y par exemple, il est matérialisé par quoi ?

    @+

  2. #2
    Expert éminent sénior
    Qu'entends-tu par x et y ?!

    Flash ne gère que des matrices 2D sous la forme

    [a b tx]
    [c d ty]
    [0 0 1]

    c'est assez bien expliqué dans la rubrique Matrice ici
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre expérimenté
    Ok, ça marche...

    tx,ty correspondent aux x et y du lien que je regardais.
    Je vais me fier aux références officielles adobe.
    C'est parce que je n'ai toujours pas résolu la compréhension et la maitrise de
    beginGradientfill. c'est assez obscur...

    en effet, d'après la doc adobe actionscript2, je devrais avoir un beau dégradé rouge bleu avec ce code:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     matrix1.createbox(1,1,0,0,0);
     begingradientfill('linear',[$ff0000,$0000ff],[100,100],[0,255],matrix1);
     moveto(0,0);
     lineto(300,0);
     lineto(300,300);
     lineto(0,300);
     lineto(0,0);
     endFill();


    alors, je me demandais si ce n'était pas un soucis au niveau de la déclaration de la matrice...

    merci

  4. #4
    Expert éminent sénior
    Citation Envoyé par Archimède Voir le message
    Ok, ça marche...

    tx,ty correspondent aux x et y du lien que je regardais.
    Je vais me fier aux références officielles adobe.
    C'est parce que je n'ai toujours pas résolu la compréhension et la maitrise de
    beginGradientfill. c'est assez obscur...

    en effet, d'après la doc adobe actionscript2, je devrais avoir un beau dégradé rouge bleu avec ce code:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     matrix1.createbox(1,1,0,0,0);
     begingradientfill('linear',[$ff0000,$0000ff],[100,100],[0,255],matrix1);
     moveto(0,0);
     lineto(300,0);
     lineto(300,300);
     lineto(0,300);
     lineto(0,0);
     endFill();


    alors, je me demandais si ce n'était pas un soucis au niveau de la déclaration de la matrice...

    merci
    n'as-tu pas oublié de créer la matrice ? createbox est une méthode, pas un constructor.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
     matrix1 := Matrix.Create();
     matrix1.createbox(1,1,0,0,0);
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre expérimenté
    Oui, dans le bout de code, j'avais oublié de joindre le create mais de toute façon comme tout est objet en ActionScript, je le fais systématiquement...
    voici le code complet :
    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
     
    program  degrade;
     
    uses Flash8;
     
     
    {$FRAME_WIDTH 300}
    {$FRAME_HEIGHT 300}
     
    type
      Tdegrade = class(MovieClip)
        constructor Create;
      end;  
     
    constructor Tdegrade.Create;
    var matrix1:Matrix;
    begin
     inherited Create(nil,'degrade',1);
     matrix1.create();
     matrix1.createbox(1,1,0,0,0);
     begingradientfill('linear',[$ff0000,$0000ff],[100,100],[0,255],matrix1);
     moveto(0,0);
     lineto(300,0);
     lineto(300,300);
     lineto(0,300);
     lineto(0,0);
     endFill();
    end;
     
     
     
    begin
      Tdegrade.Create;
    end.


    tu peux tester...

  6. #6
    Membre expérimenté
    J'ai fait un test sur matrix, ci-joint :

    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
     
    program voeux2012;
     
    uses
      Flash8;
     
    {$FRAME_WIDTH 520}
    {$FRAME_HEIGHT 366}
    {$JPEG img 'voeux2012.jpg'}
     
    var
      b: BitmapData;
      matrix1:matrix;
    begin
       matrix1.create();
       matrix1.createBox(1,1,math.pi/4,0,0);
       b:= loadBitmap('img');
      _root.beginBitmapFill(b,matrix1);
      _root.moveto(0,0);
      _root.lineto(520, 0);
      _root.lineto(520,366);
      _root.lineto(0, 366);
      _root.lineto(0,0);
    end


    Normalement, l'image devrait pivotée de 45° par rapport au coin en haut à gauche... il n'en est rien ! ?

  7. #7
    Membre expérimenté
    même en utilisant translate et rotate...

    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
     
    program voeux2012;
     
    uses
      Flash8;
     
    {$FRAME_WIDTH 520}
    {$FRAME_HEIGHT 366}
    {$JPEG img 'voeux2012.jpg'}
     
    var
      b: BitmapData;
      matrix1:matrix;
    begin
       matrix1.create();
       matrix1.translate(260,183); //rotation sur le centre de l'image
       matrix1.rotate(math.pi/4);
       b:=BitmapData.create(520,366);
       b:= loadBitmap('img');
      _root.beginBitmapFill(b,matrix1);
      _root.moveto(0,0);
      _root.lineto(520, 0);
      _root.lineto(520,366);
      _root.lineto(0, 366);
      _root.lineto(0,0);
      _root.EndFill();
    end.


    et pourtant, c'est bien ce que tu fais sur le tourne page...

    J'ai même remplacé le jpeg par un bitmap...sans résultat

  8. #8
    Membre expérimenté
    une nouvelle tentative...

    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
     
    program nouvelessai;
     
    uses
      Flash8;
     
    {$FRAME_WIDTH 100}
    {$FRAME_HEIGHT 100}
    {$BACKGROUND $ffffff}
     
    var
      b: BitmapData;
      matrix1:matrix;
      image:movieclip;
    begin
       image:=movieclip.create(nil,'mondessin',1);
       image.linestyle($ff0000,3);
       image.moveto(0,0);
       image.lineto(100,0);
       image.lineto(100,100);
       image.lineto(0,100);
       image.lineto(0,0);  //un carré 100 sur1 00 contour rouge
       image._visible:=false; //on le cache en visuel
       b:=Bitmapdata.create(100,100);
       b.draw(image); //dessin du movieclip dans un bitmap(on passe d'un dessin vectoriel à un dessin par points)
       matrix1.create();
       matrix1.CreateBox(1,1,math.pi/6,50,50);  //rotation de pi/6 du centre du carré en gardant la même échelle
      _root.beginBitmapFill(b,matrix1);  //motif du remplissage
      _root.moveto(0,0);
      _root.lineto(100, 0);
      _root.lineto(100,100);
      _root.lineto(0,100);
      _root.lineto(0,0);
      _root.EndFill();  //le résultat attendu est différent...?
    end.

  9. #9
    Expert éminent sénior
    tu répètes la même boulette à chaque fois

    matrix1.create au lieu de matrix1 := Matrix.Create
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  10. #10
    Membre expérimenté
    ah oui en effet, je n'aurais pas dû appelé mon instance comme la classe correspondante... mais ça ne règle toujours pas le problème...

  11. #11
    Membre expérimenté
    En effet, pour l'image, ça fonctionne... mais pour le dernier exemple non.

  12. #12
    Membre expérimenté
    le dégradé, c'est bon aussi...

  13. #13
    Membre expérimenté
    pour le dernier exemple, je devrais avoir un seul carré centré et décalé de pi/6 non ?

  14. #14
    Membre expérimenté
    Je répète mon interrogation lol ; c'est quoi la boulette ici ??
    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
     
    program nouvelessai;
     
    uses
      Flash8;
     
    {$FRAME_WIDTH 100}
    {$FRAME_HEIGHT 100}
    {$BACKGROUND $ffffff}
     
    var
      bmp: BitmapData;
      m:matrix;
      image:movieclip;
    begin
       image:=movieclip.create(nil,'monmotif',1);
       image.linestyle($ff0000,3);
       image.beginFill($ffffff);
       image.moveto(0,0);
       image.lineto(100,0);
       image.lineto(100,100);
       image.lineto(0,100);
       image.lineto(0,0);  //un carré 100 sur 100 contour rouge
       bmp:=Bitmapdata.create(100,100);
       bmp.draw(image); //dessin du movieclip dans un bitmap(on passe d'un dessin vectoriel à un dessin par points)
       image._visible:=false; //on le cache en visuel
       m:=matrix.create();
       m.CreateBox(1,1,math.pi/6,50,50);  //rotation de pi/6 du centre du carré en gardant la même échelle
      _root.beginBitmapFill(bmp,m);  //motif du remplissage
      _root.moveto(0,0);
      _root.lineto(100, 0);
      _root.lineto(100,100);
      _root.lineto(0,100);
      _root.lineto(0,0);
      _root.EndFill();  //le résultat attendu est différent...?  fond noir ? taille du carré position etc
    end.

  15. #15
    Expert éminent sénior
    tu as inversé les paramètres du linestyle

    faudrait vraiment que j'arrive à améliorer l'éditeur...c'est pénible d'aller voir à chaque fois dans l'unité les paramètres des fonctions...mais ce n'est pas très simple à mettre en oeuvre
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  16. #16
    Membre expérimenté
    Salut,

    ce n'est pas vrai.... Oui, et un plantage systématique à la compilation quand c'est possible.(ici ce n'était pas envisageable-->paramètres tous les deux en integer) En tout cas, ce n'est déjà pas mal
    Quand on sera bien familiarisé avec toutes les méthodes, ça ira mieux...

    En tout cas merci, il n'y avait pas de raison...tu faisais la même chose dans le tourne pages...

    je commençais à m'arracher les cheveux

  17. #17
    Rédacteur/Modérateur

    Citation Envoyé par Paul TOTH Voir le message
    faudrait vraiment que j'arrive à améliorer l'éditeur...c'est pénible d'aller voir à chaque fois dans l'unité les paramètres des fonctions...mais ce n'est pas très simple à mettre en oeuvre
    Ces choses qui ne sont pas simples à mettre en œuvre, à mon avis c'est du luxe. J'ai besoin d'un manuel tout simplement. Même si c'est un fichier texte, ça me va.

    Dans l'unité, on ne trouve pas tout ce qu'on voudrait savoir.

    Un manuel en français ! Voilà ce qu'il nous faut.

  18. #18
    Membre expérimenté
    voilà, je mets le résultat pour ceux qui n'auraient pas vu :
    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
     
    program dernieressai;
     
    uses
      Flash8;
     
    {$FRAME_WIDTH 500}
    {$FRAME_HEIGHT 500}
    {$BACKGROUND $ffffff}
     
    var
      bmp: BitmapData;
      m:matrix;
      image:movieclip;
    begin
       image:=movieclip.create(nil,'monmotif',1);
       image.linestyle(4,$74FF74);
       image.beginFill($8B008B);
       image.moveto(0,0);
       image.lineto(100,0);
       image.lineto(100,100);
       image.lineto(0,100);
       image.lineto(0,0);  //un carré 100 sur 100 contour rouge
       bmp:=Bitmapdata.create(100,100);
       bmp.draw(image); //dessin du movieclip dans un bitmap(on passe d'un dessin vectoriel à un dessin par points)
       image._visible:=false; //on le cache en visuel
       m:=matrix.create();
       m.CreateBox(1,1,math.pi/4,50,50);  //rotation de pi/6 du centre du carré en gardant la même échelle
      _root.beginBitmapFill(bmp,m);  //motif du remplissage
      _root.moveto(0,0);
      _root.lineto(500, 0);
      _root.lineto(500,500);
      _root.lineto(0,500);
      _root.lineto(0,0);
      _root.EndFill();
    end.


    C'est vrai qu'un simple fichier texte pourquoi pas...

    Mais je vais déjà commencer par m'imprimer flash8, ça m'évitera de faire des coquilles...et d'embêter tout le monde

    salut et à plus

  19. #19
    Membre expérimenté
    petite rectif, pour coller à ce que je voulais obtenir...
    la phrase :

    //rotation de pi/6 du centre du carré en gardant la même échelle
    est erronée...en fait le centre de la rotation s'effectue toujours à partir du coin en haut à gauche ou pour le point (tx,ty).
    A regarder le lien du premier post pour se rendre compte...

    ce que je voulais voir c'était ça (avec une rotation de 45° ici):

    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
     
    program dernieressai;
     
    uses
      Flash8;
     
    {$FRAME_WIDTH 500}
    {$FRAME_HEIGHT 500}
    {$BACKGROUND $ffffff}
     
    var
      bmp: BitmapData;
      m:matrix;
      image:movieclip;
    begin
       image:=movieclip.create(nil,'monmotif',1);
       image.linestyle(4,$74FF74);
       image.beginFill($8B008B);
       image.moveto(0,0);
       image.lineto(100,0);
       image.lineto(100,100);
       image.lineto(0,100);
       image.lineto(0,0);  //un carré 100 sur 100 contour rouge
       bmp:=Bitmapdata.create(100,100);
       bmp.draw(image); //dessin du movieclip dans un bitmap(on passe d'un dessin vectoriel à un dessin par points)
       image._visible:=false; //on le cache en visuel
       m:=matrix.create();
       m.CreateBox(1,1,math.pi/4,50*sqrt(2),0); //le racine carré, c'est pour la diagonale
      _root.beginBitmapFill(bmp,m);  //motif du remplissage
      _root.moveto(0,0);
      _root.lineto(100*sqrt(2), 0);
      _root.lineto(100*sqrt(2),100*sqrt(2));
      _root.lineto(0,100*sqrt(2));
      _root.lineto(0,0);
      _root.EndFill();  
    end.


    exemple pour la compréhension...

  20. #20
    Rédacteur/Modérateur

    Citation Envoyé par Archimède Voir le message
    exemple pour la compréhension...
    Merci pour l'exemple et l'explication. Je crois que j'ai compris le principe. Intéressant !

###raw>template_hook.ano_emploi###