AMF3规范定义了所谓的"参考表"的使用(参见本规范的第2.2节).
我在我在Erlang中开发的AMF3编码器/解码器中实现了这种行为,但对Flash API不是很有经验,我很难找到在将对象序列化为AMF3时如何轻松强制Flash使用这些引用表; 例如,如果我使用ByteArray,它似乎只是重复完整的对象编码
var ba:ByteArray = new ByteArray();
ba.writeObject("some string1");
ba.writeObject("some string1");
# =>
# <<6,25,115,111,109,101,32,115,116,114,105,110,103,49,
# 6,25,115,111,109,101,32,115,116,114,105,110,103,49>>
Run Code Online (Sandbox Code Playgroud)
(这显然是重复).
但是,如果这两个字符串在一个writeObject调用中,它似乎确实使用引用:
ba.writeObject(["some string1", "some string1"]);
# => <<9,5,1,6,25,115,111,109,101,32,115,116,114,105,110,103,49,6,0>>
Run Code Online (Sandbox Code Playgroud)
套接字似乎表现得一样.
那么,我可以在Flash代码中使用引用表吗?(假设我在Flash应用程序和服务器之间可能有非标准协议)
谢谢!
我已经通过论坛帖子和教程进行了大量阅读,但我仍然无法将我的大脑包围在事件和事件监听器中.我有一个非常简单的例子,但我无法让它工作.
我在转发器中有一个自定义对象的arrayCollection,当单击其中一个对象时,我想要一个不同的组件来显示与该对象关联的数据.
这就是我所拥有的,但是监听器从不响应(调度程序似乎正在工作,因为新事件已创建,我可以看到具有正确输出的跟踪.)我怀疑这是因为当我调用addEvent Listener时,我是在错误的对象上这样做.我的理解是,显示对象数据的对象是应该具有事件监听器的对象,并且监听这种性质的所有事件,但也许我误解了.
我的自定义事件:
public class SelectObjectEvent extends Event
{
public function SelectObjectEvent(customEventString:String, myObject:customObject)
{
super(customEventString, true, false);
trace(customEventString+" "+myObject);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的自定义对象具有以下函数,该函数在单击时调用:
public function selectObject(myObject:customObject):void
{
dispatchEvent(new SelectObjectEvent("OBJECT_SELECTED", customObject));
}
Run Code Online (Sandbox Code Playgroud)
我想要显示所选对象的组件具有以下构造函数:
public function SelectedObjectDisplayClass()
{
addEventListener("OBJECT_SELECTED", this.showObject)
}
public function showObject(event:Event):void
{
trace("Show object: "+event);
}
Run Code Online (Sandbox Code Playgroud) 我需要调用一个varargs函数:
function doSomething(... args): Object {
// do something with each arg
}
Run Code Online (Sandbox Code Playgroud)
但是,我正在为此动态构建参数:
var someArgs: Array = ['a', 'b', 'c'];
doSomething(someArgs);
Run Code Online (Sandbox Code Playgroud)
问题是,当我以这种方式调用函数时,args最终会成为具有someArgs第一个元素的1元素数组,而不是三元素数组.
我怎么能说doSomething与someArgs作为参数数组?
(对于搜索引擎,这是参数解包)
Action脚本是基于面向对象编程开发的,但为什么它不支持函数重载?
Flex支持重载吗?
如果是,请简要说明一个真实的例子.
我有一个柱形图,它使用标签函数来格式化垂直轴.我添加了一个按钮,希望在单击按钮时重绘轴(或图表).现在,图表轴仅在最初添加到视图状态时才会呈现OK.
我有一个函数,在最初创建图表后设置各种属性.在那里,我尝试了所有这些:
myChart.verticalAxis.dataChanged();
myChart.validateNow();
myChart.validateDisplayList();
myChart.validateProperties();
myChart.invalidateDisplayList();
myChart.invalidateProperties();
但它们不会改变轴格式.我怎样才能做到这一点?
轴的MXML代码是:
< mx:LinearAxis id="verticalAxis" labelFunction="vAxisFormat"/>
标签功能是:
private function vAxisFormat(labelValue:Number, previousValue:Object, axis:IAxis):String {
axis.getLabelEstimate();
if (_scale == 1){
return currencyFormatter.format(labelValue/_scale);
}else {
return numberFormatter.format(labelValue/_scale);
}
}
Run Code Online (Sandbox Code Playgroud) 是否可以在Adobe Flex或Flash中播放这些文件?
我花了数百个我们用Flex 4.0开发Adobe AIR应用程序,现在我认为我应该已经完成了,但是在让应用程序运行超过几个小时后,UI响应开始缺乏...
我的工作:我的应用程序使用自定义的色度,通过将窗体模块中的BorderContainer设置为透明度.我打开了许多不同的弹出窗口,它们都基于Window-Class(不是TitleWindow!),并在ActionScript中动态创建和关闭.通过使用Flex Profiler,我当然知道,垃圾收集器会正确销毁所有已分配的资源,并且内存消耗不随应用程序正常运行时间而增加.此外,分析器向我显示,我的方法都没有占用大量的cpu时间,所以这也应该没问题.
真正有趣的是:如果我不断地与应用程序交互(单击按钮,写文本,......)没有任何反应,一切都很好,但如果我不与应用程序交互几分钟然后回来 - UI-响应能力真差!
真的很差意味着,如果我在TextInput-Control中输入一些文字,我可以看到每一封写的信都延迟至少1秒!
有没有人经历过类似的情况,或者有人知道,问题可能是什么?我的建议是,在一些活动之后,flash-player-runtime限制了AIR应用程序的cpu使用,并且在用户返回时不会返回全部功率.
我使用Flex 4.0,Flex 4.1,AIR 1.5,带有Flash Player 9的AIR 2.0以及在Windows XP和Windows 7上运行的Flash Player 10测试了该应用程序...
我需要在每个其他对象中都有一个共同对象的实例.我正在对每个子对象中的对象值进行修改.
例如.我有一张瓷砖地图,一个机器人按特定顺序移动它们.每个机器人都标记着已经被他访问过的瓷砖,因为访问=真.但总的来说我不希望改变主地图......
我试图建立一个例子:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
applicationComplete="complete()">
<mx:Script>
<![CDATA[
private var array:Array = new Array( 1, 2, 3, 4);
public function complete():void
{
trace("here " + array);
var a:Array = array;
a[0] = 100;
trace("here " + array);
}
]]>
</mx:Script>
</mx:Application>
Run Code Online (Sandbox Code Playgroud)
有人可以帮我理解如何通过值(不是通过引用)复制数组,例如数组
我有一个实用程序函数,将以适当的形式显示文件大小,如Windows资源管理器,即; 将它转换为最接近的KB,MB,GB等.我想知道我写的代码是否正确,以及它是否可以变得更简单.
我写的功能如下:
public static function formatFileSize(bytes:int):String
{
if(bytes < 1024)
return bytes + " bytes";
else
{
bytes /= 1024;
if(bytes < 1024)
return bytes + " Kb";
else
{
bytes /= 1024;
if(bytes < 1024)
return bytes + " Mb";
else
{
bytes /= 1024;
if(bytes < 1024)
return bytes + " Gb";
}
}
}
return String(bytes);
}
Run Code Online (Sandbox Code Playgroud)
虽然它目前对我有用,但我觉得它可以用更简单的方式编写,甚至可以优化.
提前致谢
我使用Adobe Flash Builder 4.6/AIR从麦克风录制了语音样本,成功录制了语音.我首先在actionscript中将语音数据(字节数组)转换为base64格式,然后使用我的PHP代码将该base64数据转换为WAV文件.但是在RiffPad中WAV文件抛出文件已损坏.
RIFFPad是RIFF格式文件的查看器,如WAV,AVI.
预期的wav文件规范:
采样率:22KHZ
// -- saves the current audio data as a .wav file
protected function onSubmit( event:Event ):void {
alertBox.show("Processing ... please wait.");
stopPlayback();
stopRecording();
playBtn.enabled = recordBtn.enabled = submitBtn.enabled = false;
var position:int = capture.buffer.position;
var wavWriter:WAVWriter = new WAVWriter()
var wavWriter1:WaveEncoder = new WaveEncoder()
wavWriter.numOfChannels = 1;
wavWriter.samplingRate = 22050;
wavWriter.sampleBitRate = 16;
var wavBytes:ByteArray = new ByteArray;
capture.buffer.position = 0;
wavWriter.processSamples(wavBytes, capture.buffer, capture.microphone.rate * 1000, 1);
Settings.alertBox3.show("RATE :"+capture.microphone.rate); //Here show RATE: …Run Code Online (Sandbox Code Playgroud) flex3 ×10
apache-flex ×7
actionscript ×2
flash ×2
air ×1
amf ×1
erlang ×1
events ×1
php ×1
wav ×1