Actionscript 3 AS3在特定帧上移动对象

Actionscript 3 AS3在特定帧上移动对象,actionscript-3,flash,Actionscript 3,Flash,所以我已经为这个游戏工作了一周了,我根本没有任何编码背景,所以我试着到处找教程。。然后我想到了这个问题 所以我想做的是,当我点击第80帧时,将对象(CHARA)向右移动(CHARA,这是一个嵌套的movieClip,附带99帧),然后当我点击第99帧时,将其移回原始位置。。。 问题是我做的任何事情都不会让我的物体移动(movieClip仍然在播放顺便说一句)我做错了什么?我是不是把代码放错位置了??(仅当我将代码x=直接放在第80帧内时,字符才会移动,但我尝试在此处使用类) 这是我的代码,抱歉我

所以我已经为这个游戏工作了一周了,我根本没有任何编码背景,所以我试着到处找教程。。然后我想到了这个问题

所以我想做的是,当我点击第80帧时,将对象(CHARA)向右移动(CHARA,这是一个嵌套的movieClip,附带99帧),然后当我点击第99帧时,将其移回原始位置。。。 问题是我做的任何事情都不会让我的物体移动(movieClip仍然在播放顺便说一句)我做错了什么?我是不是把代码放错位置了??(仅当我将代码x=直接放在第80帧内时,字符才会移动,但我尝试在此处使用类)

这是我的代码,抱歉我知道它很乱这是我的第一个代码我在这里尽了最大的努力

package {

    public class Main extends MovieClip {

        public var CHARA:CHAR = new CHAR;//my main char
        public var rasen:Rasen_button = new Rasen_button;//the skill button
        public var NPCS:NPC = new NPC;// the npc

        public function Main() {
            var ally:Array = [265,296];//where me and my ally should be
            var jutsu:Array = [330,180];// where the buttons should be
            var enemy:Array = [450,294];//where the enemies should be

            addChild(NPCS);
            NPCS.x = enemy[0];
            NPCS.y = enemy[1];
            NPCS.scaleX *=  -1;

            addChild(rasen);
            rasen.x = jutsu[1];
            rasen.y = jutsu[0];

            addChild(CHARA);
            CHARA.x = ally[0];
            CHARA.y = ally[1];
            rasen.addEventListener(MouseEvent.CLICK, f2_MouseOverHandler);
            function f2_MouseOverHandler(event:MouseEvent):void {
                CHARA.gotoAndPlay(46); //here is the problem
                if (CHARA.frame == 80)
                {
                    CHARA.x = ally[1]; //just random possition for now
                }

            }
        }
    }
}

有什么建议吗?

如果您的
语句位于单击处理程序(
f2\u MouseOverHandler
)中,那么它只在用户单击
rasen
时执行,而不必在播放达到帧
80
时执行。这是初学者在计时和代码执行方面常见的错误。最直接的解决方案是编写一些代码,使用
ENTER\u frame
处理程序执行每一帧:

        rasen.addEventListener(MouseEvent.CLICK, f2_MouseOverHandler);
        function f2_MouseOverHandler(event:MouseEvent):void {
            CHARA.gotoAndPlay(46); //here is the problem

            // add an ENTER_FRAME handler to check every frame
            CHARA.addEventListener(Event.ENTER_FRAME, chara_EnterFrameHandler)
        }
        function chara_EnterFrameHandler(event:Event):void {
            if (CHARA.currentFrame == 80)
            {
                CHARA.x = ally[1]; //just random possition for now

                // remove the ENTER_FRAME after the condition is met
                // so it stops executing each frame
                CHARA.removeEventListener(Event.ENTER_FRAME, chara_EnterFrameHandler);
            }
        }

还是不动。。。让我解释一下。在我的CHARA对象中,有嵌套的99帧movieClip,带有2个舞台中间(1-42)和jutsu(43-99),当我点击按钮rasen时,我想播放jutsu,在第80帧中,我的角色应该移动到敌人的前面,然后在我点击第99帧后回到它的位置。我的代码确实播放了jutsu动画,当我试图写if(CHAR.frame==1){trace(“aadd”)}时,它可以工作,但是如果我把1改成其他任何东西,它就不能工作,所以我认为问题是我的代码没有听我的对象框架,而是听主阶段,它只是一个框架。那么我是如何使用对象帧而不是舞台帧的呢??谢谢,这很难理解。我所能说的是,如果你在代码中移动一个对象(如
Char.x=
),那么该对象的时间线动画将不再工作。你只能做一个或另一个。找到答案…我只需要使用currentFrame而不是frame…我确实使用了你的代码,谢谢