AS 3.0停止定时器

发布于 2025-01-02 17:29:23 字数 1762 浏览 0 评论 0原文

您好,我需要帮助来停止使用 as 3.0 的 Flash 游戏中的计时器,我需要这个来暂停游戏,因为我使用 getTimer() 函数移动一些目标,我可以在游戏暂停时使目标停止移动,但是因为当我取消暂停游戏时, getTimer() 继续运行,目标从屏幕上消失(它们的位置变化太快)。有没有一种方法可以停止计时器,或者有更好的方法可以像 getTimer 一样平滑地移动我的目标? her5e 是我的代码:

//animates targets
        private function MoveTarget(e:Event) {

            if (!MovieClip(parent).pauseGame) {
                //get time passed
                timePassed = getTimer() - lastTime;
                lastTime += timePassed;
            }

            //move the target
            this.x += dx * timePassed/1000;

            //check to see if the target is offscreen
            switch (targetType) {
                case "small":
                    if ( dx > 0 && this.x > 771 ) {     //left->right target
                        deleteTarget(false);
                    } else if ( dx < 0 && this.x < -26 ) {  //left<-right target
                        deleteTarget(false);
                    }
                    break;
                case "medium":
                    if ( dx > 0 && this.x > 790 ) {     //left->right target
                        deleteTarget(false);
                    } else if ( dx < 0 && this.x < -40 ) {  //left<-right target
                        deleteTarget(false);
                    }
                    break;
                case "big":
                    if ( dx > 0 && this.x > 800 ) {     //left->right target
                        deleteTarget(false);
                    } else if ( dx < 0 && this.x < -50 ) {  //left<-right target
                        deleteTarget(false);
                    }
                    break;
            }

        }

Hi i need help to stop the timer in a flash game using as 3.0, i need this to pause the game because i move some targets using the getTimer() function, i can make the targets stop their movement when the game is paused but because the getTimer() keeps running when i unpause the game the targets just dissapear from screen (their position changes too fast). is there a way of stopping the timer or a better way of moving my targets as smooth as the getTimer does? her5e is my code:

//animates targets
        private function MoveTarget(e:Event) {

            if (!MovieClip(parent).pauseGame) {
                //get time passed
                timePassed = getTimer() - lastTime;
                lastTime += timePassed;
            }

            //move the target
            this.x += dx * timePassed/1000;

            //check to see if the target is offscreen
            switch (targetType) {
                case "small":
                    if ( dx > 0 && this.x > 771 ) {     //left->right target
                        deleteTarget(false);
                    } else if ( dx < 0 && this.x < -26 ) {  //left<-right target
                        deleteTarget(false);
                    }
                    break;
                case "medium":
                    if ( dx > 0 && this.x > 790 ) {     //left->right target
                        deleteTarget(false);
                    } else if ( dx < 0 && this.x < -40 ) {  //left<-right target
                        deleteTarget(false);
                    }
                    break;
                case "big":
                    if ( dx > 0 && this.x > 800 ) {     //left->right target
                        deleteTarget(false);
                    } else if ( dx < 0 && this.x < -50 ) {  //left<-right target
                        deleteTarget(false);
                    }
                    break;
            }

        }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浅浅淡淡 2025-01-09 17:29:23

这是一个简单的解决方案,但我认为您应该了解什么是时间步长,这是游戏编程的关键概念,请参阅修正你的时间步长!

if (!MovieClip(parent).pauseGame) {
    //get time passed
    timePassed = getTimer() - lastTime;
    lastTime += timePassed;
}
else
{
    lastTime = getTimer();
    return;
}

Here is a simple solution, but I think you should learn what is timestep, it's a critical concept for game programming, see Fix Your Timestep!

if (!MovieClip(parent).pauseGame) {
    //get time passed
    timePassed = getTimer() - lastTime;
    lastTime += timePassed;
}
else
{
    lastTime = getTimer();
    return;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文