`
hereson
  • 浏览: 1449686 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

AS3 提示类 - [AS3.0]

阅读更多

package  {
 //
 import flash.display.Bitmap
 import flash.display.BitmapData;
 import flash.display.GradientType;
 import flash.display.SimpleButton;
 import flash.display.Sprite;
 import flash.display.Stage;
 import flash.events.Event;
 import flash.events.MouseEvent;
 import flash.filters.BitmapFilter;
 import flash.filters.BlurFilter;
 import flash.filters.BitmapFilterQuality;
 import flash.filters.DropShadowFilter;
 import flash.filters.GlowFilter;
 import flash.geom.Matrix;
 import flash.geom.Point;
 import flash.geom.Rectangle;
 import flash.text.TextField;
 import flash.text.TextFieldAutoSize;
 import flash.display.DisplayObject;
 //
 public class Alert {
  //
  private static var stage:Stage;
  private static var btnWidth:int = 45
  private static var btnHeight:int = 21;
  //
  public static function init(stageReference:Stage):void {
   stage = stageReference;
  }
  //
  public static function show(Text:* = "Made by Dark Vyper", callback:Function = null, Colour:int = 0x515EB7, textColour:int = 0x000000):void {
   if (stage == null) return;
   var myAlert:Sprite = new Sprite();
   myAlert.addChild(createBackground(Colour));
   myAlert.addChild(createPrompt(Text.toString(), Colour, textColour));
   assignListeners(myAlert, callback);
   stage.addChild(myAlert)
  }
  //
  private static function assignListeners(myAlert:Sprite, callback:Function):void {
   var Background:* = myAlert.getChildAt(1);
   var Prompt:* = Background.getChildAt(0);
   var OKbutton:* = Prompt.getChildAt(1);
   // Cause Alert to call specified function when alert has been closed
   if (callback != null) {
    function myFunction(myEvent:MouseEvent):void {
     OKbutton.removeEventListener(MouseEvent.CLICK, myFunction);
     closeAlert(myEvent);
     callback();
    };
    OKbutton.addEventListener(MouseEvent.CLICK, myFunction);
   } else {
    OKbutton.addEventListener(MouseEvent.CLICK, closeAlert);
   }
  }
  // removes the Alert from the display list
  private static function closeAlert(event:MouseEvent):void {
   var OKbutton:* = event.target;
   OKbutton.removeEventListener(MouseEvent.CLICK, closeAlert);
   var BG:* = event.target.parent;
   BG.removeEventListener(MouseEvent.CLICK, doStartDrag);
   BG.removeEventListener(MouseEvent.CLICK, doStopDrag);
   // messy I know...
   var myAlert:Sprite = event.target.parent.parent.parent;
   myAlert.parent.removeChild(myAlert);
  }
  // Creates the background for the Alert
  private static function createBackground(Colour:int):Sprite {
   var BackgroundBD:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0xFF000000+Colour);
   var stageBackground:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight);
   stageBackground.draw(stage);
   var rect:Rectangle = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight);
   var point:Point = new Point(0, 0);
   var multiplier:uint = 120;
   BackgroundBD.merge(stageBackground, rect, point, multiplier, multiplier, multiplier, multiplier);
   BackgroundBD.applyFilter(BackgroundBD, rect, point, new BlurFilter(5, 5));
   var bitmap:Bitmap = new Bitmap(BackgroundBD);
   var Background:Sprite = new Sprite();
   Background.addChild(bitmap);
   return Background;
  }
  // Returns an 'OK' button
  private static function createOKBtn(Colour:int, textColour:int):SimpleButton {
   var colors:Array = new Array();
   var alphas:Array = new Array(1, 1, 1);
   var ratios:Array = new Array(0, 128, 255);
   var gradientMatrix:Matrix = new Matrix();
   gradientMatrix.createGradientBox(btnWidth, btnHeight, Math.PI/2, 0, 0);
   //
   var btnUpState:Sprite = new Sprite();
   colors = [0xFFFFFF, Colour, 0xFFFFFF];
   btnUpState.graphics.lineStyle(1);
   btnUpState.graphics.beginGradientFill(GradientType.LINEAR, colors, alphas, ratios, gradientMatrix);
   btnUpState.graphics.drawRect(0, 0, btnWidth, btnHeight);
   btnUpState.addChild(getTextField("OK" , textColour, true));
   //
   var btnOverState:Sprite = new Sprite();
   colors = [0xFFFFFF, brightenColour(Colour, 50), 0xFFFFFF];
   btnOverState.graphics.lineStyle(1);
   btnOverState.graphics.beginGradientFill(GradientType.LINEAR, colors, alphas, ratios, gradientMatrix);
   btnOverState.graphics.drawRect(0, 0, btnWidth, btnHeight);
   btnOverState.addChild(getTextField("OK" , textColour, true))
   //
   var btnDownState:Sprite = new Sprite();
   colors = [Colour, brightenColour(Colour, 50), Colour];
   btnDownState.graphics.lineStyle(1);
   btnDownState.graphics.beginGradientFill(GradientType.LINEAR, colors, alphas, ratios, gradientMatrix);
   btnDownState.graphics.drawRect(0, 0, btnWidth, btnHeight);
   btnDownState.addChild(getTextField("OK" , textColour, true))
   //
   var myButton:SimpleButton = new SimpleButton(btnUpState, btnOverState, btnDownState, btnOverState);
   return myButton;
  }
  // returns a Sprite containing a prompt positioned in the middle of the stage
  private static function createPrompt(Text:String, Colour:int, textColour:int):Sprite {
   var holder:Sprite = new Sprite()
   holder.addEventListener(MouseEvent.MOUSE_DOWN, doStartDrag);
   holder.addEventListener(MouseEvent.MOUSE_UP, doStopDrag);
   holder.addChild(getPrompt(Text, Colour, textColour));
   holder.x = (stage.stageWidth/2)-(holder.width/2);
   holder.y = (stage.stageHeight/2)-(holder.height/2);
   holder.filters = [getGlowFilter(Colour), getDropShadowFilter(Colour)];
   return holder;
  }
  //
  private static function getBlurFilter():BitmapFilter {
            var blurX:Number = 100;
            var blurY:Number = 100;
            return new BlurFilter(blurX, blurY, BitmapFilterQuality.HIGH);
        }
  //
  private static function getDropShadowFilter(Colour:int):DropShadowFilter {
   var color:Number = 0x000000;
            var angle:Number = 45;
            var alpha:Number = 0.6;
            var blurX:Number = 8;
            var blurY:Number = 8;
            var distance:Number = 4;
            var strength:Number = 1.3;
            var inner:Boolean = false;
            var knockout:Boolean = false;
            var quality:Number = BitmapFilterQuality.LOW;
            return new DropShadowFilter(distance, angle, color, alpha, blurX, blurY, strength, quality, inner, knockout);
  } 
  //
  private static function getGlowFilter(Colour:int):GlowFilter {
   var color:Number = 0xFFFFFF;
            var alpha:Number = 0.8;
            var blurX:Number = 15;
            var blurY:Number = 15;
            var strength:Number = 0.7;
            var inner:Boolean = true;
            var knockout:Boolean = false;
            var quality:Number = BitmapFilterQuality.HIGH;
            return new GlowFilter(color, alpha, blurX, blurY, strength, quality, inner, knockout);
  }
  // returns a sprite containing a prompt complete with a background, the specified text and an OK button
  private static function getPrompt(Text:String, Colour:int, textColour:int):Sprite {
   var prompt:Sprite = new Sprite();
   prompt.addEventListener(MouseEvent.MOUSE_DOWN, doStartDrag);
   prompt.addEventListener(MouseEvent.MOUSE_UP, doStopDrag);
   prompt.name = "alert";
   var textField:TextField = getTextField(Text, textColour);
   var myWidth:int = textField.width+10;
   var myHeight:int = textField.height+55;
   if (myWidth < 150) {
    myWidth = 150;
   }
   if (myHeight < 100) {
    myHeight = 100;
   }
   if (myHeight > stage.stageHeight) {
    myHeight = stage.stageHeight - 20;
    textField.autoSize = TextFieldAutoSize.NONE;
    textField.height = stage.stageHeight-40;
   }
   // Create a background for the prompt
   var ellipseSize:int = 5;
   prompt.graphics.lineStyle(1);
   prompt.graphics.beginFill(Colour);
   prompt.graphics.drawRoundRect(0, 0, myWidth, myHeight, ellipseSize, ellipseSize);
   // Add the specified text to the prompt
   textField.x = (prompt.width/2)-(textField.width/2);
   textField.y = (prompt.height/2)-(textField.height/2)-10;
   prompt.addChild(textField);
   // Add an OK Button to the prompt
   var OKbutton:SimpleButton = createOKBtn(Colour, textColour);
   OKbutton.x = (prompt.width/2)-(OKbutton.width/2);
   OKbutton.y = prompt.height-35;
   prompt.addChild(OKbutton);
   //
   return prompt;
  }
  // Returns a textfield with the specified text
  private static function getTextField(Text:String, textColour:int, bold:Boolean = false):TextField {
   var myTextField:TextField = new TextField();
   myTextField.textColor = textColour;
   myTextField.name = "textfield";
   myTextField.multiline = true;
   myTextField.selectable = false;
   myTextField.autoSize = TextFieldAutoSize.CENTER;
   if (bold) {
    Text = "<b>"+Text+"</b>";
   }
   myTextField.htmlText = '<font face="Verdana">'+Text+'</font>';
   myTextField.x = (btnWidth/2)-(myTextField.width/2);
   myTextField.y = (btnHeight/2)-(myTextField.height/2);
   return myTextField;
  }
  //
  // Helper functions
  //-----------------------------------------------------------------
  //
  // returns a brighter version of the specified colour
  private static function brightenColour(colour:int, modifier:int):int {
   var hex:Array = hexToRGB(colour);
   var red:int = keepInBounds(hex[0]+modifier);
   var green:int = keepInBounds(hex[1]+modifier);
   var blue:int = keepInBounds(hex[2]+modifier);
   return RGBToHex(red, green, blue);
  }
  private static function doStartDrag(event:MouseEvent):void {
   if (event.target.name != "textfield") {
    if (event.target.name == "alert") {
     event.target.startDrag();
    }
   }
  }
  private static function doStopDrag(event:MouseEvent):void {
   if (event.target.name != "textfield") {
    if (event.target.name == "alert") {
     event.target.stopDrag();
    }
   }
  }
  public static function hexToRGB (hex:uint):Array {
   var Colours:Array = new Array();
   Colours.push(hex >> 16);
   var temp:uint = hex ^ Colours[0] << 16;
   Colours.push(temp >> 8);
   Colours.push(temp ^ Colours[1] << 8);
   return Colours;
  }
  private static function keepInBounds(number:int):int {
   if (number < 0) number = 0;
   if (number > 255) number = 255;
   return number;
  }  
  private static function RGBToHex(uR:int, uG:int, uB:int):int {
   var uColor:uint;
   uColor =  (uR & 255) << 16;
   uColor += (uG & 255) << 8;
   uColor += (uB & 255);
   return uColor;
  }
  // Stops any mouse events from getting below the alert
  private static function stopEvents(event:MouseEvent):void {
   event.stopImmediatePropagation();
  }
 }
}

分享到:
评论

相关推荐

    AS3.0鼠标提示信息源文件

    在AS3.0中,我们可以使用内置的Tooltip类来创建鼠标提示。这个类允许开发者定义鼠标悬停在特定对象上时显示的文本或组件。然而,标题中提到的"AS3.0鼠标提示信息源文件"提供了一个优化的解决方案,它可能包括了更...

    AS3.0算法大全

    3.【AS功能代码教程14】鱼眼放大镜和【AS功能代码教程11】图片转场效果,展示了AS3.0在视觉效果和图像处理方面的应用,这些功能对于提升用户界面的互动性和视觉冲击力至关重要。 4.【Flash基础理论课15】绚酷鼠标和...

    Flash,AS3.0教程-代码的位置精选.doc

    【Flash AS3.0 教程:代码的位置】 在Flash AS3.0中,与早期版本相比,代码的管理方式有了显著变化。ActionScript 3.0 的代码不再支持直接写在帧、按钮或影片剪辑上,而是主要放置在帧和独立的AS文件(ActionScript...

    As3.0 视频加载

    在AS3.0中,我们可以使用`FileReference`类来与用户的本地文件系统进行交互。例如,如果用户需要选择一个视频文件进行播放,可以这样做: ```actionscript var fileRef:FileReference = new FileReference(); ...

    as3.0 Alert 弹出信息提示框

    纯as3.0 代码编写的一个类,因为项目需要,在网上查了些资料后自己写的一个Alert类。代码注释的很清楚了,可能不是很完善——!仅供参考。

    Flash as3.0制作的16个小游戏源码。

    源码分析可以帮助学习者了解如何利用AS3.0的面向对象特性,如类、包、接口等,构建复杂的游戏逻辑。 2. **追踪游戏**:这种类型的游戏通常需要玩家根据屏幕上的提示进行操作,锻炼反应速度和观察力。通过研究源码,...

    flash as3.0 课件 十二生肖的学习

    AS3.0提供了TextFormat类用于设置文本样式,如字体、大小、颜色等。同时,我们还需要确保所用字体支持汉字,避免显示为方框。对于不认识的汉字,可以使用ToolTip类提供鼠标悬停提示。 六、用户交互与反馈 为了提高...

    flash+as3.0一个拖动的拼图游戏

    在本项目中,“flash+as...以上就是关于“flash+as3.0一个拖动的拼图游戏”的主要技术点,涵盖了AS3的编程基础、用户交互、动画制作等多个方面。通过学习和理解这些知识,开发者可以构建出类似的游戏或其他互动应用。

    as3.0 2048源码

    在AS3.0中,这类组件通常会处理用户输入事件,然后调用适当的游戏逻辑函数。 3. `_2048.as`:根据命名习惯,这个文件可能是2048游戏的主类或入口点,它初始化游戏环境,创建棋盘,并可能包含游戏循环和主逻辑。 4....

    Flash as3.0制作的拼图小游戏源码。

    2. **面向对象编程**:AS3.0是完全面向对象的语言,因此源码可能包含类的定义、继承、封装和多态等概念。了解如何创建类,定义公共属性和方法,以及如何通过实例化对象来操作它们。 3. **显示列表管理**:Flash中的...

    AS3.0 上传保存图片

    2. **文件选择对话框(FileReference)**:AS3.0提供了`FileReference`类,用于打开文件选择对话框,让用户选择要上传的图片文件。通过监听`select`事件,我们可以获取用户选择的文件,并使用`load()`方法读取文件...

    AsLine v3.0 CAD剖面图智能生成插件

    AsLine v3.0 是一个基于 AutoCAD 开发的剖面图智能生成插件,该插件为完全绿色、完全免费插件,可以在CAD的地形图上,通过选取一条剖面线而自动生成剖面图,操作非常简单。 下载地址:...

    AS3.0+XML 相册 (自己写的)

    1. **XML解析**:AS3.0 提供了内置的XML类,可以方便地解析和操作XML文档。通过`new XML()`实例化XML对象,然后使用`load()`方法加载XML文件。解析完成后,可以使用`children()`、`attributes()`等方法获取节点和...

    AS3.0 加载进度条效果

    Loader类是AS3.0中的核心组件,用于加载各种类型的数据,包括图像、SWF文件和XML。 ```actionscript var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.PROGRESS, onProgress); ...

    as3.0做的音乐播放器

    首先,AS3.0在处理音乐播放时,主要使用了`Sound`类和`SoundChannel`类。`Sound`类用于加载和控制音频文件,而`SoundChannel`类则负责音频的实际播放。例如,你可以通过`Sound.load()`方法加载音乐文件,然后通过`...

    WIN7 系统安装源插入USB3.0驱动

    总结起来,为了在仅有USB 3.0接口的计算机上顺利使用U盘安装Windows 7,你需要利用"Win7-USB3.0-Creator-V3-Win7Admin2019329"这样的工具来创建一个包含USB 3.0驱动的启动U盘,从而确保安装过程的顺利进行,享受到...

    flash 3.0拼图游戏.zip_as3 拼图游戏_as3.0拼图制作_flash_flash 3.0游戏_flash游戏3.

    这些都可以通过AS3.0的Timer类、Tween类(例如使用GreenSock库)和其他交互设计来实现。 通过以上步骤,一个基本的AS3.0拼图游戏便完成了。这个过程涵盖了AS3.0的基础知识,如图形处理、事件处理、动画和逻辑控制,...

    as3-parser.jar.zip

    在压缩包内的文件名中,"as3-parser.jar"可能是解析AS3代码的主要实现,它包含编译后的Java类,用于处理AS3语法和语义。而"License.txt"则通常包含软件的许可协议,规定了用户可以如何使用、修改和分发这个软件,这...

    用flash as3.0制作的小游戏

    2. **类和对象**:AS3.0是面向对象的语言,这意味着你需要定义类来表示游戏中的元素,如卡片或游戏板。每个卡片都是一个对象,拥有自己的属性(如位置、状态等)和方法(如翻转、检查匹配等)。 3. **事件处理**:...

    AS3.0猜数字游戏

    ### AS3.0猜数字游戏知识点解析 #### 一、项目概述 本项目是一个基于Adobe Flash平台使用ActionScript 3.0(简称AS3.0)编写的简单猜数字游戏。用户通过输入数字来猜测系统随机生成的一个1到100之间的数字。如果...

Global site tag (gtag.js) - Google Analytics