利用as3,我们可以尝试制作一些有趣的组件,虽然现在已经有很多实用的组件,但是自己尝试写一下也是不错的。利用as3语法,借用了绘图Api我们尝试制作一下这个组件。因为我们不需要很强大的功能,对此我们只是需要选取其一部分就可以。

首先,我们所需的制作两个图形,一个是拖动的方块,一个是底图片。对于这两个图我们都不难做,采用绘图APi当中的绘制矩形的办法就能实现到。

我们需要定义个包,这个包是为了防止与flash内部组件类名称冲突如下:

package org.summerTree.components

所需要做的工作是,定义好构造函数里面的参数。设置容器,最大值和最小值。两个值就是两端的位置,以及初始化的默认值

//滚动的组件 package org.summerTree.components { import flash.display.Sprite; import flash.display.Shape; import flash.events.*; import flash.geom.Rectangle; import flash.display.DisplayObjectContainer; import flash.text.*; public class Slider extends Sprite { private var bar_control:Sprite; private var values:Number=0; private var msg:TextField=new TextField(); private var minValue:Number=0; private var maxValue:Number=100; private var initializtion:Number; public function Slider(contain:DisplayObjectContainer=null,minValue:Number=0,maxValue:Number=100,initializtion:Number=0) { } }

在这里过程,我们导入我们所需要的包,包括事件类型,包括几何图形库等等。

我们创建Slider 作为这个组件的类名称,建立起第一步之后,我们就可以实现进行绘制图案进行创作。

第二步:创始化,

在这个过程当中,实例化控制的拖动的元件,并设置底的图形,在这里过程设置不同颜色以区别。并且对元件进行监听鼠标拖动,在拖动的过程当中,元件的x坐标会产生改变,这样我们需要把这个值通过计算出来传递设置value的值,

this.value=bar_control.x*(maxValue-minValue)/100+minValue;//计算元件块位置对于的值

如果按0-100这样的区间,只有我们获取到拖动的元件的坐标值,即可以得到我们所需要的数据。bar.x=[0,100]之间的区间

如果这个区间不在0-100 ,可以随意一个区间,我们则可以通过简单的换成就可以

(bar.x/bar.width)*(max-min)+min; 这样换算则可以实现到。

