我需要做一件简单的事情,通过点击按钮1次,慢慢地将item1向上移动100 px并向下移动100 px。我试过这个,但是item1立即增加50px并立即减少50px,我需要让它变慢。
var moving:Boolean = false;
if(!moving){
item1.y -= 50;
moving = true;
}
else {
item1.y += 50;
moving = false;
}
答案 0 :(得分:0)
您可以设置最大移动值,如50,然后将Y上的item1移动1,并将该最大值减1.当最大值达到0时,该项目达到命运。
if(!moving){
item1.y-=1;
maxValue--;
if(maxValue==0){
//reached final position
}
}
答案 1 :(得分:0)
使用Timer
对象。在你的类中声明该对象。然后,当单击按钮时,将对象设置为Timer
的新实例,该实例将非常快速地运行并进行多次迭代,向新Timer
添加事件侦听器,并在事件中侦听器,将更小的增量或减量应用于item1.y
。例如:
private var m_tmr:Timer;
private function buttonClickHandler(pEvent:MouseEvent):void
{
// This is the function that's called when the button's clicked.
if (m_tmr == null)
{
m_tmr = new Timer(200, 0);
m_tmr.addEventListener(TimerEvent.TIMER, onTimer);
m_tmr.start();
}
}
private function onTimer(pEvent:TimerEvent):void
{
// The first several times this function is called (should be around every
// 200 milliseconds), increment item1.y by 1 or 2 or something else small.
// After the first many times, start decrementing item1.y by the same amount.
// Then call m_tmr.removeEventListener(TimerEvent.TIMER, onTimer);
}
答案 2 :(得分:0)
每次增量移动后,您必须告诉Flash重新绘制屏幕。一个很好的方法是使用ENTER_FRAME循环:
var moving:Boolean = false;
const initY = item1.y; // your starting y value
const limitY = initY - 100; // your move will end here
if(!moving){
moving = true;
addEventListener(Event.ENTER_FRAME,moveit)
function moveit(e)
{
item1.y -=1
if (item1.y < limitY)
removeEventListener(Event.ENTER_FRAME,moveit)
}
一旦你到达了你想去的地方,你必须removeEventListener(...)
,否则循环会继续,并且会占用内存和性能。
<强>更新强>
所以,要点击鼠标,你就可以这样做:
var moving:Boolean = false;
const initY = item1.y; // your starting y value
const limitY = initY - 100; // your move will end here
stage.addEventListener(MouseEvent.CLICK, moveUp)
function moveUp(e)
{
stage.removeEventListener(MouseEvent.CLICK, moveUp)
if(!moving){
moving = true;
addEventListener(Event.ENTER_FRAME,moveit)
function moveit(e)
{
item1.y -=1;
if (item1.y < limitY)
{
removeEventListener(Event.ENTER_FRAME,moveit);
item1.y = limitY;
moving = false;
}
}
}
当您使用stage
方法通过鼠标单击注册侦听器功能时,您可能只想定位按钮,而不是定位addEventListener
。
要返回到开始位置,请将相同的想法应用于另一个按钮或另一个MouseEvent。例如,你可以向上移动MOUSE_DOWN并向下移动MOUSE_UP。
在侦听器函数中可以执行更复杂的操作(在本例中为移动函数)。您可以将“缓动”应用于动作的开始和结束,以使动作看起来更自然。但是,你必须阅读 - 这个答案已经太久了!
答案 3 :(得分:0)
我想参与这个对话。没有If语句的我的对象移动版本。运动基于三角函数:
var objectToAnimate:Shape = new Shape();
objectToAnimate.graphics.beginFill(0x009900);
objectToAnimate.graphics.drawCircle(0, 0, 20);
addChild(objectToAnimate);
//Place it somewhere
objectToAnimate.x = objectToAnimate.y = 200;
//Config for movement
var step:Number = 1; //really slow... 1° per frame
var maxOffsetY:Number = -100; //Move object maximum on 100px top
var cursor:Number = -90;
var position: Number = objectToAnimate.y; // catch current position
var timer:Timer = new Timer(30, 180);
timer.addEventListener(TimerEvent.TIMER, updateAnimation);
timer.start();
function updateAnimation(e:TimerEvent):void {
objectToAnimate.y = position + Math.cos(cursor * Math.PI / 180) * maxOffsetY;
cursor += step;
}