标签: actionscript-3

如何解决ActionScript 3(AS3)中的闭包问题

在下面的代码中,我试图加载一些图像,并在它们单独加载后立即将它们放入舞台.但它被窃听,因为只显示最后一张图像.我怀疑这是一个关闭问题.我该如何解决?AS3中的闭包行为与Java Script中的行为不一样吗?

var imageList:Array = new Array();
imageList.push({'src':'image1.jpg'});
imageList.push({'src':'image2.jpg'});
var imagePanel:MovieClip = new MovieClip();
this.addChildAt(imagePanel, 0);

for (var i in imageList) {
    var imageData = imageList[i];
    imageData.loader = new Loader();

    imageData.loader.contentLoaderInfo.addEventListener(
        Event.COMPLETE, 
        function() {
            imagePanel.addChild(imageData.loader.content as Bitmap);
            trace('Completed: ' + imageData.src);             
        });

    trace('Starting: ' + imageData.src);
    imageData.loader.load(new URLRequest(imageData.src));   
}
Run Code Online (Sandbox Code Playgroud)

apache-flex flash closures actionscript-3

25
推荐指数
1
解决办法
6046
查看次数

在Flex 4中为自定义组件设置默认外观

如何在Flex中为自定义组件设置skinClass的默认值?我已经使用我的自定义组件扩展了DropDownList,但我想指定一个默认皮肤,而不是总是为每个实例设置skinClass值.

actionscript-3 flex4

25
推荐指数
1
解决办法
9364
查看次数

Flex警告:无法绑定到类'Object'上的属性'foo'(类不是IEventDispatcher)

我有一个对象,其中包含我想要绑定到表单元素的十几个字段,以便我可以使用该对象将数据发送回服务器进行保存.

我的容器对象的定义:

private static const emptyLink:Object = {
    id: -1, title:'',
    trigger1:'',trigger2:'',trigger3:'',trigger4:'',trigger5:'',
    linkTitle:'', linkBody:'',
    answer1:'',answer2:'',answer3:'',answer4:'',answer5:''
};

[Bindable] public var currentLink:Object = emptyLink;
Run Code Online (Sandbox Code Playgroud)

currentLink在运行时分配给ArrayCollection中的特定索引,我只是使用该emptyLink对象进行初始化.

<mx:Panel id="triggerPanel" title="Trigger" width="33%">
    <mx:VBox id="tpBoxes" width="100%" paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5">
        <mx:TextInput id="trigger1" width="100%" textAlign="left" text="{currentLink.trigger1}" />
        <mx:TextInput id="trigger2" width="100%" textAlign="left" text="{currentLink.trigger2}" />
        <mx:TextInput id="trigger3" width="100%" textAlign="left" text="{currentLink.trigger3}" />
        <mx:TextInput id="trigger4" width="100%" textAlign="left" text="{currentLink.trigger4}" />
        <mx:TextInput id="trigger5" width="100%" textAlign="left" text="{currentLink.trigger5}" />
    </mx:VBox>
</mx:Panel>
Run Code Online (Sandbox Code Playgroud)

当然,这编译并显示得很好,但每个实例都有运行时警告:

警告:无法绑定到类'Object'上的属性'trigger1'(类不是IEventDispatcher)警告:无法绑定到类'Object'上的属性'trigger2'(类不是IEventDispatcher)警告:无法绑定到类'Object'上的属性'trigger3'(类不是IEventDispatcher)警告:无法绑定到类'Object'上的属性'trigger4'(类不是IEventDispatcher)警告:无法在类上绑定属性'trigger5' '对象'(类不是IEventDispatcher)

并且在更改字段currentLink时不更新对象TextInput.

显而易见的答案是我的对象需要是实现的类的实例IEventDispatcher.答案没有告诉我的是实现该界面的细节(需要什么?什么不是?),以及是否有更简单的方法 …

apache-flex binding mxml flex3 actionscript-3

24
推荐指数
3
解决办法
3万
查看次数

如何在flex/actionscript中将参数传递给事件监听器函数?

因为当你使用sql lite时,如果你尝试在同一时刻执行一个函数它会抛出一个错误,我只是试图创建一个函数来检查它是否正在执行,如果它是在10毫秒再试一次,这个确切的函数工作正常如果我不必将任何参数传递给函数,但我很困惑如何将vars传递回它将执行的函数.

我想要做:

timer.addEventListener(TimerEvent.TIMER, saveChat(username, chatBoxText));
Run Code Online (Sandbox Code Playgroud)

但它只允许我这样做:

timer.addEventListener(TimerEvent.TIMER, saveChat);
Run Code Online (Sandbox Code Playgroud)

它给了我这个编译错误:

1067:将void类型的值隐式强制转换为不相关的类型函数

我怎样才能通过这个限制?

这是我得到的:

public function saveChat(username:String, chatBoxText:String, e:TimerEvent=null):void
{
    var timer:Timer = new Timer(10, 1);
    timer.addEventListener(TimerEvent.TIMER, saveChat);

    if(!saveChatSql.executing)
    {
        saveChatSql.text = "UPDATE active_chats SET convo = '"+chatBoxText+"' WHERE username = '"+username+"';";
        saveChatSql.execute();
    }
    else timer.start();
}
Run Code Online (Sandbox Code Playgroud)

