Actionscript 3 android和iphone as3的可拖动菜单
我想做一个像instragram和其他应用程序一样的可拖动菜单 我试着做一个可分级的球,它沿着我的手指/鼠标在x轴上移动,然后可以扔到舞台上。然而,它在我的android上不起作用,我不明白它是纯数学的,应该能起作用。我试着推掉任何值,但没有成功 有什么建议说明它为什么不起作用吗? 多谢各位Actionscript 3 android和iphone as3的可拖动菜单,actionscript-3,menu,air,scroll,Actionscript 3,Menu,Air,Scroll,我想做一个像instragram和其他应用程序一样的可拖动菜单 我试着做一个可分级的球,它沿着我的手指/鼠标在x轴上移动,然后可以扔到舞台上。然而,它在我的android上不起作用,我不明白它是纯数学的,应该能起作用。我试着推掉任何值,但没有成功 有什么建议说明它为什么不起作用吗? 多谢各位 package { import flash.display.Sprite; import flash.events.MouseEvent; im
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.geom.Rectangle;
import flash.utils.Timer;
import flash.geom.Point;
/**
* ...
* @author
*/
public class GravityCoinsMain extends Sprite
{
private var theCoin:Coin;
private var deltaX:Number = 0;
private var prevX:Number = 0;
private var newX:Number = 0;
private var PCControl:Boolean = true;
private var speedLimit:Number = 15;
private var timer:Timer = new Timer(10);
private var dragFactor:Number = 0.97;
private function update(te:TimerEvent):void
{
if (PCControl)
{
if (theCoin.x > 0 && (theCoin.x < stage.stageWidth))
{
theCoin.x += deltaX;
deltaX *= dragFactor;
}
}
else
{
prevX = newX;
newX = theCoin.x;
deltaX = newX - prevX;
var speed:Number = deltaX ;
if ( speed > speedLimit )
{
deltaX *= speedLimit / speed;
}
}
}
private function beginDrag(me:MouseEvent):void
{
theCoin.startDrag(false, new Rectangle(0,theCoin.y,5000,0));
PCControl = false;
timer.start();
}
private function endDrag(me:MouseEvent):void
{
theCoin.stopDrag();
PCControl = true;
}
public function GravityCoinsMain()
{
theCoin = new Coin();
addChild(theCoin);
theCoin.x = stage.stageWidth / 2;
theCoin.y = stage.stageHeight / 2;
theCoin.addEventListener(MouseEvent.MOUSE_DOWN, beginDrag);
theCoin.addEventListener(MouseEvent.MOUSE_UP, endDrag);
timer.addEventListener(TimerEvent.TIMER, update);
}
}
}
包
{
导入flash.display.Sprite;
导入flash.events.MouseEvent;
导入flash.events.TimerEvent;
导入flash.geom.Rectangle;
导入flash.utils.Timer;
导入flash.geom.Point;
/**
* ...
*@作者
*/
公共类GravityCoinsMain扩展了Sprite
{
私有货币:硬币;
私人增值税:数字=0;
private var prevX:Number=0;
私有变量newX:Number=0;
专用var PCControl:布尔值=真;
私人var速度限制:数字=15;
专用var定时器:定时器=新定时器(10);
私有变量dragFactor:Number=0.97;
私有函数更新(te:TimerEvent):无效
{
如果(PCControl)
{
如果(角x>0&(角x速度限制)
{
deltaX*=速度限制/速度;
}
}
}
私有函数beginDrag(me:MouseEvent):void
{
圆起始点(假,新矩形(0,圆y,5000,0));
PCControl=false;
timer.start();
}
私有函数endDrag(me:MouseEvent):void
{
coin.stopDrag();
PCControl=true;
}
公共职能部门
{
硬币=新硬币();
addChild(theCoin);
coin.x=stage.stageWidth/2;
coin.y=stage.stageHeight/2;
添加的列表项(MouseEvent.MOUSE_DOWN,beginDrag);
coin.addEventListener(MouseEvent.MOUSE\u UP,endDrag);
timer.addEventListener(TimerEvent.timer,更新);
}
}
}
我建议查看Greensock的ThrowProps插件。它不是免费提供的,但它允许基于速度和摩擦力的运动。今年早些时候,我用它创建了自己的滚动条,它实际上比Flex滚动条感觉更好。你应该能够使用它来达到这个目的(或者至少是它的原理和示例代码),谢谢你,这些家伙想为他们的课程做很多事情,但是看看我的示例,它在桌面上工作很好,为什么不在我的手机上呢?是的,插件很昂贵。但是图书馆是最好的图书馆之一。至少看一下滚动条的示例代码。也就是说,我看到的唯一不合适的地方(除了一些糟糕的类结构)是鼠标向上
侦听器应该连接到舞台上,而不是硬币,并添加到鼠标向下
处理程序中。我想我发现了问题,似乎手机比桌面更快(我知道这听起来很奇怪…)但是我会把计时器的延迟时间从10改为50,效果会很好。我真的不知道为什么,但就是这样!请看我的答案和评论。