Starling 环形进度条实现
项目初期想实现这个效果来着,查了很多资料(包括式神的<神奇的滤镜>),也没找到完美的实现方法,,当时时间紧迫,就找了传统的进度条来代替实现。
最近偶然心血来潮,查了各方面资料,终于找到实现的方法,效果图放上。

代码1:使用Starling-graphic-extension绘制多边形,用多边形的角度变化来模拟扇形的动画(原理很简单,创意不错),percentage表示进度(0-1)。
private function drawPieMask (graphics:Graphics , percentage:Number , radius:Number = 50, x:Number = 0, y:Number = 0, rotation:Number = 0 , sides:int = 6) :void {
graphics .clear ();
graphics .beginTextureFill (_testTex );
// graphics should have its beginFill function already called by now
graphics .moveTo (x , y );
if (sides < 3 ) sides = 3; // 3 sides minimum
// Increase the length of the radius to cover the whole target
radius /= Math .cos (1 /sides * Math .PI );
// Shortcut function
var lineToRadians:Function = function (rads:Number ): void {
graphics .lineTo (Math .cos (rads ) * radius + x , Math. sin( rads) * radius + y) ;
};
// Find how many sides we have to draw
var sidesToDraw:int = Math .floor (percentage * sides );
for ( var i:int = 0; i <= sidesToDraw; i ++)
lineToRadians ((i / sides ) * (Math .PI * 2 ) + rotation) ;
// Draw the last fractioned side
if (percentage * sides != sidesToDraw )
lineToRadians (percentage * (Math .PI * 2 ) + rotation) ;
graphics .lineTo (x ,y );
graphics .endFill ();
}
参见 http://flassari.is/2009/11/pie-mask-in-as3/,附上原理swf(没看到的请刷新页面)
代码2:基础纹理的生成(可以使用图片或者动态合成)
var bmp:BitmapData = new BitmapData(256, 256, true, 0x0); //纹理的非绘制部分alpha为0
var sprite:Sprite = new Sprite();
sprite.graphics.beginFill(ColorUtil.YELLOW);
sprite.graphics.drawCircle(50, 50, 50);
bmp.draw(sprite); _testTex = Texture.fromBitmapData(bmp, false);
var img:Image = new Image(_testTex);
img.x = 0;
img.y = 600; var mask:Shape = new Shape();
mask.x = img.x;
mask.y = img.y;
container.addChild(mask);
mask.addEventListener(Event.ENTER_FRAME, function():void {
drawPieMask(mask.graphics, _testProg, 50, 50, 50, -Math.PI/2, 3);
_testProg = (_testProg + 0.01) % 1;
}); var circle:Shape = new Shape();
circle.graphics.beginFill(ColorUtil.GREEN);
circle.graphics.drawCircle(0, 0, 40);
circle.x = img.x + 50;
circle.y = img.y + 50;
container.addChild(circle);
附:测试发现release版本在ios上会有问题,现象是只能转到一个角度,然后就消失了。原因在于starling.display.graphics.Fill的isReflex函数,在release版本会出现问题,只能画边数少于等于3的多边形,把这个调用注释掉就可以了。纯2d的游戏,无所谓顺时针逆时针,能画出来就好。至于为什么在ios的release版本上有问题,这个就不清楚了。桌面release版本没有发现这个问题。
Starling 环形进度条实现的更多相关文章
- 图解CSS3制作圆环形进度条的实例教程
圆环形进度条制作的基本思想还是画出基本的弧线图形,然后CSS3中我们可以控制其旋转来串联基本图形,制造出部分消失的效果,下面就来带大家学习图解CSS3制作圆环形进度条的实例教程 首先,当有人说你能不能 ...
- iOS带动画的环形进度条(进度条和数字同步)
本篇写的是实现环形进度条,并带动画效果,要实现这些,仅能通过自己画一个 方法直接看代码 为了方便多次调用,用继承UIView的方式 .m文件 #import <UIKit/UIKit.h> ...
- iOS 开发技巧-制作环形进度条
有几篇博客写到了怎么实现环形进度条,大多是使用Core Graph来实现,实现比较麻烦且效率略低,只是一个小小的进度条而已,我们当然是用最简单而且效率高的方式来实现. 先看一下这篇博客,博客地址:ht ...
- iOS一分钟学会环形进度条
有几篇博客写到了怎么实现环形进度条,大多是使用Core Graph来实现,实现比较麻烦且效率略低,只是一个小小的进度条而已,我们当然是用最简单而且效率高的方式来实现.先看一下这篇博客,博客地址:htt ...
- Swift - 环形进度条(UIActivityIndicatorView)的用法
Swift中,除了条形进度条外,还有环形进度条,效果图如下: 1,环形进度条的基本属性 (1)Style: Large White:比较大的白色环形进度条 White:白色环形进度条 Gray:灰色环 ...
- 环形进度条的实现方法总结和动态时钟绘制(CSS3、SVG、Canvas)
缘由: 在某一个游戏公司的笔试中,最后一道大题是,“用CSS3实现根据动态显示时间和环形进度[效果如下图所示],且每个圆环的颜色不一样,不需要考虑IE6~8的兼容性”.当时第一想法是用SVG,因为SV ...
- Android简易实战教程--第十七话《自定义彩色环形进度条》
转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/52203533 点击打开链接 在Android初级教程里面,介绍了shape用法 ...
- canvas绘制环形进度条
<!DOCTYPE html> <html > <head> <meta http-equiv="content-type" conten ...
- 【CSS】环形进度条
效果图 原理剖析 1.先完成这样一个半圆(这个很简单吧) 2.overflow: hidden; 3.在中间定位一个白色的圆形做遮挡 4.完成另一半 5.使用animate配合时间完成衔接 源码 &l ...
随机推荐
- windows美化工具7+ Taskbar Tweaker
今天分享一个windows美化工具 7+ Taskbar Tweaker 调整工具专为 Windows 任务栏工作者量身定制,支持 Windows 7 以及更高版本的(非服务器版)微软操作系统平台. ...
- Python 定义自己的常量类
在实际的程序开发中,我们通常会将一个不可变的变量声明为一个常量.在很多高级语言中都会提供常量的关键字来定义常量,如 C++ 中的 const , Java 中的 final 等,但是 Python 语 ...
- junit中test用法
Test注解 有两个值, expected, timeout expect后面接异常类, timtout后面接时间, 符合则为ture 如 @Test (expected = NullPointExc ...
- Bzoj 3165 [Heoi2013]Segment题解
3165: [Heoi2013]Segment Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 668 Solved: 276[Submit][Sta ...
- [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]列名 'user1' 无效
唉,还是自己对php执行sql语句运用不熟练.... 我的错误代码是这样的,(解决办法在最后) $re=sqlsrv_query($conn, "select * from visitor ...
- DAX 第二篇:计算上下文
计算上下文是计算公式的环境,任何DAX表达式都是在上下文中求值的.行上下文和筛选上下文是DAX中仅有的上下文类型,把这两种上下文称为计算上下文.计算上下文用于限定公式计算的环境,当上下文变化时,相同的 ...
- 【HDU - 1560】DNA sequence (dfs+回溯)
DNA sequence 直接中文了 题目描述 21世纪是生物科技飞速发展的时代.我们都知道基因是由DNA组成的,而DNA的基本组成单位是A,C,G,T.在现代生物分子计算中,如何找到DNA之间的最长 ...
- 【并查集】模板 + 【HDU 1213、HDU 1232、POJ 2236、POJ 1703】例题详解
不想看模板,想直接看题目的请戳下面目录: 目录: HDU 1213 How Many Tables[传送门] HDU 1232 畅通工程 [传送门] POJ 2236 Wireless Network ...
- .NET Core CSharp初级篇 1-5 接口、枚举、抽象
.NET Core CSharp初级篇 1-5 本节内容类的接口.枚举.抽象 简介 问题 如果你需要表示星期或者是某些状态,使用字符串或者数字是否不直观? 你是否发现,无论何种电脑,它的USB口的设计 ...
- Excel催化剂开源第25波-Excel调用百度AI,返回AI结果
现成的这些轮子,无需调用网页,直接本地离线即可生成). 当然在AI时代,少不了各种AI接口的使用场景,普通开发者只需聚焦在自己的业务场景上,这些AI底层技术,只需类似水煤电一般去BAT这些大厂那里去消 ...