AS3 :: Flash - Accessing Object Methods Given As Value In Dictionary?
Nov 17, 2011
So I am writing a program which uses Dictionary to store objects. For example
var dictionary:Dictionary=new Dictionary();
var myObject = new myObject(var1, var2, var3);
dicionary["key"]=myObject;
where var1, var2, and var3 are simply means of assigning values to variables in myObject.can I access values or functions that are found in myObject? In myObject class I have some getters and setters. Can I use a getter to get the value of var1 for example.
does anyone knows the "time complexity" of Dictionary class methods ? for example, is the ""get"" is an o(1) time complexity ?
[Code]...
and another question in the same topic, how does the Dictionary "generate" an 'equal function' & 'hashcode' (assuming same implementation as in java's HashMap) from the object passed as a key? is it efficient ?
I am encountering a problem in my app only when it is run in flash player 10.1.85.3. Some earlier player versions I have tried are working fine.From what I can tell it seems related to the following:
Quote:
from here: h[url].....
When searching for objects (not strings) in Dictionary objects using the 'in' operator, if the object is not found in the Dictionary object, it will be searched for in the delegate objects. With 10.1, the toString operator will be called on the Object if not found in the Dictionary. This can cause problems with Proxy objects who need to define the callProperty function or it will generate a RTE. ...what it means "it will be searched for in the delegate objects"?
how to send a word to the dictionary and get a true false result? I have a wordgame in mind. User selects letters and form a word, it would be great to send it to a dictionary - and then get a booloean return for the judgement and scoring. I came across the help which says AS 3.0 has a dictionary class.
In one of the classes in my Flex application I have a dictionary, which is periodically updated from other parts of the application. It contains some sort of user preferences and I want to keep it in sync with a local shared object - the dictionary needs to be read during the class initialization and saved to the local storage when an element is changed, added or deleted.
The "Dictionary" object inherits only "Object" and does not have a change event - like the "collectionChange" in ArrayCollection. So I can't sync the dictionary just by listening for an event and manipulating the shared object in the event handler. The other possible solution would be to make the dictionary private and manipulate it using special methods in my class. Something like:
public function setValue(key:String, value:String):void public function getValue(key:String):String public function delValue(key:String):void
But using bindings will become a real nightmare and I will have to make changes in many other parts of the application.
I want to extend the dictionary class. Everything works so far except that in some of my methods that need to reference the dictionary's content I make a call like:
this[ key ]
It doesn't like that. It just tells me that there's no property 'key'. Is there a way to way to access the data within this class?Also, I'm using an integer for the key.
Edit: I've found that the same behavior happens when you extend Array.
var myArray : Array = new Array(); trace( myArray[ 0 ] ); var myArrayExtender : ArrayExtender = new ArrayExtender();[code]....
Where in this case, myArray returns "undefined" and myArrayExtender throws error 1069. ArrayExtender is an empty class that extends Array and calls super() in the constructor.
I am creating an object pool to cache some recyclable objects in memory at the outset of my application in order to avoid (as much as possible) the performance issues caused by GC running; if possible I'd like to minimize the memory my object pool reserves, so I'm attempting to pool generic forms of the objects (with no methods) and then casting the generic variants to more specific and complex object types which extend the generic form when I actually want them on the stage.
The trouble is that to do this requires the generic variant class to import/extend MovieClip (because the more complicated objects are themselves MovieClips and make use of DisplayObject methods)-- does simply importing and/or extending a class add to the memory an object takes up when instantiated even if it never uses methods from the inherited class? It makes sense that it would, and some light profiling seems to suggest that it does, but I'm not 100% certain. About how large should an 'empty' MovieClip instance be in bytes?
What are some methods of accessing/loading external SWF's aswell as there variables inside them. I've been using URLrequest and loader methods no luck yet.
I seem to be having a bit of a problem here. I'm generating a load of class instances using the following code:
maxpersons=25; for (var i:Number=1;i<=maxpersons;i++) { var person:Person = new Person;
[Code].....
OK. I then need to run through each of them and check for a collision with an object from the main stage (called redDot), which I pass to a method (called doDamage) within the class. I'm using the following code:
for (i=1;i<=maxpersons;i++) { if (game.getChildByName("person"+i).hitTestObject(red Dot)) { game.getChildByName("person"+i).doDamage(redDot); } }
I keep getting an error saying "1061: Call to a possibly undefined method doDamage through a reference with static type flash.displayisplayObject."!
It just won't work. I've tried altering the code to:
game["person"+i].doDamage(redDot);
but I get an unexpected trace output saying "TypeError: Error #1010: A term is undefined and has no properties."
Here is the situation:I have created a movieClip named "tp_crack" on the timeline and created its class using linkage called "tp_crack".The tp_crack mc is like a small rectangle which breaks in 3 seconds when it is played.I have a seperate class in which I have used tp_crack to create many instances of tp_crack going by the names: cracked1","cracked2" etc.These instances are present in another movieClip (this time created within the class) called "crackContainer".Now I have added the following code to check for hitTest of those cracked1,2,3...... with a spaceship.The hitTest works but flash does not recognize the pieces as movieClips and does not play them as required, instead it gives me an error saying:1061: Call to a possibly undefined method play through a reference with static type flash.displayisplayObject.
for (var i:uint=0; i<crackedPieces; i++) { if (crackContainer.getChildAt(i).hitTestPoint(Spacesh ip.x,Spaceship.y+(Spaceship.height/2),true)) {
I can't access the props and methods of an external AS3 swf after it's loaded by Main.as. Here's a very simplified version of the code for Main.as (the calling swf):
Code: package{ import flash.display.Sprite; import flash.events.Event; import flash.net.URLRequest; import flash.display.Loader; public class Main extends Sprite{ private var imgLoaded:Boolean = false; [Code] .....
I'm trying to access an init method I've set in one of my document level classes.
Container Movie loads Main Movie, which has Main.as as its document class, but I want to do a few things before I show the actual content. Here are some functions in Container.as:
Code: public function moveLogo(e:TimerEvent):void{ loadTxt.visible = false; var logoMoveUp:Tween = new Tween(logoCont, "y", Back.easeIn, 221, -250, 1, true);
[Code].....
If I trace e.currentTarget.content.init on my EVENT.COMPLETE callback function, I get "function Function()" like I should.
I'm trying to set up a large project that has a "shell" application that preloads and eventually displays a bunch of SWFs as a "slideshow". Each SWF could be authored by different people but will reference a base document class so they exhibit consistent behaviour. One of these behaviours is to be able to localise the slideshow into different languages. Since each SWF could have a different number of textfields that need to be localised embedded into their main timeline, the SWFs each must declare their stage instances in their document class. In order to implement the common functionality (such as a "localiseText()" method), I have decided to package all common functionality into a superclass (what I'm calling "Base Class" in this example) and using a subclass as each slide's document class.
This Example:This is a simple example I set up because in my actual project my compiler was throwing a coercion error when I tried to cast the Loader.content as my external class. The structure of this example is the following:
+ loader.fla : this is the main "shell" application. + SWFLoader.as : the Document Class for loader.fla + external_1.fla : this is the external SWF file that will get loaded and displayed
[code]....
I've set it up this way because a hypothetical external_2.fla might have different public variables to declare its stage instances so would need a separate implementation of ExternalBase (presumably External2.as).
The code (in reverse):
base/ExternalBase
[code]....
This just sets up the localiseText() method which is used in this example to change the contents of the text field. Since we don't know the name of the text field in the particular slide's timeline, we have to ask for it from the subclass' implementation of getLocalisableTextField(). We declare an abstract function here that needs to be overridden in the implementation.
I'm often seeing others using a Dictionary object in their AS3 code that simply maps objects by String keys and wondering if there is any advantage at all of using a Dictionary over a simple Object if String keys are used. Anyone know any details on this? I would suppose that since an Object is more lightweight it should be faster and preferable over a Dictionary if used with String keys.
I have a class file named Main.as and another class called icon.as
package { import icon; public class main { public var _time:String; function main() { [Code] .....
How do I get the current update from the main class without calling the MainObj repeatedly. Is this possible in Flash AS3, or any other alternate method for this idea.
What exactly is the difference between an object and a dictionary in Actionscript?
var obj:Object = new Object(); obj.something = "something"; var dict:Dictionary = new Dictionary(); dict.something = "something"; trace(obj.something, dict.something);
Any good argument as to why I shouldn't use a Dictionary over an Object every single time? I can't think of any case an Object can do the job a Dictionary can't, and it doesn't seem as the Dictionary creates that much more overhead.
My project is a visual way to represent a database of information about books. It will be represented as a collection of menus and submenus. From one menu, the user will be able to access another, from the other the third.Each item in a menu has some content, so the menus themselves are not a means to an end (to execute commands), but a goal in themselves. Viewing them, and browsing between them is the essence of the project.
The simplest way to organize a menu of items would be a dictionary object containing all its members.However, it is not really good for a complex set of menus and sub-menus which is a web of information linked between another.
I'm recording and playing back mic input using Flash Media Server, and even though it's just audio, we're saving the output as FLV. I'd like to get a waveform of the recorded audio. Ideally, since we already have a lot of saved/recorded audio, I'd like something that can take a loaded FLV and get the waveform, as opposed to generating it at record or playback time.
AS3 has the new Sound.extract() method that can be used for this (plenty of online tutorials), but it seems like it only works for MP3. Is there a way to use this method on FLV audio? Or is there another to extract a waveform from a FLV?
How do I get the list of all methods from an object? I know I can get the object class in this way:
var className:String = flash.utils.getQualifiedClassName( myObject ); var objClass:Class = flash.utils.getDefinitionByName( className ) as Class;
In JavaScript I can iterate over the prototype of an object to get its properties and methods. Is that possible in ActionScript 3? Do you any good source for metaprogramming/reflection over ActionScript 3?
I have a HTML page that contains a flash file and some a JavaScript function that returns the object of the flash file.So far I can call the JavaScript function from C# and have it return an Object, but I want to cast it as AxShockwaveFlash and access the COM Object directly from C#.I have seen this done with Windows Media Player imbedded in the a HTML page, but it doesn't seem to work with flash.[code]When I try to cast the Object to AxShockwaveFlash it fails, but I have seen it work casting the object to WindowsMediaPlayer.I tried to find if AxShockwaveFlash supports QueryInterface calls, as per the error message but Google returned nothing of value.
I'm using FlashDevelop as IDE and I'm trying to connect to AMF3 service (amfphp) and get user details.I can connect to AMF service with this code in AMFinit() function...
private function AMFinit():void{ AMFService.objectEncoding = ObjectEncoding.AMF3; AMFService.connect(AMFServiceURL); AMFService.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
[code]....
But to use outside the AMF_MyUserInfo() function I want to copy that "res" object to another object. I tried with specifing an object in Class and set res to this object in AMF_MyuserInfo() function with "this.myobject = res" but it didn't work.
I also tried "this.myobject.username = res.username" but it didn't work also. how can I use this res object globally or in AMFinit() function?
-I know one can call javascript functions from as3 using ExternalInterface, but in all the examples I've seen the function has been a standalone function on the page. Can methods on objects (that are on the page) be called. E.g: obj.someFunc() rather than just someFunc()?
-The return value can be stored as well using ExternalInterfaces. Can this return value be a javascript object? If so, its methods be called from it directly?
I am using the 1.2 version of Uza's Global singleton (http://www.uza.lt/codex/as3-global-object/). The container swf stores some data and a link to a function in the "global" object.
Then another swf is loaded inside the container, it gets it's global instance with Global.getInstance();, and i suppose i can access the data and function stored in global by the container swf.
This works perfectly on localhost served by a webserver, but when i put the files on my external production server the loaded swf's global appears to not have anything stored by the container.
I want to dynamically load the graphic of the button into an mc inside each frame of the button (up and over). Inside each frame I have a movie clip (canvas and canvas_over). The green box is the button object (header_btn):
This is my code: var hLoader:Loader = new Loader(); hLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, hLoaded); hLoader.load(new URLRequest("[URL]")); function hLoaded(event:Event):void { [Code] ..... It would be nice though if as3 allowed for buttons to contain objects.
I'm wondering if it's possible to access a shared object's data (once it's been changed) without reloading the swf. Specifically, I have two swfs: one changes the data in the so and lets the second swf "know" via a localconnection. I have a function in the second swf that fires via the local connection.[code]This function looks for the new value however it doesn't show the updated value in my textfield unless I refresh the browser. Thoughts?