0

Flash AS3では、イベントを使用して25個の正方形を作成しました(フルスクリーンで表示される正方形の1つをクリックすると)、中央の正方形で機能します(中央にあるため正常です)が、他の正方形はそれを超えています。画面...どうすればそれらすべてを同じ中央に表示できますか?

package  {
import flash.display.*;
import flash.events.*;
import gs.*;
import flash.text.TextField;

public class Fenetre extends MovieClip {
    var mc:MovieClip;
    var bol:Boolean;

    public function Fenetre(pX,pY,largeur) {
        mc = new MovieClip(); // Instanciation de l'objet MovieClip
        mc.x = pX; // Détermination de sa positon en X
        mc.y = pY; // Détermination de sa positon en Y
        addChild(mc); // Affichage de l'objet mc
        mc.graphics.beginFill(0xFFFFFF); 
        mc.graphics.lineStyle(.1,255);//épaisseur contour, couleur de contour
        mc.graphics.drawRect(-largeur/2,-largeur/2,largeur,largeur);

        mc.graphics.endFill();
        mc.scaleX = mc.scaleY = .166; //.5=0.5
        //
        mc.buttonMode = true;
        mc.addEventListener(MouseEvent.CLICK,onClique);
    }
    private function onClique(e:MouseEvent):void {
        bol=!bol;
        if(bol){
            TweenLite.to(mc,1,{scaleX:1,scaleY:1,onComplete:plein_ecran()});
        }
        else {
            TweenLite.to(mc,1,{scaleX:.166,scaleY:.166});
        }
    }
    private function plein_ecran(){
        var num:int=MovieClip(parent).numChildren-1;
        MovieClip(parent).setChildIndex(this,num);
    }
    private function decharger(){
        //trace("decharger");
    }
    public function createTextField(x:Number, y:Number, width:Number, height:Number, nbre:int):TextField {
        var result:TextField = new TextField();
        result.x = x;
        result.y = y;
        result.width = width;
        result.height = height;
        result.text = nbre.toString();
        addChild(result);
        return result;
    }
}

}

メインクラスに正方形を表示します:

package  {
import flash.display.*;
import flash.text.TextFieldAutoSize;

[SWF(width=600,height=600)]
public class Main extends MovieClip {
    var fenetre:Fenetre;
    var xml:charge_xml;
    var milieuX,milieuY:int;
    var i,j,k,l,maxX,maxY:int;

    public function Main() {
        milieuX=milieuY=5;
        xml=new charge_xml();
        j=5;
        l=0;
        for(j=0;j<milieuY;j++) { // Gère les positions en X
            for(i=0; i<milieuX;i++) { // Gère les positions en Y et X - Remplissement des cases
                l++;
                fenetre = new Fenetre(100*i+100,100*j+100,600);
                fenetre.createTextField(100*i+100,100*j+100,20,20,l);
                addChild(fenetre);
            }
        }
    }
}

}

私の英語でごめんなさい!私はフランス人です ... !

ご協力いただきありがとうございます!

4

1 に答える 1

0

問題の簡単な解決策は、scaleXプロパティとscaleYプロパティをトゥイーンすると同時に正方形を中央の位置にトゥイーンし、正方形が小さいサイズに戻ったときに元の位置に戻すことです。Fenetreクラスにいくつかの小さな変更を加えるだけで済みます。

  • まず、正方形の元の位置をクラス変数に格納します。

    public class Fenetre extends MovieClip {
      private var mc:MovieClip;
      private var bol:Boolean;
      private var x0:Number;
      private var y0:Number;
    
      public function Fenetre(pX:Number,pY:Number,largeur:uint) {
    
        x0 = pX;
        y0 = pY;
        //rest of your code is the same...
    
      }
    
  • 次に、Mouse.CLICKリスナーで、中央の位置にトゥイーンして戻ります。トゥイーンを開始する前にonComplete、 :ではなく子インデックスを変更する必要があると思います。

    private function onClique(e:MouseEvent):void {
       bol=!bol;
    
       if(bol){
        plein_ecran();
        TweenLite.to(mc,1,{scaleX:1,scaleY:1,x: mc.width/2, y: mc.height/2});
       }
       else {
        TweenLite.to(mc,1,{scaleX:.166,scaleY:.166, x:x0, y:y0 });
       }
    }
    
于 2013-02-12T15:05:31.647 に答える