0

在 Flash AS3 中,我创建了 25 个带有事件的正方形(当您单击其中一个以全屏显示的正方形时)它在中间的正方形上工作(这很正常,因为它在中间)但对于另一个它超过了屏幕...我怎样才能将它们全部显示在同一个中间?

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 回答