十二月 13, 2009 1 : 36 下午 此格有 22 个脚印
即时获得麻球游戏开发的最新消息,关注游戏开发者热门讨论,请各位开发者申请加入麻球官方群:121304476
也可以follow catfly围脖:t.sina.com.cn/iscat
也可以follow catfly围脖:t.sina.com.cn/iscat
鼠标移动速度是一个用户可以控制的数值,自然可以用来做一些有趣的交互。
- 鼠标移动速度可以用来表示能量值的变化
- 用来控制图片或菜单等翻滚的速度
- 可以根据鼠标速度来制作元件以不同的缓冲值跟随到鼠标的效果
下面是我在一个百威广告中用鼠标x轴速度来驱动光条的运动。
基于帧频stage.frameRate来检测新旧鼠标位置差进而算出速度。
var oldx:Number;
var sx:Number = 0;
//tiao.mask是一个光条元件中的蒙板
addEventListener(Event.ENTER_FRAME,boMove);
function boMove(evt:Event):void{
var mousx:Number = mouseX;
//当鼠标产生x方向的位移时根据移动速度驱动光条运动
if(oldx && mouseX < 265){
if(oldx != mouseX){
//这里用了完整的速度公式,可以直接写uint(Math.abs(mousx-oldx))*stage.frameRate
sx = uint(Math.abs(mousx-oldx))/(1/stage.frameRate);
//限制了最大速度
if(sx<5000){
//我调整了速度,免得光条运动过于激烈
TweenLite.to(tiao.mask,0.5,{y:228 -(sx/13)});
}
}else{
//无鼠标x轴的运动,光条运动消失
TweenLite.to(tiao.mask,0.5,{y:228});
}
}else{
TweenLite.to(tiao.mask,0.5,{y:228});
}
oldx = mousx;
}
我在网上看到一个朋友用Point.distance()来算新旧鼠标位置差。
import flash.geom.Point
var pointOld:Point=new Point(mouseX,mouseY)//获取鼠标初始位置
addEventListener(Event.ENTER_FRAME,enterHandler)//注册帧循环事件
function enterHandler(e:Event){
var pointNew:Point=new Point(mouseX,mouseY)
var step:Number=Point.distance(pointNew,pointOld)//求每帧移动距离
trace(step*stage.frameRate)//得出每秒鼠标的移动象素
pointOld=pointNew//新值换旧值
}
下面这位老外朋友的代码说:反正只是驱动某一数值变化而已,只需要计算每帧的位移就可以了。
我觉得也不错啊,有时候不用太拘泥于速度公式。
var prevPt:Point=new Point(mouseX,mouseY);
addEventListener(Event.ENTER_FRAME,mouseSpeed);
function mouseSpeed(e:Event) {
var xspeed=Math.abs(mouseX-prevPt.x);
var yspeed=Math.abs(mouseY-prevPt.y);
var speed=xspeed+yspeed;
prevPt=new Point(mouseX,mouseY);
trace(speed);
}
有朋友看到大家都基于帧频来计算速度,于是提出疑问:帧频并不能准确的表达经过的时间。
我写段代码测了一下,果然误差还是蛮大的。
var oDate:Date = new Date();
var nDate:Date;
var oTime:Number = oDate.getTime();
var nTime:Number
addEventListener(Event.ENTER_FRAME,enterHandler)
function enterHandler(e:Event){
nDate = new Date();
nTime = nDate.getTime();
var s:Number=(nTime-oTime)/1000;
trace(s);
oTime = nTime;
}
ok,写到这里,相信大家知道如何计算更精确一点的鼠标移动速度了吧。
这里列出了与鼠标相关的几种情形,大家各取所需吧。
Tag鱼片:
flash鼠标移动速度 frameRate getTime mouse speed Point







