AS3做的flash动画效果不平滑,请FLASH和AS3高手指教
最近原创了一个下雪的效果,但奇怪的是雪花掉落非常不平滑,总有一顿一顿的感觉,请高手帮我看看:http://www.cnchu.com/templates/cnchu/ap...
最近原创了一个下雪的效果,但奇怪的是雪花掉落非常不平滑,总有一顿一顿的感觉,请高手帮我看看:
http://www.cnchu.com/templates/cnchu/aps/snow.swf
对比一下高手做的效果就很明显:
http://www.cnchu.com/templates/cnchu/aps/snow2.swf
源码:直接flash上第一帧,s1是雪花mc的链接
import flash.events.Event;
var wind:Number = 0;
var gravity:Number = 0;
var snow:Array=new Array();
windtext.alpha = 0.3;
for (var i=1; i<100; i++)
{
snow[i]=new s1();
addChild(snow[i]);
snow[i].scaleX = snow[i].scaleY = 0.1 + Math.random() * 0.1;
snow[i].y = 1 / 2 * stage.stageHeight - Math.random() * stage.stageHeight;
snow[i].x = Math.random() * stage.stageWidth;
snow[i].filters = [new GlowFilter(0xffffff,1,10,10)];
snow[i].addEventListener(Event.ENTER_FRAME,move);
}
function move(e:Event)
{
gravity = e.target.scaleX * 3;
e.target.y += Math.random() * 1 + gravity;
if (checkbox.selected == true)
{
windtext.alpha = 1;
strbar.visible = true;
strbar.enabled = true;
wind = strbar.value;
e.target.x += Math.random() * 2 - 1 + wind;
}
else
{
windtext.alpha = 0.3;
strbar.visible = false;
strbar.enabled = false;
e.target.x += Math.random() * 2 - 1;
}
e.target.rotation += Math.random() * 10;
if (e.target.y > stage.stageHeight)
{
e.target.y = 0;
}
if (e.target.x < 0)
{
e.target.x = stage.stageWidth;
}
if (e.target.x > stage.stageWidth)
{
e.target.x = 0;
}
}
本人尝试过:
1.使用updateAfterEvent,结果:该方法不支持ENTER_FRAME事件
2.将动画属性设置为允许平滑,结果:flash cs5中找不到设置选项
可以直接修改源码,或者告诉我如何设置,非常感谢! 展开
http://www.cnchu.com/templates/cnchu/aps/snow.swf
对比一下高手做的效果就很明显:
http://www.cnchu.com/templates/cnchu/aps/snow2.swf
源码:直接flash上第一帧,s1是雪花mc的链接
import flash.events.Event;
var wind:Number = 0;
var gravity:Number = 0;
var snow:Array=new Array();
windtext.alpha = 0.3;
for (var i=1; i<100; i++)
{
snow[i]=new s1();
addChild(snow[i]);
snow[i].scaleX = snow[i].scaleY = 0.1 + Math.random() * 0.1;
snow[i].y = 1 / 2 * stage.stageHeight - Math.random() * stage.stageHeight;
snow[i].x = Math.random() * stage.stageWidth;
snow[i].filters = [new GlowFilter(0xffffff,1,10,10)];
snow[i].addEventListener(Event.ENTER_FRAME,move);
}
function move(e:Event)
{
gravity = e.target.scaleX * 3;
e.target.y += Math.random() * 1 + gravity;
if (checkbox.selected == true)
{
windtext.alpha = 1;
strbar.visible = true;
strbar.enabled = true;
wind = strbar.value;
e.target.x += Math.random() * 2 - 1 + wind;
}
else
{
windtext.alpha = 0.3;
strbar.visible = false;
strbar.enabled = false;
e.target.x += Math.random() * 2 - 1;
}
e.target.rotation += Math.random() * 10;
if (e.target.y > stage.stageHeight)
{
e.target.y = 0;
}
if (e.target.x < 0)
{
e.target.x = stage.stageWidth;
}
if (e.target.x > stage.stageWidth)
{
e.target.x = 0;
}
}
本人尝试过:
1.使用updateAfterEvent,结果:该方法不支持ENTER_FRAME事件
2.将动画属性设置为允许平滑,结果:flash cs5中找不到设置选项
可以直接修改源码,或者告诉我如何设置,非常感谢! 展开
展开全部
不平滑是因为你的算法有问题,当然还要设置帧频25-40fps……
首先,把x轴的变化先去掉,你先实现让雪花转动着掉下,这一步应该没问题
然后,加上x轴的变化,用一个固定的deltaX,实现让雪花斜着落下,这一步应该也没问题
代码是 x += deltaX;
接下来才是重点,你要在deltaX的基础上再加上一个恒定加速度plusX,实现让雪花弧线落下,当然plusX可正可负
代码是 deltaX += plusX
x += deltaX;
好了,最后还剩一步,让plusX按照一定的规律变化,而非恒定,这个规律就随便你了,可以用随机数,也可以弹簧原理根据中线距离。
如果你上面都实现了,应该就是平滑运动了,不过注意每个值是逐渐递减的,比如deltaX是2,那么plusX就是0.1-0.3,plusX的变化就要更小一点。这样子整个变化才柔和。
首先,把x轴的变化先去掉,你先实现让雪花转动着掉下,这一步应该没问题
然后,加上x轴的变化,用一个固定的deltaX,实现让雪花斜着落下,这一步应该也没问题
代码是 x += deltaX;
接下来才是重点,你要在deltaX的基础上再加上一个恒定加速度plusX,实现让雪花弧线落下,当然plusX可正可负
代码是 deltaX += plusX
x += deltaX;
好了,最后还剩一步,让plusX按照一定的规律变化,而非恒定,这个规律就随便你了,可以用随机数,也可以弹簧原理根据中线距离。
如果你上面都实现了,应该就是平滑运动了,不过注意每个值是逐渐递减的,比如deltaX是2,那么plusX就是0.1-0.3,plusX的变化就要更小一点。这样子整个变化才柔和。
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.可能你的帧频太低了,动画要高于25,最好用30
2.可以用timer事件调用EnterFrame调用的函数
2.可以用timer事件调用EnterFrame调用的函数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询