改进后的时钟

作者:袖梨 2022-07-02
  

flash9中的实例时钟,针对类文件进行了改进,加入了表盘的细分和中文显示时间

主要修改了AnalogClockFace类,修改后的代码如下:

package com.example.programmingas3.clock{
 import flash.display.Shape;
 import flash.display.Sprite;
 import flash.display.StageAlign;
 import flash.display.StageScaleMode;
 import flash.text.StaticText;
 import flash.events.*;
 import flash.text.TextField;
 import flash.text.TextFormat;

 /**
  * Displays a round clock face with an hour hand, a minute hand, and a second hand.
  */
 public class AnalogClockFace extends Sprite {
  /**
   * The desired width of this component, as opposed to the .width
   * property which represents tha actual width.
   */
  public var w:uint = 200;

  /**
   * The desired height of this component, as opposed to the .height
   * property which represents tha actual height.
   */
  public var h:uint = 200;

  /**
       * The radius from the center of the clock to the
       * outer edge of the circular face outline.
       */
  public var radius:uint;

  /**
           * The coordinates of the center of the face.
           */
  public var centerX:int;
  public var centerY:int;

  /**
           * The three hands of the clock.
           */
  public var hourHand:Shape;
  public var minuteHand:Shape;
  public var secondHand:Shape;

  /**
           * The colors of the background and each hand.
           * These could be set using parameters or
           * styles in the future.
           */
  public var bgColor:uint = 0xEEEEFF;
  public var hourHandColor:uint = 0x003366;
  public var minuteHandColor:uint = 0x000099;
  public var secondHandColor:uint = 0xCC0033;
  public var x0:uint;
  public var y0:uint;
  public var x1:uint;
  public var y1:uint;
  public var txt:TextField;
  /**
           * Stores a snapshot of the current time, so it
           * doesn't change while in the middle of drawing the
           * three hands.
           */
  public var currentTime:Date;

  /**
           * Contructs a new clock face. The width and
           * height will be equal.
           */
  public function AnalogClockFace(w:uint) {
   this.w = w;
   this.h = w;

   // Rounds to the nearest pixel
   this.radius = Math.round(this.w / 2);

   // The face is always square now, so the
   // distance to the center is the same
   // horizontally and vertically
   this.centerX = this.radius;
   this.centerY = this.radius;
  }
  /**
           * Creates the outline, hour labels, and clock hands.
           */
  public function init():void {
   // draws the circular clock outline
   drawBorder();

   // draws the hour numbers
   drawLabels();

   // creates the three clock hands
   createHands();
   Drawlss();
   CreatTxt();
  }
  /**
          * Draws a circular border.
          */
  public function drawBorder():void {
   graphics.lineStyle(0.5, 0x999999);
   graphics.beginFill(bgColor);
   graphics.drawCircle(centerX, centerY, radius);
   graphics.endFill();
  }
  /**
     * Puts numeric labels at the hour points.
     */
  public function drawLabels():void {
   for (var i:Number = 1; i <= 12; i++) {
    // Creates a new TextField showing the hour number
    var label:TextField = new TextField();
    label.text = i.toString();

    // Places hour labels around the clock face.
    // The sin() and cos() functions both operate on angles in radians.
    var angleInRadians:Number = i * 30 * (Math.PI/180);
    // Place the label using the sin() and cos() functions to get the x,y coordinates.
    // The multiplier value of 0.9 puts the labels inside the outline of the clock face.
    // The integer value at the end of the equation adjusts the label position,
    // since the x,y coordinate is in the upper left corner.
    label.x = centerX + (0.9 * radius * Math.sin( angleInRadians )) - 5;
    label.y = centerY - (0.9 * radius * Math.cos( angleInRadians )) - 9;

    // Formats the label text.
    var tf:TextFormat = new TextFormat();
    tf.font = "Arial";
    tf.bold = "true";
    tf.size = 12;
    label.setTextFormat(tf);

    // Adds the label to the clock face display list.
    addChild(label);
   }
  }
  public function Drawlss() {
   for (var i:Number=0; i<=60; i++) {
    var lshape:Shape=new Shape();
    //trace(i)
    Drawls(lshape,i*6,0x000000,1);
    addChild(lshape);
   }
  }
  public function Drawls(hand:Shape, rot:uint, color:uint, thickness:Number):void {
   var angleInRadians:Number = rot * (Math.PI/180);
   x1 = centerX + (radius * Math.sin( angleInRadians ));
   y1 = centerY - (radius * Math.cos( angleInRadians ));
   if (rot%30==0) {

    x0 = centerX + (0.95 * radius * Math.sin( angleInRadians ));
    y0 = centerY - (0.95 * radius * Math.cos( angleInRadians ));
   } else {
    x0 = centerX + (0.97 * radius * Math.sin( angleInRadians ));
    y0 = centerY - (0.97 * radius * Math.cos( angleInRadians ));
   }
   hand.graphics.lineStyle(thickness, color);
   hand.graphics.moveTo(x0,y0);
   hand.graphics.lineTo(x1,y1);
  }
  /**
          * Creates hour, minute, and second hands using the 2D drawing API.
          */
  public function createHands():void {
   // Uses a Shape since it's the simplest component that supports
   // the 2D drawing API.
   var hourHandShape:Shape = new Shape();
   drawHand(hourHandShape, Math.round(radius * 0.5), hourHandColor, 3.0);
   this.hourHand = Shape(addChild(hourHandShape));
   this.hourHand.x = centerX;
   this.hourHand.y = centerY;

   var minuteHandShape:Shape = new Shape();
   drawHand(minuteHandShape, Math.round(radius * 0.8), minuteHandColor, 2.0);
   this.minuteHand = Shape(addChild(minuteHandShape));
   this.minuteHand.x = centerX;
   this.minuteHand.y = centerY;

   var secondHandShape:Shape = new Shape();
   drawHand(secondHandShape, Math.round(radius * 0.9), secondHandColor, 0.5);
   this.secondHand = Shape(addChild(secondHandShape));
   this.secondHand.x = centerX;
   this.secondHand.y = centerY;
  }
  /**
          * Draws a clock hand with a given size, color, and thickness.
          */
  public function drawHand(hand:Shape, distance:uint, color:uint, thickness:Number):void {
   hand.graphics.lineStyle(thickness, color);
   hand.graphics.moveTo(0, distance);
   hand.graphics.lineTo(0, 0);
  }
  /**
          * Called by the parent container when the display is being drawn.
          */
  public function draw():void {
   // Stores the current date and time in an instance variable
   currentTime = new Date();
   showTime(currentTime);
   showT(currentTime);
  }
  public function CreatTxt():void {
   txt= new TextField();
   txt.width=300;
   //label.text =;
   txt.x = centerX -radius;
   txt.y = centerY -radius-20;
   addChild(txt);
   }
  public function showT(time:Date) {
   var seconds:uint = time.getSeconds();
   var minutes:uint = time.getMinutes();
   var hours:uint = time.getHours();
   var year:uint=time.getFullYear();
   var month:uint=time.getMonth()+1;
   var date:uint=time.getDate();
   this.txt.text="现在时间是:"+year+"年"+month+"月"+date+"日"+hours+"时"+minutes+"分"+seconds+"秒" ;
   //setTxt(datetxt)
  }
  /**
           * Displays the given Date/Time in that good old analog clock style.
           */

  public function showTime(time:Date):void {
   // Gets the time values
   var seconds:uint = time.getSeconds();
   var minutes:uint = time.getMinutes();
   var hours:uint = time.getHours();
   // Multiplies by 6 to get degrees
   this.secondHand.rotation = 180 + (seconds * 6);
   this.minuteHand.rotation = 180 + (minutes * 6);

   // Multiplies by 30 to get basic degrees, and then
   // adds up to 29.5 degrees (59 * 0.5) to account
   // for the minutes
   this.hourHand.rotation = 180 + (hours * 30) + (minutes * 0.5);
  }
 }
}

相关文章

精彩推荐