亚洲国产综合网站|精品国产自在免费观看|日本免费精品一区二区三区|亚洲一区在线日韩在线尤物

<blockquote id="2t14e"></blockquote>
<ul id="2t14e"></ul>
  • <blockquote id="2t14e"></blockquote>

    1. ActionScript從入門到高手教程全集(七)幾何相關(guān)的類

      時間:2013-08-22 12:55:19 ActionScript 我要投稿

      ActionScript從入門到高手教程全集(七)幾何相關(guān)的類

      ActionScript從入門到高手教程全集(七)幾何相關(guān)的類

      flash.geom 包中包含用于定義幾何對象 (如,點(diǎn)、矩形和轉(zhuǎn)換矩陣)的類。您可使用這些
      類來定義在其它類中使用的對象的屬性。  
      學(xué)習(xí)目錄
      幾何學(xué)基礎(chǔ)知識
      使用 Point 對象
      使用 Rectangle對象 
      使用 Matrix對象
      例如:將矩陣轉(zhuǎn)換用于顯示對象
      很多人都可能會在學(xué)校努力學(xué)習(xí)幾何學(xué)這門學(xué)科,過后又幾乎忘干凈了。
      但就算只了解一點(diǎn)這方面的知識,也可能會在ActionScript中派上大用場。
       
      flash.geom 包中包含用于定義幾何對象 (如,點(diǎn)、矩形和轉(zhuǎn)換矩陣)的類。
      所有幾何類都基于以下概念:將屏幕上的位置表示為二維平面。
      可以將屏幕看作是具有水平(x) 軸和垂直 (y) 軸的平面圖形。
      屏幕上的任何位置 (或 “點(diǎn)”)可以表示為 x 和 y 值對,即該位置的 “坐標(biāo)” 。
       
      每個顯示對象(包括舞臺)具有其自己的“坐標(biāo)空間”;實(shí)質(zhì)上,這是其用于標(biāo)繪子顯示對
      象、圖畫等位置的圖形。通常,“原點(diǎn)” (x 和 y 軸相交的位置,其坐標(biāo)為 0, 0)位于顯示
      對象的左上角。
       
       
      使用 Point 對象 Point 對象定義一對笛卡爾坐標(biāo)。它表示二維坐標(biāo)系中的某個位置。其中   表示水平軸,  表示垂直軸。
      要定義 Point 對象,請?jiān)O(shè)置它的 x 和 y 屬性,如下所示:
      import flash.geom.*;
      var pt1:Point = new Point(10, 20); // x == 10; y == 20
      var pt2:Point = new Point();
      pt2.x = 10;
      pt2.y = 20;
       
      確定兩點(diǎn)之間的距離
      import flash.geom.*;
      var pt1:Point = new Point(circle1.x, circle1.y);
      var pt2:Point = new Point(circle2.x, circle2.y);
      var distance:Number = Point.distance(pt1, pt2);
       
      平移坐標(biāo)空間
      如果兩個顯示對象位于不同的顯示對象容器中,則它們可能位于不同的坐標(biāo)空間。您可以使
      用 DisplayObject 類的 localToGlobal() 方法將坐標(biāo)平移到舞臺中相同 (全局)坐標(biāo)空間。
      例如,下面的代碼確定不同顯示對象容器中兩個顯示對象(circle1 和 circle2)的注冊點(diǎn)
      之間的距離:
      import flash.geom.*;
      var pt1:Point = new Point(circle1.x, circle1.y);
      pt1 = circle1.localToGlobal(pt1);
      var pt2:Point = new Point(circle1.x, circle1.y);
      pt2 = circle2.localToGlobal(pt2);
      var distance:Number = Point.distance(pt1, pt2);
      同樣,要確定名為 target 的顯示對象的注冊點(diǎn)與舞臺上特定點(diǎn)之間的距離,您可以使用
      DisplayObject 類的 localToGlobal() 方法:
      import flash.geom.*;
      var stageCenter:Point = new Point();
      stageCenter.x = this.stage.stageWidth / 2;
      stageCenter.y = this.stage.stageHeight / 2;
      var targetCenter:Point = new Point(target.x, target.y);
      targetCenter = target.localToGlobal(targetCenter);
      var distance:Number = Point.distance(stageCenter, targetCenter);
       
      按指定的角度和距離移動顯示對象
      您可以使用 Point 類的 polar() 方法將顯示對象按特定角度移動特定距離。例如,下列代碼
      按 60 度將 myDisplayObject 對象移動 100 個像素:  
      import flash.geom.*;
      var distance:Number = 100;
      var angle:Number = 2 * Math.PI * (90 / 360);
      var translatePoint:Point = Point.polar(distance, angle);
      myDisplayObject.x += translatePoint.x;
      myDisplayObject.y += translatePoint.y;
       
       
       
      Rectangle 對象 Rectangle 對象定義一個矩形區(qū)域。 Rectangle 對象有一個位置,該位置由其左上角的 x 和
      y 坐標(biāo)以及 width 屬性和 height 屬性定義。www.zjpiwd.com通過調(diào)用 Rectangle() 構(gòu)造函數(shù)可以定義新
      Rectangle 對象的這些屬性,如下所示:
      import flash.geom.Rectangle;
      var rx:Number = 0;
      var ry:Number = 0;
      var rwidth:Number = 100;
      var rheight:Number = 50;
      var rect1:Rectangle = new Rectangle(rx, ry, rwidth, rheight);
       
       
      調(diào)整 Rectangle 對象的大小和進(jìn)行重新定位
       
      更改 Rectangle 對象的 x 和 y 屬性直接重新定位該對象
      import flash.geom.Rectangle;
      var x1:Number = 0;
      var y1:Number = 0;
      var width1:Number = 100;
      var height1:Number = 50;
      var rect1:Rectangle = new Rectangle(x1, y1, width1, height1);
      trace(rect1) // (x=0, y=0, w=100, h=50)
      rect1.x = 20; 
      rect1.y = 30;
      trace(rect1); // (x=20, y=30, w=100, h=50)
       
      如以下代碼所示,如果更改 Rectangle 對象的 left 或 top 屬性,也可以重新定位,并且該
      對象的 x 和 y 屬性分別與 left 和 top 屬性匹配。學(xué)生范文網(wǎng)。但是,Rectangle 對象的左下角位置不發(fā)
      生更改,所以調(diào)整了對象的大小。
      import flash.geom.Rectangle;
      var x1:Number = 0;
      var y1:Number = 0;
      var width1:Number = 100;
      var height1:Number = 50;
      var rect1:Rectangle = new Rectangle(x1, y1, width1, height1);
      trace(rect1) // (x=0, y=0, w=100, h=50)
      rect1.left = 20; 
      rect1.top = 30;
      trace(rect1); // (x=30, y=20, w=70, h=30)
       
      同樣,如下面的示例所示,如果更改 Rectangle 對象的 bottom 或 right 屬性,該對象的左
      上角位置不發(fā)生更改,所以相應(yīng)地調(diào)整了對象的大小。
      import flash.geom.Rectangle;
      var x1:Number = 0;
      var y1:Number = 0;
      var width1:Number = 100;
      var height1:Number = 50;
      var rect1:Rectangle = new Rectangle(x1, y1, width1, height1);
      trace(rect1) // (x=0, y=0, w=100, h=50)
      rect1.right = 60;
      trect1.bottom = 20; 
      trace(rect1); // (x=0, y=0, w=60, h=20)
       
      也可以使用 offset() 方法重新定位 Rectangle 對象,如下所示:
      import flash.geom.Rectangle;
      var x1:Number = 0;
      var y1:Number = 0;
      var width1:Number = 100;
      var height1:Number = 50;
      var rect1:Rectangle = new Rectangle(x1, y1, width1, height1);
      trace(rect1) // (x=0, y=0, w=100, h=50)
      rect1.offset(20, 30); 
      trace(rect1); // (x=20, y=30, w=100, h=50)
      offsetPt() 方法工作方式類似,只不過它是將 Point 對象作為參數(shù),而不是將   和   偏移
      量值作為參數(shù)。  
       
       
      還可以使用 inflate() 方法調(diào)整 Rectangle 對象的大小,該方法包含兩個參數(shù),dx 和 dy。
      dx 參數(shù)表示矩形的左邊和右邊距中心的像素?cái)?shù),而 dy 參數(shù)表示矩形的頂邊和底邊距中心的
      像素?cái)?shù):
      import flash.geom.Rectangle;
      var x1:Number = 0;
      var y1:Number = 0;
      var width1:Number = 100;
      var height1:Number = 50;
      var rect1:Rectangle = new Rectangle(x1, y1, width1, height1);
      trace(rect1) // (x=0, y=0, w=100, h=50)
      rect1.inflate(6,4); 
      trace(rect1); // (x=-6, y=-4, w=112, h=58)
      inflatePt() 方法作方式類似,只不過它是將 Point 對象作為參數(shù),而不是將dx和dy的值
      作為參數(shù)。  
       
       
      確定 Rectangle 對象的聯(lián)合和交集
      可以使用 union() 方法來確定由兩個矩形的邊界形成的矩形區(qū)域:
      import flash.display.*;
      import flash.geom.Rectangle;
      var rect1:Rectangle = new Rectangle(0, 0, 100, 100);
      trace(rect1); // (x=0, y=0, w=100, h=100)
      var rect2:Rectangle = new Rectangle(120, 60, 100, 100);
      trace(rect2); // (x=120, y=60, w=100, h=100)
      trace(rect1.union(rect2)); // (x=0, y=0, w=220, h=160)
      可以使用 intersection() 方法來確定由兩個矩形重疊區(qū)域形成的矩形區(qū)域:
      import flash.display.*;
      import flash.geom.Rectangle;
      var rect1:Rectangle = new Rectangle(0, 0, 100, 100);
      trace(rect1); // (x=0, y=0, w=100, h=100)
      var rect2:Rectangle = new Rectangle(80, 60, 100, 100);
      trace(rect2); // (x=120, y=60, w=100, h=100)
      trace(rect1.intersection(rect2)); // (x=80, y=60, w=20, h=40)
      同樣,可以使用 intersects() 方法查明兩個顯示對象的邊界矩形是否重疊。可以使用 
      DisplayObject 類的 getRect() 方法來包括顯示對象筆觸可添加到邊界區(qū)域中的其它任何
      空間。
       
      Matrix 對象 Matrix 類表示一個轉(zhuǎn)換矩陣,它確定如何將點(diǎn)從一個坐標(biāo)空間映射到另一個坐標(biāo)空間?梢
      對顯示對象執(zhí)行不同的圖形轉(zhuǎn)換,方法是設(shè)置 Matrix 對象的屬性,將該 Matrix 對象應(yīng)用于
      Tr a ns f orm 對象的 matrix 屬性,然后應(yīng)用該 Tr ans f o rm 對象作為顯示對象的 transform 屬
      性。這些轉(zhuǎn)換函數(shù)包括平移 (  和   重新定位) 、旋轉(zhuǎn)、縮放和傾斜。
      Matrix 對象
      雖然可以通過直接調(diào)整 Matrix 對象的屬性(a、b、c、d、tx 和 ty)來定義矩陣,但更簡
      單的方法是使用 createBox() 方法。使用此方法提供的參數(shù)可以直接定義生成的矩陣的縮
      放、旋轉(zhuǎn)和平移效果。例如,下面的代碼創(chuàng)建一個 Matrix 對象,具有效果是水平縮放 2.0、
      垂直縮放 3.0、旋轉(zhuǎn) 45 度、向右移動(平移) 10 個像素并向下移動 20 個像素:
      var matrix:Matrix = new Matrix();
      var scaleX:Number = 2.0;
      var scaleY:Number = 3.0;
      var rotation:Number = 2 * Math.PI * (45 / 360);
      var tx:Number = 10;
      var ty:Number = 20;
      matrix.createBox(scaleX, scaleY, rotation, tx, ty);
       
      還可以使用 scale()、rotate() 和 translate() 方法調(diào)整 Matrix 對象的縮放、旋轉(zhuǎn)和平
      移效果。請注意,這些方法合并了現(xiàn)有 Matrix 對象的值。例如,下面的代碼調(diào)用兩次
      scale() 和 rotate() 方法以對 Matrix 對象進(jìn)行設(shè)置,它將對象放大 4 倍并旋轉(zhuǎn) 60 度:
      var matrix:Matrix = new Matrix();
      var rotation:Number = 2 * Math.PI * (30 / 360); // 30°
      var scaleFactor:Number = 2;
      matrix.scale(scaleFactor, scaleFactor);
      matrix.rotate(rotation);
      matrix.scale(scaleX, scaleY);
      matrix.rotate(rotation);
      myDisplayObject.transform.matrix = matrix;
       
      要將傾斜轉(zhuǎn)換應(yīng)用到 Matrix 對象,請調(diào)整該對象的 b 或 c 屬性。調(diào)整 b 屬性將矩陣垂直傾
      斜,并調(diào)整 c 屬性將矩陣水平傾斜。以下代碼使用系數(shù) 2 垂直傾斜 myMatrix Matrix 對象:
      var skewMatrix:Matrix = new Matrix();
      skewMatrix.b = Math.tan(2);
      myMatrix.concat(skewMatrix);
      可以將矩陣轉(zhuǎn)換應(yīng)用到顯示對象的. transform 屬性。例如,以下代碼將矩陣轉(zhuǎn)換應(yīng)用于名為
      myDisplayObject 的顯示對象:
      var matrix:Matrix = myDisplayObject.transform.matrix;
      var scaleFactor:Number = 2;
      var rotation:Number = 2 * Math.PI * (60 / 360); // 60°
      matrix.scale(scaleFactor, scaleFactor);
      matrix.rotate(rotation);
      myDisplayObject.transform.matrix = matrix;
      第一行將 Matrix 對象設(shè)置為 myDisplayObject 顯示對象所使用的現(xiàn)有轉(zhuǎn)換矩陣
      (myDisplayObject 顯示對象的 transformation 屬性的 matrix 屬性)。這樣,調(diào)用的 
      Matrix 類方法將對顯示對象的現(xiàn)有位置、縮放和旋轉(zhuǎn)產(chǎn)生累積影響。
       
      定義 MatrixTransformer 類
      MatrixTransformer 類包含應(yīng)用 Matrix 對象的幾何變形的靜態(tài)方法。  
      transform() 方法
      transform() 方法包含以下屬性的參數(shù): 
      ■ sourceMatrix — 此方法轉(zhuǎn)換的輸入矩陣
      ■ xScale 和 yScale —   和   縮放系數(shù)
      ■ dx 和 dy —   和   平移量 (以像素為單位)
      ■ rotation — 旋轉(zhuǎn)量(以度為單位)
      ■ skew — 傾斜系數(shù) (以百分比表示)
      ■ skewType — 傾斜的方向,"right" 或 "left"
      返回值為生成的矩陣。
      transform() 方法調(diào)用下列類的靜態(tài)方法:
      ■ skew() 
      ■ scale() 
      ■ translate() 
      ■ rotate() 
      每種方法都返回應(yīng)用了轉(zhuǎn)換的源矩陣。
       
      skew() 方法
      skew() 方法通過調(diào)整矩陣的 b 和 c 屬性來傾斜矩陣?蛇x參數(shù) unit 確定用于定義傾斜角度
      的單位,如果必要,該方法會將 angle 值轉(zhuǎn)換為弧度:
      if (unit == "degrees") 
      {
      angle = Math.PI * 2 * angle / 360;
      }
      if (unit == "gradients")
      {
      angle = Math.PI * 2 * angle / 100;
      }
      scale() 方法
      如下面的示例所示,如果提供的縮放系數(shù)為百分比,則 scale() 方法將首先調(diào)整縮放系數(shù),
      然后使用矩陣對象的 scale() 方法:
      if (percent)
      {
      xScale = xScale / 100;
      yScale = yScale / 100;
      }
      sourceMatrix.scale(xScale, yScale);
      return sourceMatrix;
       
      translate() 方法只需通過調(diào)用矩陣對象的 translate() 方法即可應(yīng)用 dx 和 dy 平移系
      數(shù),如下所示:
      sourceMatrix.translate(dx, dy) ;
      返回 sourceMatrix;
       
      rotate() 方法
      rotate() 方法將輸入的旋轉(zhuǎn)系數(shù)轉(zhuǎn)換為弧度(如果提供的是角度或漸變) ,然后調(diào)用矩陣對
      象的 rotate() 方法:
      if (unit == "degrees")
      {
      angle = Math.PI * 2 * angle / 360;
      }
      if (unit == "gradients")
      {
      angle = Math.PI * 2 * angle / 100;
      }
      sourceMatrix.rotate(angle);
      return sourceMatrix;
       

      【ActionScript從入門到高手教程全集(七)幾何相關(guān)的類】相關(guān)文章:

      1.ActionScript從入門到高手教程全集(六) 事件處理

      2.ActionScript從入門到高手教程全集(四)錯誤處理

      3.ActionScript從入門到高手教程全集(三)字符串的處理

      4.ActionScript3.0從入門到高手教程全集(二)日期和定時器的處理

      5.Flash顯示編程-ActionScript從入門到精通教程(六)

      6.Flash ActionScript3.0入門教程全集

      7.Flash ActionScript3.0高級教程全集

      8.學(xué)做西餐從入門到精通的教程