private function init():void { //控件底座 var bar_bottom:Shape=new Shape(); addChild(bar_bottom); bar_bottom.graphics.lineStyle(0); bar_bottom.graphics.beginFill(0x666666); bar_bottom.graphics.drawRect(0,0,116,16); bar_bottom.graphics.endFill(); var array:Array=new Array(); //设置显示区域 var format:TextFormat=new TextFormat (); format.size=5; msg=new TextField(); msg.border=true; msg.setTextFormat(format); this.value=initializtion;//设置初始值 msg.text=String(this.value); msg.width=25; msg.height=16; msg.x=117; msg.y=0; msg.selectable=false; addChild(msg); bar_control=new Sprite(); bar_control.x=Math.abs(initializtion-minValue)/ Math.abs(maxValue-minValue)*100; bar_control.y=0; addChild(bar_control); bar_control.buttonMode=true; bar_control.graphics.lineStyle(0); bar_control.graphics.beginFill(0xCCCCCC); bar_control.graphics.drawRect(0,0,16,16); bar_control.graphics.endFill(); bar_control.addEventListener(MouseEvent.MOUSE_DOWN,onStaDragHandler); bar_control.stage.addEventListener(MouseEvent.MOUSE_UP,onStopDragHandler); }

总的代码

//滚动的组件 package org.summerTree.components { import flash.display.Sprite; import flash.display.Shape; import flash.events.*; import flash.geom.Rectangle; import flash.display.DisplayObjectContainer; import flash.text.*; public class Slider extends Sprite { private var bar_control:Sprite; private var values:Number=0; private var msg:TextField=new TextField(); private var minValue:Number=0; private var maxValue:Number=100; private var initializtion:Number; public function Slider(contain:DisplayObjectContainer=null,minValue:Number=0,maxValue:Number=100,initializtion:Number=0) { if(contain!=null) contain.addChild(this); this.minValue=minValue; this.maxValue=maxValue; this.initializtion=initializtion;//默认位置值 init(); } private function init():void { //控件底座 var bar_bottom:Shape=new Shape(); addChild(bar_bottom); bar_bottom.graphics.lineStyle(0); bar_bottom.graphics.beginFill(0x666666); bar_bottom.graphics.drawRect(0,0,116,16); bar_bottom.graphics.endFill(); var array:Array=new Array(); //设置显示区域 var format:TextFormat=new TextFormat (); format.size=5; msg=new TextField(); msg.border=true; msg.setTextFormat(format); this.value=initializtion;//设置初始值 msg.text=String(this.value); msg.width=25; msg.height=16; msg.x=117; msg.y=0; msg.selectable=false; addChild(msg); bar_control=new Sprite(); bar_control.x=Math.abs(initializtion-minValue)/ Math.abs(maxValue-minValue)*100; bar_control.y=0; addChild(bar_control); bar_control.buttonMode=true; bar_control.graphics.lineStyle(0); bar_control.graphics.beginFill(0xCCCCCC); bar_control.graphics.drawRect(0,0,16,16); bar_control.graphics.endFill(); bar_control.addEventListener(MouseEvent.MOUSE_DOWN,onStaDragHandler); bar_control.stage.addEventListener(MouseEvent.MOUSE_UP,onStopDragHandler); } private function onStaDragHandler(event:MouseEvent):void { bar_control.stage.addEventListener(MouseEvent.MOUSE_MOVE,onMoveHandler); event.currentTarget.startDrag(false,new Rectangle(0,0,100,0));//控制拖动局域 } private function onMoveHandler(event:MouseEvent):void { var evt:Event=new Event(Event.CHANGE); this.value=bar_control.x*(maxValue-minValue)/100+minValue;//计算元件块位置对于的值 msg.text=String(this.value); this.dispatchEvent(evt); } //停止拖动处理 private function onStopDragHandler(event:MouseEvent):void { msg.text=String(this.value); bar_control.stopDrag(); bar_control.stage.removeEventListener(MouseEvent.MOUSE_MOVE,onMoveHandler); } //设置拖动的值 public function set value(dataValue:Number):void { this.values=dataValue; } //返回拖动的值 public function get value():Number { return values; } //设置对象坐标 public function move(x:Number,y:Number):void { this.x=x; this.y=y; } } }

测试:

参数含义:第一个容器,第二个最小值,第三个最大值。调用监听事件。

import org.summerTree.components.Slider; var i:int=0; while (i<10) { i++; var silder:Slider=new Slider(this); silder.move(250,100+i*20); silder.addEventListener(Event.CHANGE,onChange); } function onChange(event:Event):void { trace("ww"+silder.value); }

利用这个简单的制作,我们可以制作一些调节的参数变化,如声音大小。介于一个区间内变化的情况。

通过控制组件,达到声音的变化。大概制作就在如下。

在初始化的时候,需要进行加载声音,初始化组件,等待完成之后,就可以实现对音乐的参数一种交互了。

发布的时候,我们可以选择在网络环境进行,而本地环境调用远程的 资源会出现一种错误。不妨试试。

代码解析:

使用媒体包下的sound 声音类,我们就可以进行加载本地或者远程的资源。达到播放音乐的功能,同时可以进行监听数据加载进度和错误的情况发生。

sound=new Sound();
   sound.load(new URLRequest("http://au.9you.com/download/song/22.mp3"));
   sound.addEventListener(Event.COMPLETE,onLoadComplete);
   sound.addEventListener(ProgressEvent.PROGRESS,onProgress);
   sound.addEventListener(IOErrorEvent.IO_ERROR,onError);

当完成加载声音后就可以进行播放

channel=sound.play(0,int.MAX_VALUE);  指定一个声道了进行播放,选择int 最大值,这个会循环int 最大值次数。

总的代码

package { import flash.display.MovieClip; import flash.events.*; import flash.media.*; import flash.net.*; import flash.text.TextField; import org.summerTree.components.Slider; public class Main extends MovieClip { private var sound:Sound; private var channel:SoundChannel=new SoundChannel(); private var Soundtrans:SoundTransform=new SoundTransform(); private var slider:Slider; private var msg:TextField; public function Main() { init(); } private function init():void { slider=new Slider(this,0,100,100); slider.move(250,200); slider.addEventListener(Event.CHANGE,onSoundChange); //左输入在左扬声器里播放的量。 var left_slider:Slider=new Slider(this,0,100,50); left_slider.move(250,220); left_slider.addEventListener(Event.CHANGE,onLeftSoundChange); //左输入在右扬声器里播放的量。 var right_slider:Slider=new Slider(this,0,100,40); right_slider.move(250,240); right_slider.addEventListener(Event.CHANGE,onRightSoundChange); //声音从左到右的平移 var pan_slider:Slider=new Slider(this,-100,100,0); pan_slider.move(250,260); pan_slider.addEventListener(Event.CHANGE,onPanSoundChange); msg=new TextField(); addChild(msg); msg.x=200; msg.y=100; //创建声音 sound=new Sound(); sound.load(new URLRequest("http://au.9you.com/download/song/22.mp3")); sound.addEventListener(Event.COMPLETE,onLoadComplete); sound.addEventListener(ProgressEvent.PROGRESS,onProgress); sound.addEventListener(IOErrorEvent.IO_ERROR,onError); } private function onLeftSoundChange(event:Event):void { if(channel!=null) { channel.soundTransform=Soundtrans; Soundtrans.leftToLeft=event.currentTarget.value/100; } } private function onRightSoundChange(event:Event):void { if(channel!=null) { channel.soundTransform=Soundtrans; Soundtrans.leftToRight=event.currentTarget.value/100; } } private function onPanSoundChange(event:Event):void { if(channel!=null) { channel.soundTransform=Soundtrans; Soundtrans.pan=event.currentTarget.value/100; } } private function onSoundChange(event:Event):void { trace(slider.value); if(channel!=null) { channel.soundTransform=Soundtrans; Soundtrans.volume=slider.value/100; } } //加载显示数据 private function onProgress(event:ProgressEvent):void { msg.text=String(Math.round(event.bytesLoaded/event.bytesTotal*100))+"/%"; } private function onError(event:IOErrorEvent):void { msg.text="加载发生了错误"; } private function onLoadComplete(event:Event):void { sound.removeEventListener(ProgressEvent.PROGRESS,onProgress); sound.removeEventListener(Event.COMPLETE,onLoadComplete); if(channel!=null) channel=sound.play(0,int.MAX_VALUE); } } }

Flash与组件:制作Slider组件相关推荐

  1. 制作Slider组件

    利用as3,我们可以尝试制作一些有趣的组件,虽然现在已经有很多实用的组件,但是自己尝试写一下也是不错的.利用as3语法,借用了绘图Api我们尝试制作一下这个组件.因为我们不需要很强大的功能,对此我们只 ...

  2. vue3组件篇 Slider

    文章目录 组件介绍 组件安装与使用 组件代码 参数说明 事件 关于dxui组件库 组件介绍 slider组件已成为前端开发中广泛使用的UI组件之一.Slider组件可以让用户在一个可选范围内选择一个值 ...

  3. 滑块 组件_组件制作:如何使用链接的输入创建滑块

    滑块 组件 by Robin Sandborg 罗宾·桑德伯格(Robin Sandborg) 组件制作:如何使用链接的输入创建滑块 (Component crafting: how to creat ...

  4. flash中制的SWC组件怎样导入到flex中使用

    flash中制的SWC组件怎样导入到flex中使用 2010-04-30 11:18 在使用FLASH导出SWC组件文件后,放入项目的LIB文件夹,然后要用实例化一个对象才能进行时操作使用, 但要记得 ...

  5. 【鸿蒙 HarmonyOS】UI 组件 ( 拖动条 Slider 组件 )

    文章目录 一.布局中设置拖动条 Slider 组件 二.代码中控制拖动条 Slider 组件 一.布局中设置拖动条 Slider 组件 注意该 Slider 组件与 进度条 Progressbar 组 ...

  6. C# 制作Com组件:java调用.net DLL的方法

    本文将详细为大家介绍一个java调用.net DLL的方法,以实现特殊的客户的特殊要求:"在Java项目中必须使用其提供的用.net写的DLL加密机制!" 环境与工具: ◆.net ...

  7. axure 组件_技巧分享 | Axure后台组件制作的全过程

    点击上方蓝字,+关注行设视觉 黑马家族成员原创发布于行设视觉,转载请注明出处. 作者 | 时光若刻 http://www.woshipm.com/rp/2527010.html 大家好,前一段时间我刚 ...

  8. mysql链路跟踪工具_EasySwoole利用链路追踪组件制作甩锅工具

    前言 最近前端老是反馈API调用异常,说请求成功但是没有数据返回! 我写的代码怎么可能有bug,肯定是前端调用的方式不对! 经过一番套鼓,直接把请求参数和响应内容打印到控制台,果然不出我所料,请求缺少 ...

  9. Python数据可视化案例三:使用Slider组件调整曲线参数

    首先更正一个地方,昨天的文章Pythonic:递归.回溯等5种方法生成不重复数字整数中最后一段代码的注释中不小心把"排列"写成了"组合",抱歉抱歉! 今天的内容 ...

最新文章

  1. python 输入文件名查找_Python实现的根据文件名查找数据文件功能示例
  2. python日期格式化
  3. 封装进程内存相关操作函数
  4. css绝对定位如何在不同分辨率下的电脑正常显示定位位置?
  5. 一个封锁操作被对 wsacancelblockingcall 的调用中断_操作系统概论
  6. 树莓派4B设置静态IP
  7. SQLSERVER 游标
  8. jzoj6308-中间值【分治】
  9. 转 C++宏定义详解
  10. python-day11 Mysql 数据类型
  11. CMU和谷歌联手放出XL号Transformer!提速1800倍 | 代码+预训练模型+超参数
  12. ubuntu 16.04 登录后黑屏
  13. python怎么获取lol皮肤名称_英雄联盟手游免费皮肤获取攻略 LOL免费皮肤怎么得...
  14. EasyDarwin的交叉编译
  15. Kettle使用 js 文件生成节假日表文件 附带2019-2020节假日文件
  16. coherence-based label propagation over time series for accelerated active learning
  17. Apex英雄手游国服何时上线 Apex英雄手游和端游互通吗
  18. 电脑技巧——用键盘控制光标
  19. OpenCV_basis
  20. 【软件工程】什么?你还在复习软工但是不知道背哪里?速看!--电子科技大学2023年期末考试

热门文章

  1. win11搜索栏无法输入 Windows11搜索栏无法输入的解决方法
  2. 2 str转byte失败_android 4.2的多线程库加载崩溃问题
  3. kettle使用命令行的方式执行多个job_手把手教你实现xxl-job分布式任务调度平台搭建
  4. vector二维的长度
  5. 1603. 设计停车系统
  6. style样式包(HTML、CSS)
  7. java 传绝对路径无效_又传噩耗!知名主持人小济南因突发肺栓塞不幸去世,享年36岁...
  8. 戴尔推出PowerEdge T30,主打小型办公和家庭办公市场
  9. apache 日志参数
  10. 【python报错】 ModuleNotFoundError: No module named 'X' 如何调用自己写的 moudle / python / .py 文件(同一项目中)