- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个游戏,它总是有一些移动的东西,所以我使用了很多 Timer 实例来控制重复和触发 Action 。
现在问题是我开始注意到一些性能“滞后”。这是因为计时器吗?您是否建议改用 ENTER_FRAME 事件?
相关:您是否建议任何其他可以提高性能的游戏的库/方法?简单的 Tween 库本身是不够的。
最佳答案
拥有 或许更有意义只有一个计时器在运行对于这个问题 ...
据我所知,一个正在运行的 Timer 需要一个完整的线程......
把它放在伪代码中,Timer线程的主代码是这样的......
while (input.isEmpty()) {
wait(interval);
output.add({timerId:thisId, tickId: tickId++});
}
package {
import flash.utils.*;
public class Ticker {
//{ region private vars
private var _interval:int;
private var _tick:uint = 0;
private var _tickLength:Number;
private var _callBacks:Dictionary;
//} endregion
public function Ticker(tickLength:Number = 0) {
this.tickLength = tickLength;
this._callBacks = new Dictionary();
}
//{ region accessors
/**
* the current tick
*/
public function get tick():uint { return _tick; }
/**
* the tick length. set to a non-positive value, to stop ticking
*/
public function get tickLength():Number { return _tickLength; }
public function set tickLength(value:Number):void {
if (this._tickLength > 0) clearInterval(this._interval);
if ((this._tickLength = value) > 0) this._interval = setInterval(this.doTick, value);
}
//} endregion
/**
* add a callback, to be called with every tick
* @param callback function (tick:int):*
*/
public function addCallback(callback:Function):void {
this._callBacks[callback] = callback;
}
/**
* removes a callback previously added and returns true on success, false otherwise
* @param callback
* @return
*/
public function removeCallback(callback:Function):Boolean {
return delete this._callBacks[callback];
}
/**
* executes a tick. actually this happens automatically, but if you want to, you can set tickLength to a non-positive value and then execute ticks manually, if needed
*/
public function doTick():void {
var tick:uint = this._tick++;//actually, this is only superspicion ... amazingly, this makes no difference really ... :D
for each (var callback:* in this._callBacks) callback(tick);
}
}
}
package {
//{ region imports
import flash.display.*;
import flash.events.*;
import flash.sampler.getSize;
import flash.system.System;
import flash.text.*;
import flash.utils.*;
//} endregion
public class Main extends MovieClip {
//{ region configuration
private const timers:Boolean = false;//true for Timer, false for Ticker
private const delay:Number = 500;
private const baseCount:uint = 10000;//base count of functions to be called
private const factor:Number = 20;//factor for Ticker, which is a little more performant
//} endregion
//{ region vars/consts
private const count:uint = baseCount * (timers ? 1 : factor);
private const nullMem:uint = System.totalMemory;//this is the footprint of the VM ... we'll subtract it ... ok, the textfield is not taken into account, but that should be alright ... i guess ...
private var monitor:TextField;
private var frameCount:uint = 0;
private var secCount:uint = 0;
//} endregion
public function Main():void {
var t:Ticker = new Ticker(delay);
var genHandler:Function = function ():Function {
return function (e:TimerEvent):void { };
}
var genCallback:Function = function ():Function {
return function (tick:uint):void { };
}
for (var i:uint = 0; i < count; i++) {
if (timers) {
var timer:Timer = new Timer(delay, 0);
timer.addEventListener(TimerEvent.TIMER, genHandler());
timer.start();
}
else {
t.addCallback(genCallback());
}
}
this.addChild(this.monitor = new TextField());
this.monitor.autoSize = TextFieldAutoSize.LEFT;
this.monitor.defaultTextFormat = new TextFormat("_typewriter");
this.addEventListener(Event.ENTER_FRAME, function (e:Event):void { frameCount++ });
setInterval(function ():void {
monitor.text = "Memory usage: "
+ groupDidgits(System.totalMemory - nullMem)
+ " B\navg. FPS: " + (frameCount /++secCount).toPrecision(3)
+ "\nuptime: " + secCount + "\nwith " + count + " functions";
}, 1000);
}
private function groupDidgits(n:int,sep:String = " "):String {
return n.toString().split("").reverse().map(function (c:String, i:int, ...rest):String { return c + ((i % 3 == 0 && i > 0) ? sep : ""); } ).reverse().join("");
}
}
}
Ticker::_tickLength
是
protected
...有人对其进行子类化,并写入该变量...有什么效果?
Ticker::tickLength
的值将不同于间隔长度......我真的没有看到优势......
protected
使父类(super class)中定义的状态生效的方法,我创建了
protected
setter ...但是,我仍然可以使用react...我可以更改/验证/钳位值,随意抛出参数和范围错误,调度事件等等...如果你写一个类,你自己负责为了保持其状态的完整性及其对其行为的影响......
关于flash - AS3 计时器与 ENTER_FRAME 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1102839/
我在 mac 上,我有一个预先存在的 Flash 项目。 (即通常的 fla、src、lib)文件夹。 现在,我想开始使用 Flash Builder 4 编写代码。 如何导入所有这些文件,以便我现在
我在 Flash 视频播放器中遇到了一个奇怪的、很难重现的图形故障!,目前仅在 Chrome 中。 “进入建筑物”下方的灰色矩形显示了 Flash 播放器所在的 html div 的背景颜色。“我们在
我对 Flash 有点陌生,我只是找不到一种很好的方法来控制我添加到容器影片剪辑中的元素的位置。 我所做的是 addChild 到我的目标容器 Movie Clip 和控件 child 的 x,y 值
我是一名 AS3 开发人员,习惯于使用 Flash Builder。我正在与一位使用 Flash Professional 为游戏设计 Sprite 和背景的设计师合作。我希望为我们创建一个集成的工作
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
当您像下面那样在 FLash Builder 中嵌入媒体时,它会创建一个类来引用 [Embed(source="images/list.png")] protected static const LI
有没有办法在 Flash 上本地启用跳帧? 当您开发游戏时,您会开发动画以匹配游戏玩法的节奏,并以目标帧速率(Flash 通常为 24-40fps)进行制作。但是如果用户的电脑速度太慢,无法保持目标帧
大家好,我想知道 AS3 中的 dispatchEvent 是什么。 谷歌搜索时没有任何想法。 :( 所以请帮帮我 编辑1: public static const SET_VOLUME:Strin
我多次听说我应该避免在我的网站上使用 Flash。然而,没有人告诉我这样做的充分理由。我已经搜索了原因,我看到很多不正确的(例如 Flash 中的文本不能被搜索引擎索引),或者不一定是真实的或足够重要
我正在为一个非常大的网站做一些测试,创建了许多不同的开发人员。有没有办法判断网站是否在使用 flash和/或已加载闪存 plugin ?如果页面使用 Flash,有没有办法告诉页面/代码的哪一部分触发
我正在研究“Foundation Actionscript 3.0”一书中的音频播放器演示。当我尝试发布 AudioDemo_final.FLA 文件时,出现以下错误:“Adobe Flash CS3
我有一个特定的FLA,每次尝试编译时都会崩溃(切换到Snow Leopard之后)。 Flash只是停滞不前,我被迫使用“强制退出” ...我不知道是什么原因造成的,并且找不到任何崩溃报告。 Flas
所以我非常熟悉 Java、C 和 C++ 中的内存管理;然而,在闪存中有哪些结构用于内存管理?我假设 flash 有一种像 java 的虚拟机,并且我一直假设当它们被设置为 null 时会被垃圾收集。
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 5年前关闭。 Improve thi
是否可以在 flash 中创建 UDP 套接字连接?我知道 RTMPF,但它不提供对 UDP 的访问。我知道在 AIR 中它是可能的,但我正在寻找一种“闪光”解决方案。 谢谢你 最佳答案 号 UDP
不知道如何表达这个意思,但是我想知道是否可以创建一个全面的错误处理程序来保护整个代码,然后发送给自定义处理程序,该程序在程序中以图形方式输出信息。类似于以下内容: root.addEventListe
我正在尝试创建可在不同场景中使用的UI影片剪辑。 它使用来自根范围的变量来确定状态。 当我按下静音按钮时,效果很好,但是当我尝试取消静音时,就变得很奇怪。有时需要2次点击才能取消静音,有时还需要更多。
是否可以通过麦克风记录最终用户? 我可以用录音做什么 Action ? 例如,我能否实时获得声音(分贝)的音量? 我可以将记录保存到文件中吗? 谢谢。 最佳答案 是的,Flash允许(具有用户许可权)
当我访问我之前在 IE 中构建的站点时,我在浏览器底部弹出消息栏,提示该站点想要运行 Flash。 这很好,除了网站中没有任何 Flash。 什么会导致这种情况? Flash 现在怎么会出现在站点中?
概要 我正在尝试制作一个包含多个相同SWF的网页。我有一个问题,它的加载速度太慢了(虽然下载时间还不错)。我在每个单元格中都有一个4x4表格,在iframe中嵌入了一个swf文件。 (注意:4 X 4
我是一名优秀的程序员,十分优秀!