Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 在as3中2秒后制作movieclip跟随鼠标_Actionscript 3_Flash Cs5 - Fatal编程技术网

Actionscript 3 在as3中2秒后制作movieclip跟随鼠标

Actionscript 3 在as3中2秒后制作movieclip跟随鼠标,actionscript-3,flash-cs5,Actionscript 3,Flash Cs5,我试图让movieclip“orb_mc”在延迟2秒后沿着鼠标指针的相同坐标移动,也就是说,在球体移动到与指针相同的位置之前,应该有2秒的延迟。下面是我的代码-除了延迟,一切都正常 import flash.events.Event; Mouse.hide(); stage.addEventListener(MouseEvent.MOUSE_MOVE, moveThatMouse); function moveThatMouse(evt:MouseEvent):void { wand

我试图让movieclip“orb_mc”在延迟2秒后沿着鼠标指针的相同坐标移动,也就是说,在球体移动到与指针相同的位置之前,应该有2秒的延迟。下面是我的代码-除了延迟,一切都正常

import flash.events.Event;

Mouse.hide();
stage.addEventListener(MouseEvent.MOUSE_MOVE, moveThatMouse);

function moveThatMouse(evt:MouseEvent):void {
    wand.x = stage.mouseX;
    wand.y = stage.mouseY;
    evt.updateAfterEvent();
}

var myTimer:Timer = new Timer(2000);
        var speed:Number=10;

        orb_mc.addEventListener(Event.ENTER_FRAME,follow);
        function follow(e:Event):void{
            myTimer.start();
           orb_mc.x -= (orb_mc.x - mouseX) / speed;
            orb_mc.x = orb_mc.x +2;
           orb_mc.y -= (orb_mc.y - mouseY) / speed;
            orb_mc.y = orb_mc.y +3;

        }

在这种情况下,我不会费心使用计时器。根据您对我的评论的回复,我理解您只是希望
orb\u mc
平稳移动到鼠标停止移动的点。当然,你可以简单地说一些“如果鼠标不移动,请将球体发送给鼠标”的话,但问题是你会得到这些急促的动作,因为会有一些鼠标移动不正常的小时刻(特别是当鼠标开始向另一个方向移动时)。这就是为什么你想增加一些延迟。所以我的方法是,基本上每帧都有一个计数器,每当鼠标移动时,计数器都会重置为0

import flash.events.Event;

Mouse.hide();
stage.addEventListener(MouseEvent.MOUSE_MOVE, moveThatMouse);

function moveThatMouse(evt:MouseEvent):void {
    wand.x = stage.mouseX;
    wand.y = stage.mouseY;
    evt.updateAfterEvent();
}

var myTimer:Timer = new Timer(2000);
        var speed:Number=10;

        orb_mc.addEventListener(Event.ENTER_FRAME,follow);
        function follow(e:Event):void{
            myTimer.start();
           orb_mc.x -= (orb_mc.x - mouseX) / speed;
            orb_mc.x = orb_mc.x +2;
           orb_mc.y -= (orb_mc.y - mouseY) / speed;
            orb_mc.y = orb_mc.y +3;

        }
import flash.display.MovieClip;
import flash.events.Event; 
Mouse.hide(); 

var mouseCounter: int = 0;
var mouseDelay: int = 20; // how many frames the mouse must stay still before the follow code is run.    
// var myTimer:Timer = new Timer(2000); won't need this with my method.
var speed:Number=10; 

stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMove);

stage.addEventListener(Event.ENTER_FRAME,follow);

// set counter back to zero whenever the mouse is moved. 
function mouseMove(e:MouseEvent):void
{
    wand.x = stage.mouseX;
    wand.y = stage.mouseY;
    e.updateAfterEvent();
    mouseCounter = 0;
}

function follow(e:Event):void{
    // increment the counter each frame
    mouseCounter++; 

    // now run the follow block if the mouse has been still for enough frames. 
    if (mouseCounter >= mouseDelay)
    {
        //myTimer.start();  won't need this for my method. 
        orb_mc.x -= (orb_mc.x - mouseX) / speed;
        orb_mc.x += 2;
        orb_mc.y -= (orb_mc.y - mouseY) / speed;
        orb_mc.y += 3;
     }
}

这个问题还不清楚。往前走一点?这是什么意思?准确地说出你想要发生什么。如果你不能准确地向一个人解释你想要什么,你肯定无法让一台计算机理解你。我是否能理解这个动作正是你想要的,但你只是不想让它在运行.swf的前2秒钟对鼠标做出反应?或者你是说你想让球体落后于鼠标所在的位置2秒?没错,我想让它落后于鼠标所在的位置2秒。对不起,我不清楚。我会试着把我的问题写下来。我想我开始明白了。但也请帮助我理解为什么要用常数+2和+3来增加球体的x/y坐标?好吧,这是我唯一能想出的业余解决方案,以确保球体不直接位于指针下方,而是在移动到鼠标指针的末端时,距离鼠标指针的尖端几步,如果你能将我如何实现这一点的代码行张贴出来,那将是非常有帮助的。这让我绞尽脑汁。谢谢你的帮助,但是这个解决方案是基于我正在处理一个类文件的假设吗?因为处理类文件并不是我的强项,是的,你不知道,但你的主要类实际上是舞台。当您使用它的时间线来编写代码时,您正在编写它。这应该是复制和粘贴,应该工作良好。根据您选择的帧速率,使用mouseDelay。好的,尽管我得到一个错误,“private属性可能仅用于类属性定义”Ok。那就别管那个私事了