Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.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 基于帧的计数器还是计时器?_Actionscript 3_Game Development - Fatal编程技术网

Actionscript 3 基于帧的计数器还是计时器?

Actionscript 3 基于帧的计数器还是计时器?,actionscript-3,game-development,Actionscript 3,Game Development,我使用这个基于帧的计数器来代替计时器类,因为我的游戏中的一切都是基于帧的。即使在旧电脑上使用,这个计数器也能确保一切正常运行 我想知道创建第十秒基于帧的计数器(甚至是第二十秒基于帧的计数器)是否有意义。基本上,它与下面的计数器几乎相同,除了framesPerSecond变量除以10或20,我使用的不是秒而是十分秒或二十秒 这是个好主意还是个坏主意?在旧计算机上使用时,基于帧的计数器和计时器基本上有区别吗? 我不确定这个话题,所以我问 { import flash.events.*; publ

我使用这个基于帧的计数器来代替计时器类,因为我的游戏中的一切都是基于帧的。即使在旧电脑上使用,这个计数器也能确保一切正常运行

我想知道创建第十秒基于帧的计数器(甚至是第二十秒基于帧的计数器)是否有意义。基本上,它与下面的计数器几乎相同,除了framesPerSecond变量除以10或20,我使用的不是秒而是十分秒或二十秒

这是个好主意还是个坏主意?在旧计算机上使用时,基于帧的计数器和计时器基本上有区别吗? 我不确定这个话题,所以我问

{
import flash.events.*;


public class BasicFrameTimer extends EventDispatcher
{
    public static const TIME_IS_UP:String = "timesup";
    public var countUp:Boolean = false;
    public var min:int = 0;
    public var max:int;
    public var maxSet:Boolean = false;
    public var seconds:int;
    private var frameCount:int;
    public var started:Boolean = false;
    private var framesPerSecond:int;

    public function BasicFrameTimer(framesPerSecond:int) {
        this.framesPerSecond = framesPerSecond;

    }

    public function start():void {
        frameCount = 0;
        started = true;
    }

    public function stop():void {
        started = false;
    }

    public function reset():void {
        if (countUp) {
            seconds = 0;
        } else {
            seconds = max;
        }
    }

    public function update():void {

        if (started) {
            frameCount++;
            if (frameCount > (framesPerSecond)) {
                frameCount = 0;

                if (countUp) {
                    seconds++;

                    if (maxSet == true && seconds == max) {
                        stop();
                        dispatchEvent(new Event(TIME_IS_UP));
                    }
                } else {
                    seconds--;
                    if (seconds == min) {
                        stop();
                        dispatchEvent(new Event(TIME_IS_UP));
                    }
                }
            }

        }


    }

}
}

a和使用a之间的区别在于舞台是如何更新的,而不仅仅是在旧电脑上

您可以将建议的每秒帧数设置设置为
.fla
文件的一部分,编译的
.swf
将尽最大努力保持建议的设置。如果不能,它将开始跳过帧以保持同步

如果您定义了一些交互,例如动画,在帧事件上发生,或者通过帧计数器发生,它们将与帧一起执行,这意味着更高的fps将导致更快的动画。相反,如果动画依赖于计时器,则它们将与计时器一起执行

使用计时器执行将保留实时交互,但会牺牲一些动画的波动性。测试是否正确实施了更新周期计时器的一个好方法是将fps降低到
1
2
,并查看动画是否在相同的时间(±1s)内完成

正如您所标记的,我建议使用组合

使用
定时器的循环应用于检查输入、加载资源和检查游戏状态(
输入
加载
更新

使用
ENTER\u FRAME
的循环应用于修改可绘制资源(
render

使用
EXIT_FRAME
的循环应用于卸载资源(
unload


这种组合的原因是,您可以在固定的时间间隔内执行简单的计算,但在实际需要渲染之前,您不会将时间浪费在任何渲染特定的逻辑上。此外,它将允许您的时间关键型资产保持同步,即使在速度较慢的机器上也是如此。

使用a和使用a之间存在差异,这意味着阶段的更新方式,而不仅仅是在旧计算机上

您可以将建议的每秒帧数设置设置为
.fla
文件的一部分,编译的
.swf
将尽最大努力保持建议的设置。如果不能,它将开始跳过帧以保持同步

如果您定义了一些交互,例如动画,在帧事件上发生,或者通过帧计数器发生,它们将与帧一起执行,这意味着更高的fps将导致更快的动画。相反,如果动画依赖于计时器,则它们将与计时器一起执行

使用计时器执行将保留实时交互,但会牺牲一些动画的波动性。测试是否正确实施了更新周期计时器的一个好方法是将fps降低到
1
2
,并查看动画是否在相同的时间(±1s)内完成

正如您所标记的,我建议使用组合

使用
定时器的循环应用于检查输入、加载资源和检查游戏状态(
输入
加载
更新

使用
ENTER\u FRAME
的循环应用于修改可绘制资源(
render

使用
EXIT_FRAME
的循环应用于卸载资源(
unload


这种组合的原因是,您可以在固定的时间间隔内执行简单的计算,但在实际需要渲染之前,您不会将时间浪费在任何渲染特定的逻辑上。此外,它将允许您的时间关键型资源保持同步,即使在速度较慢的机器上。

实现帧速率独立动画的最佳方法是使用
getTimer()
函数。它返回自Flash VM启动以来经过的毫秒数

每帧只能执行一次屏幕更新

使用
getTimer()
可以确定自上一帧(上次屏幕更新)以来经过的精确毫秒数。使用此值,可以轻松地对显示列表进行必要的调整


例如,使用此技术,以每50ms 1像素移动的
精灵可以在所有系统上以相同的速度有效移动,即使系统只能每500ms更新一次屏幕。

实现帧速率独立动画的最佳方法是使用
getTimer()
函数。它返回自Flash VM启动以来经过的毫秒数

每帧只能执行一次屏幕更新

使用
getTimer()
可以确定自上一帧(上次屏幕更新)以来经过的精确毫秒数。使用此值,可以轻松地对显示列表进行必要的调整


例如,使用这种技术,
Sprite
以每50ms 1个像素的速度移动,可以在所有系统上有效地以相同的速度移动,即使系统只能每500ms更新一次屏幕。

然而,大多数flash开发者似乎不会将游戏逻辑与图形分开。@gladoscc,我冒昧地猜测,大多数flash开发人员都没有受过任何正式的游戏开发教育。这并不是说他们的比赛更糟糕,只是他们没有