apache-flex flash events arguments actionscript-3

24
推荐指数
3
解决办法
3万
查看次数

AS3 - for(... in ...)vs each for each(... in ...)

以下代码完全相同.有没有之间的差异for eachfor (... in ...)

var bar:Array = new Array(1,2,3);    

for (var foo in bar){
    trace(foo);
}

for each (var foo2 in bar){
    trace(foo2);
}
Run Code Online (Sandbox Code Playgroud)

loops actionscript-3

24
推荐指数
2
解决办法
4万
查看次数

你怎么得到50%的赔率?

其中的这些会给出恰好当随机值在0和1之间的浮动(如AS3的或JavaScript的50%的机会Math.random())?我已经看到它们都在实践中使用过:

if (Math.random() > 0.5) ...
if (Math.random() >= 0.5) ...
Run Code Online (Sandbox Code Playgroud)

抬头:我在这里很迂腐,因为在实践中,击球0.5确实是天文数字低.但是,我仍然想知道中间的位置0 inclusive1 exclusive.

javascript random actionscript-3

24
推荐指数
1
解决办法
2万
查看次数

为什么ActionScript没有"泛型"?

任何人都可以告诉我为什么ActionScript 3,一种静态类型的语言,没有泛型?工作太多了吗?历史的事情?有没有办法"伪造"我还没有拿起来呢?

编辑:非常感谢你的答案!该Vector课程基本上是我所寻找的,其他信息也很有帮助.

actionscript-3

23
推荐指数
1
解决办法
8454
查看次数

如何防止某些外语字体的文本位移?

我有一个多语言项目(目前有13种语言),它使用了许多不同的字体变体"Helvetica Neue",大多是LinoType Pro字体集(包括西欧字符)的粗体,浓缩和常规剪辑,以及西里尔字母.我们可能会在未来添加中文和日文版本.

我已经设置了项目以使用不同的CSS样式表,并根据用户选择的语言单独加载每个版本的字体,因此我可以使用不同的行高,字距调整和/或字体大小来使所有内容保持原始外观,即使字体看起来没什么相似之处.

所有这些都很有效,除了一个问题:由于某种原因,所有西里尔字母似乎都被取代了.它们显示在正确基线下方2-3个像素处,实际上突出显示在文本字段的下边框上,即使该字段设置为自动调整大小.当我使用时textfield.getCharBoundaries(),所有值似乎都是正确的,即使它们显然没有正确呈现.

为了使一切看起来整洁,我当然可以根据语言和字体大小手动上下移动所有有问题的文本字段,但我想知道是否有某种方法可以防止或至少检测到这种位移以便自动处理调整 - Flash Player应该有关于如何呈现事物的某种信息,不是吗?你们有没有类似的问题?或者更好:解决方案?

flash fonts internationalization actionscript-3 text-rendering

23
推荐指数
1
解决办法
1819
查看次数

嵌入Flash Builder 4.5.1移动项目的元数据时间限制?

我正在开发一个项目,要求我使用来自网络摄像头的录制流动态嵌入元数据.我正在使用Flash Builder 4.5.1创建移动项目.我正在使用一个简单的netStream.send函数来设置我想要的元数据.这可以正常工作,直到我的网络流时间超过10秒,然后该功能停止工作或不会嵌入到视频中.我的所有连接都是正确的,我可以录制到Flash Media Server

我唯一能想到的是我的Flash Media Server 4 Developer被过载并且不计算我发送的元数据.

任何想法都会有很大帮助.

 private function sendMetadata():void {


                 infotxt.text += 'called';
                trace("sendMetaData() called")
                myMetadata = new Object();
                myMetadata.customProp = "This message is sent by @setDataFrame.";
                myMetadata.customOther = cueHolder;
                ns.send("@setDataFrame", "onMetaData", myMetadata);
            }  
Run Code Online (Sandbox Code Playgroud)

这是我的onMetaData函数

public function onMetaData(info:Object):void { 
                trace("caught");
                infotxt.text = 'caught';
                var key:String;
                for (key in info){ 
                    outputWindow.text +=(key + ": " + info[key] + "\n"); 
                }
                //cueHolderReturn = info.customOther;
                 for (var i:int = 0; i < info.customOther.length; i++) 
                {
                    infotxt.text += info.customOther[i] …
Run Code Online (Sandbox Code Playgroud)

apache-flex flash-media-server actionscript-3 flex4.5

23
推荐指数
1
解决办法
623
查看次数

从Web浏览器访问智能卡读卡器?

是否可以从运行在同一台机器上的Web浏览器访问连接到计算机的智能卡读卡器,即从ActionScript,JavaScript或其中运行的任何脚本?

例如,我flash.external.ExternalInterface在ActionScript中阅读了有关该类的内容.它可以用于访问智能卡读卡器还是Sandbox难以穿透?

javascript browser actionscript-3 smartcard smartcard-reader

23
推荐指数
3
解决办法
3万
查看次数