Cleaning Up Vector (array like) in pure AS3 project

I have been learning a game type animation from a tutorial at this site: http://www.emanueleferonato.com/2011/11/08/as3-version-of-nodes-engine-full-playable-game- with-infinite-solvable-levels/. Source code there online and also available for download.
Want to try to set up additional levels of difficulty, involving adding more draggables and targets. In order to change this level during a game, (with a set of radio buttons and change handler noting the change in radio button selection) using a pure AS3 and single frame necessitates removing (cleaning up) the draggables and targets already placed on stage in 2 Vector type arrays.
Have tried various versions of removeChild, removeChildAt with no success.
Here is the relevant AS3. Maybe someone could suggest a way to clean up/remove all Vector members before the new ones are instantiated on stage. If not removed, they end up at 0,0, one atop the other, while the new ones are randomly placed onto the stage.
Thank you for your help.
public class Main extends Sprite {
        private const DRAGGABLES:Number=4;
        private const TARGETS:Number=5;
        private var draggableNode:DraggableNode;
        private var target:Target;
        private var laserCanvas:Sprite=new Sprite();
        private var draggableVector:Vector.<DraggableNode>=new Vector.<DraggableNode>();
        private var targetVector:Vector.<Target>=new Vector.<Target>();
        private var isDragging:Boolean=false;
        public function Main() {
            addChild(laserCanvas);
            placeDraggables(false);
            placeTargets(false);
            shuffleDraggables();
            drawLaser();
            stage.addEventListener(MouseEvent.MOUSE_MOVE,moving);
private function placeDraggables(justMove:Boolean):void {
            for (var i:Number=0; i<DRAGGABLES; i++) {
                if (! justMove) {
                    draggableNode=new DraggableNode();
                    addChild(draggableNode);
                    draggableVector.push(draggableNode);
                    draggableNode.addEventListener(MouseEvent.MOUSE_DOWN,drag);
                    draggableNode.addEventListener(MouseEvent.MOUSE_UP,dontDrag);
                do {
                    var wellPlaced:Boolean=true;
                    draggableVector[i].x=Math.floor(Math.random()*600)+20;
                    draggableVector[i].y=Math.floor(Math.random()*440)+20;
                    for (var j:Number=i-1; j>=0; j--) {
                        if (getDistance(draggableVector[j],draggableVector[i])<150) {
                            wellPlaced=false;
                } while (!wellPlaced);
        private function placeTargets(justMove:Boolean):void {
            for (var i:Number=0; i<TARGETS; i++) {
                if (! justMove) {
                    target=new Target();
                    addChildAt(target,0);
                    targetVector.push(target);
                    target.alpha=0.5;
                do {
                    var wellPlaced:Boolean=true;
                    var segment=Math.floor(Math.random()*DRAGGABLES);
                    var p1:Sprite=draggableVector[segment];
                    var p2:Sprite=draggableVector[(segment+1)%DRAGGABLES];
                    var angle:Number=Math.atan2((p2.y-p1.y),(p2.x-p1.x))
                    var targetDistance:Number=Math.random()*getDistance(p1,p2);
                    targetVector[i].x=p1.x+targetDistance*Math.cos(angle);
                    targetVector[i].y=p1.y+targetDistance*Math.sin(angle);
                    for (var j:Number=i-1; j>=0; j--) {
                        if (getDistance(targetVector[j],targetVector[i])<50) {
                            wellPlaced=false;
                    for (j=0; j<DRAGGABLES; j++) {
                        if (getDistance(draggableVector[j],targetVector[i])<50) {
                            wellPlaced=false;
                } while (!wellPlaced);

about coding, this is an excerpt from a book i wrote (Flash Game Development: In a Social, Mobile and 3D World),
it's taken from a chapter that shows how coding typically evolves for a novice with a main idea and then progresses as more and more features are added:
Everything works the way it should but there is a major problem. Actually, there is more than one major problem and there are some minor problems but I will address the biggest problem, first: my Main class is quickly becoming a mess.
I have all this code for controlling player in Main and I will need more code which will make Main an even bigger mess. In addition, I will need to add an introduction view (by view, I mean what is presented on-stage) to give some information about the game and I should probably allow users to customize the keys they use for movement. Not everyone likes using the arrow keys. (Heck, I do not like using the arrow keys.) In addition, I will need a game-over view, eventually.
I am heading for a major mess in Main. So, while I can continue to put all my coding in Main, that is just like putting all your code in frame 1 of the main timeline and that bypasses one of the biggest advantages of OOP, encapsulation.
By encapsulation, I mean each class should contain only the information it needs to do its job. I want my Main class to control which views are presented on-stage. When the game starts, Main will add an intro view. When the user is finished with the intro view, Main will remove the intro view and add the game view (where the player and enemy tanks will fight) and when the game is over, Main will remove the game view and add the game over view.
I will use an IntroView class to control what happens in the introduction view and I'll use a GameView class to monitor what happens when player and enemy fight and an EndView to control what is displayed when combat is over - maybe the user's score or a taunting message.
I do not think I want the GameView class to control the fighting. I want all the code that controls player to be in the PlayerTank class and all the code that controls enemy to be in the EnemyTank class. That will simplify Main so it is easier to work with, will provide better encapsulation and will make it easier and faster to find the code I need to edit when changes and additions are needed.
While I am simplifying my code, I am going to create a keyboard controls class (KBcontrols) to store the key codes for moving left, right, up and down. I'm going to use static methods so I can assign those key codes in IntroView and use them in PlayerTank.
I do not want to be forced to pass those key codes back-and-forth because I am going to have one PlayerTank instance in IntroView (so users can test the keyboard controls) and a different PlayerTank instance in GameView. In addition, I may later want to allow users to re-define the keyboard controls while in GameView or elsewhere. I could make KBcontrols a singleton class but I feel like making it a class with static properties for no special reason.
(Actually, I already used a singleton class in Chapter 4 for a shape-based hit test that I showed in the BitmapData section. So, showing the other way to make data easily available among several classes is reasonable.)
There are quite a few things I am thinking about adding (like scoring and a timer and enemy intelligence etc) and I do not know exactly what classes I'm going to have at the end of this project and I sure do not know all the code that will be in each class that I anticipate will be needed. That may be a little unsettling but it is how applications and games evolve (at least, when I am the developer).

Similar Messages

  • Pure AS3 Project unable to resolve resource bundle

    I've been working on a pure AS3 project in Flash Builder and all has been going just fine. All of a sudden, I started getting errors such as:
    Unable to resolve resource bundle "core" for locale "en_US". Player Unknown Flex Problem
    What in the heck did I likely do?  Any hints welcome.

    I jut saw the posting today.
    Place your local folder in application root
    In project properties : Flex Compiler Argument : additional compiler argument : -source-path ../locale/{locale}
    add this.

  • Exporting/Using SWC in pure AS3 project

    Hi,
    I have multiple movieclips, each with 5 image-movieclips inside, which allows me to manipulate which image-movieclip is displayed in an animation. So, if image-mc1.alpha = 0, then image-mc2, next in the 5 layers, which has a default alpha of 1 is displayed. 5 image-mc's, so can use alpha to show whichever is needed.
    There are 37 of these image-mc's in the project.
    Instead of a FLA based project, I would like to try a pure-AS3 version, maybe compile using Flex/AIR SDK. One way to re-use these complex mc's would be a create a SWC for each (not sure one SWC with all 37 can be created in CS6, or how each would be called in the script?).
    When I try this, using one multi-mc/multi-layer mc exported as a SWC and try to reference its internal mc's re: alpha setting, doesn't work.
    image1.imagea1.alpha = 0;//image1 is the instantiated version of the SWC's mc done as addChild(image1)
    In the FLA version, this script would cause the second mc, imageb1, which has a default alpha of 1, to display. But this is not happening in the AS3 version. Instead, image1.imagea1 still displays, no alpha effect.
    Any way to get this to work?

    Again, thank you.
    I guess what I'm not clear about is how to add/call each in the script. For example, the mc's are p1...p37. (As mentioned, each of these has 5 subordinate mc's inside with images.)
    So, if I create all 37 as class P, how would I instantiate each one of the 37 separately?:
    var p1:P=new P();
    addChild(P.p1);
    //and
    var p2:P=new P();
    addChild(P.p2);
    //etc...
    var p37:P=new P();
    addChild(P.p37);
    Then
    displayF("p37.imagea1");
    I'm not sure how to reference/script these.

  • Brain Fart on pure AS3 Project

    I Generally hang out in Flex Land, but by no means would be considered a new guy to the world of AS3.  I am currently creating a pure AS3 app and I can't get the darn thing to get a BG color. I  have the following:
    package
    import flash.display.Sprite;
    [SWF(width='800',height='600',backgroundColor='0xff0000',frameRate='24')]
    public class Surprise extends Sprite{
    public function Surprise(){
    this.graphics.beginFill( 0xff00ff, .5 );
    this.graphics.drawCircle( 0, 0, 10 );
    And all I see is that little purple circle, no Red BG. I hope I am missing something foolish, for i feel quite foolish posting such a stupid question on line. 
    Thanks.
    -Andrew

    Turns out the code was fine, I looked at the HTML that was being generated to render the AS3 file, and that was crap.  Deleted the bin-debug folder and it created new html for me and works great.    

  • TLF in pure AS3 project?? Big swc woes...

    I'm trying to find any info on using TLF text in a pure AS project (using FDT), but quickly finding myself getting confused by it all.
    My normal workflow when laying out text is to
    - use Flash Pro to lay my text out within a MovieClip,
    - set that MovieClip for export in the library,
    - publish a swc,
    - add that swc to my classpath in FDT so I can add the it to the stage etc.
    Now.. I get the way that if you're using Flash Pro to compile, you end up with the 160kb swz file which is only downloaded by the user if it's not been cached already on their machine. All very clever.
    But... the moment I stick a TLF textfield into a MovieClip and publish a SWC, that SWC is 406kb (which is added to my project when I include the movieclip with the TLF TextField).
    Why so big??? Why is it so much bigger than the 160k that the swz file is??
    Even if I had to embed the TLF framework within my swf I could just about swallow the 160k hit, but 406k is a LOT.
    Am I missing something?

    Okay well I was missing something after all.... I realised that compiling from FDT in Debug mode was causing the big file size. My swf is 578k in Debug mode, whereas if I use Run mode it's only 291k which I can live with.

  • How to use TestRunnerBase in pure AS3 / no MXML

    Hi,
    is there a way to use the testRunnerBase GUI for a pure AS3 project, without a mxml?
    Thank you

    Hi, the testRunnerBase is a Flex application, so you can't use it in a pure AS3 environment without including all of the Flex dependencies.

  • Using Consumer Object in an AS3 Project

    Hello,
    I'm currently testing BlazeDS and especially Data Push, on
    swf side, everything is fine when i do my tests with a Flex project
    ( with a mxml file ) but i'd like to use this feature in a pure AS3
    project with no mxml
    For a classical remoting use, everything is fine with
    NetConnection and a Responder, but is there a way to handle
    messages sended by server as a Consumer object (like in the mx
    package of flex), but in a pure AS3 project ?

    You need to wrap the Ball in a UIComponent and then add it:
    var ball:Ball = new Ball();
    var uic:UIComponent = new UIComponent();
    uic.addChild(ball);
    this.addChild(uic);
    If this post answers your question or helps, please mark it as such.

  • Vector Array out of range error

    Hiya, I've run into a strange Vector out of range error when trying to splice a Vector array. The idea is to cut off the Vector array after a certain point....
    var vec:Vector.<int> = new Vector.<int>();
    vec.push(1);
    vec.push(2);
    vec.push(3);
    vec.push(4);
    vec.push(5);
    vec.splice(3,vec.length); // output RangeError: Error #1125: The index 5 is out of range 5.
    The strange thing is that it works perfectly, if I change the Vector to a regular array like:
    var vec:Vector.<int> = new Vector.<int>();    to    var vec:Array.<int> = new Array();
    Any ideas what am i doing wrong ?
    Thanks, Martin

    I don't know why it don't throw error in Array, but seccond parameter in splice method is deletecount, so you try to delete all elements start from 3 (from element 3 to element 8, but you don't have 8 elements).
    vec.splice(3,vec.length - 3);

  • Scrolling Mobile List in Pure AS3?

    I'd like to use a scrolling list in one of my AS3 mobile projects. I like the one built for Flex, but I do not wish to use flex as that would be overkill and I already have the project written in AS3.
    Does anyone know of any pure AS3 scrolling list components for mobile?
    thanks,
    Jack

    That's the flex component I wish to immitate. But since I am not using Flex, I cannot use the spark component. (I wish I could use spark components, but Adobe built them in such a way that is nearly impossibnle to use in a non-flex project.)
    I am hoping there is a pre-built nonFlex, pure AS3 equilevent. 

  • Mobile apps in pure AS3

        Hi there,
    I'm wondering what components (such as list control, buttons, date picker and so on) others are using  when they develop pure AS3 mobile apps for IOS.  Is there a book that you can suggest for me to help understand how components are built in AS3?
    Thanks

    If you want performance you'll need to use Stage3D to utilize the GPU. The flash/flex display list will never match the speed of Stage3D. The mx and spark components will never feel as 'native' as coding in objective-c until they literally transcode from AS3(4?) to Obj-c and compile to arm. Spark is more optimized than mx so it does make MXML (Flex) a viable alternative. It certainly does not feel native however.
    You should really consider how 'native' you need it to feel. People, I find, are quite tolerant. You may be trying to overachieve in an area that less important than the actual functionality your app provides. Users will use an interface that's not buttery smooth if you actually provide a service they desire.
    Pure code is just if you really want to do everything yourself.  There's really little out there to help you. The essence of going the "pure AS3" is that you are going to code it all yourself. All my projects aside 2 are pure AS3 and I rely on Starling/FeathersUI heavily to provide the closest to "native like" feel. For the only truely "native like" feel, you'll need to code entirely on the GPU.
    There's nothing built-in like Flex shares data view to view. If you go pure as3 and write your app all on your own terms then simply keep that desire in mind from the start and code yout hand made view system to either pass references to the data or make a singleton registry to share data. Overall, in pure as3, be prepared to do it all manually. You have little to none of the automation of Flex.

  • Distinguish between pure AS3 and Flex project

    Hey,
    how can I distinguish if I am compiling currently an AS3 or a Flex project (mxml vs. pure as)?
    I acutally want to look something up in the "evaluate" method of a GenerativeFirstPassEvaluator before doing the processing. So I need to know it there.
    Any help is much appreciated.
    Best,
    Joa

    MXML is converted to AS3 code as part of the compilation process, then the AS3 is compiled normally like the rest of the project. I don’t think that GFPE is run over anything but an AS3 tree. There
    may be a way to figure out where the original source came from, e.g. .mxml or .as file, but you’d have to interactively debug and scan the data structures — I don’t know off hand.
     - Jono
    From: Joa Ebert <[email protected]>
    Reply-To: <[email protected]>
    Date: Mon, 31 Mar 2008 05:40:13 -0700
    To: <[email protected]>
    Subject: Distinguish between pure AS3 and Flex project
    A new discussion was started by Joa Ebert in
    Developers --
      Distinguish between pure AS3 and Flex project
    Hey,
    how can I distinguish if I am compiling currently an AS3 or a Flex project (mxml vs. pure as)?
    I acutally want to look something up in the "evaluate" method of a GenerativeFirstPassEvaluator before doing the processing. So I need to know it there.
    Any help is much appreciated.
    Best,
    Joa
    View/reply at Distinguish between pure AS3 and Flex project
    <http://www.adobeforums.com/webx?13@@.59b4da24>
    Replies by email are OK.
    Use the unsubscribe
    <http://www.adobeforums.com/webx?280@@.59b4da24!folder=.3c060fa3>  form to cancel your email subscription.

  • Flex and pure AS3, a few questions.

    Hi all,
    I have been developing AS3-only applications and am now looking into Flex. I have a few questions I would like to get more information on:
    - is there a difference in performance between the CS3 components and the Flex components? What would be the key differences between the two?
    - same question regarding drawing, is there a performance difference between drawing say, 10000 circles using pure AS3 and the same using mxml?
    I hope the question are not too broad and will appreciate any feedback!
    Thanks.

    FLex components are always more resource hungry due to the amount of stuff UIComponent has to do, like the
    component lifecycle.
    Although FXG drawing is pretty good.

  • Help with a Vector Array - pppppplllllllleeeeaaasse!!!!!!!

    Hi I'm having a mare with a Vector Array that I want to contain String variables. I know you get a warning with the traditional implementation of a vector, and I have over come that using:
    private Vector <String> MyVector = new Vector<String>();
    But I also need to create a Vector Array and I am getting some very strange results - for a start in JPadPro it only comiles every second attempt, with every other failing due to the implementation of the Vector array.
    Below is a snippet of the code that I have sort of got to compile but with a compiler warning:
    private Vector<String>[] MyVector; //this is line 75
    int Array;
    public myClass()
    Array = 5;
    MyVector = new Vector[ Array ];
    for( int i = 0; i < Array; i++ )
    MyVector[ i ] = new Vector<String>();     
    The first time I complie I get:
    CreateMessage.java Line 75: Syntax Error
    The Second time I compile I get:
    CreateMessage.java uses unchecked or unsafe operations.
    Note: Recompile with -Xlint:unchecked for details.
    Finished
    I hate complier errors - I have gotten quite a few but have managed to remove them all but this one by searching the forum. Any help on the correct implementation of my Vector Array would be great,
    Thanks in advance,
    Kris

    Mr_Bump180 wrote:
    Well you lot are a real cheery bunchDo you come here for warm and fuzzies or for Java help?
    - please accept my most humble apologies for daring to try and keep my thread light hearted. Use your brain. Nobody objects to keeping your thread lighthearted. It's that garbage like that is annoying and makes your post harder to read. If you want to get your question answered clear communication is of the essence. That should be common sense.
    I asked the question simply as I wanted to improve my code - which I write for no gain, but just in an attempt to automate processes that I cannot find software to do for me. How is that relevant?
    I find the solutions on this website invaluable, but what shines through most clearly - is the incredibly poor attitude of some of you - who are obviously java professionals - when a novice risks posting a question on what is obviously YOUR forum. Is that how you get your kicks? By jumping all over people that dare to ask a question in order to try and better themselves?Right. People jumped on your for asking a question. Get real.
    I will as I always do, read the pages you have linked to, and I will also try and implement your solution into my code - I just find it a shame that in order to obtain any help people who are posting in the "New to Java Programming" by-the-way, run the gauntlet of your abuse if the question, grammar, syntax or perhaps even title don't measure up to your high standards.Dude, if you're asking somebody to volunteer his time to help you, isn't it obvious that it's in your best interest to make it as easy as possible for him to do so?
    I will now turn the watch off this thread, and will not reply againAs if anybody cares.
    - but for those of you reading - I wonder just how many can't bare me to have the last word and have to post a replySo, anytime somebody replies to something it must be because they have to have the last word?
    with the clever little quote inserts, a greater than thou attitude, and some more brilliant humour (I was in stiches reading your rebuttals ) because I don't fully understand a concept and as such asked for help.Get over the "they teased me because I don't know Java" bullshit. It's simply not the case, and you bloody well know it.

  • How to pass vector array to JasperReport

    I have a query looks like this... in my JasperReport. (select * from employee where employee_id = $P{Emp_ID} order by employee_id)
    I already created a vector array contains a list of employee IDs from database. Now, I want to pass the array into the query to get a specific list of employees.
    Similar to SQL prompt below.
    SQL> select * from employee where employee_id in (1,3,4,5,22,23,45) order by employee_id.

    jasontey,
    I'm doing the samething here but with arrays and I'm getting ClassCastException.
    Servlet1:Vector PatientInfoVector = new MdlPatient().getPatientInfo(userId,patientNumber);
    int patientLength = PatientInfoVector.size();
    MdlPatient[] PatientInfoArray = new MdlPatient[patientLength];
    for (int i=0; i<patientLength; i++)
    PatientInfoArray[i] = (MdlPatient)PatientInfoVector.elementAt(i);
    session.setAttribute("patientSession",PatientInfoArray);
    response.sendRedirect(response.encodeRedirectURL("/FsuSecurity/SrvSecurity"));
    SrvSecurity:
    MdlPatient PatientInfo = (MdlPatient)session.getAttribute("patientSession"); This is where I'm getting the ClassCastException.
    int patientNumber = PatientInfo.getPatientNumber();
    Thanks if you can help,
    Doug

  • For pure AS3 development do we still need to overlay the FLEX SDK?

    Hi Guys
    I've found this whole SDK overlay business a mess and very confusing. I've found this document
    http://www.adobe.com/devnet/air/articles/ane-android-devices.html
    which states
    "The distribution of the AIR SDK with ASC 2.0 is for pure ActionScript development only. It should not be combined with an existing Flex SDK.
    To support Flex application development with newer versions of the AIR SDK, an AIR SDK overlay distribution that does not include ASC 2.0 needs to be overlaid over the Flex SDK bundled with Flash Builder 4.7."
    So if we are doing pure AS3 development there is no longer any need to do any 'overlaying' of one SDK Folder onto another.  We just need to get the latest AIR SDK with complier ( http://www.adobe.com/devnet/air/air-sdk-download.html )
    We should then update the AIR SDK if using Flash Builder via (  http://helpx.adobe.com/flash-builder/kb/overlay-air-sdk-flash-builder. html ) (Note it still uses the term 'overlay' but you are not really overlaying but replacing).
    Is this conclusion correct.  Do we just need the SDK with the new compilier and nothing else ?
    Can someone from Adobe confirm please ?
    Thanks
    PS - I've asked this question on the Flash Builder Forom but there's been no response.

    Yes, that's correct, for pure AS3 development you need not use the Flex SDK overlay. For this you should use asc2 compiler available at http://www.adobe.com/devnet/air/air-sdk-download.html . Also below are step to overlay your AIR SDK with Flash builder 4.7
    1. Exit Flash Builder. 
    2. Back up the AIR SDK availabe at Application/FB4.7/eclipse/plugins/com.adobe.flash.compiler_4.7.0.349722/ by copying the entire directory and rename it to something AIRSDKversion. Now, you have two folder AIRSDK(default one) and AIRSDKversion(copied one).
    3. Download the appropriate AIR SDK file for your operating system e.g. http://www.adobe.com/devnet/air/air-sdk-download.html unzip and save it on your MAC OS X.
    4. On Terminal, run the below command
    sudo ditto /path/air3-8_sdk_sa_mac /Applications/Adobe\ Flash\ Builder\ 4.7/eclipse/plugins/com.adobe.flash.compiler_4.7.0.349722/AIRSDK
    /path/air3-8_sdk_sa_mac -> path where you downloaded the AIR SDK
    /Applications/Adobe\ Flash\ Builder\ 4.7/eclipse/plugins/com.adobe.flash.compiler_4.7.0.349722/AIRSDK -> path where you overlay the new AIR SDK
    5. (Optional) To access the new AIR 3.8 APIs, update your application descriptor file to the 3.8 namespace.
    To update the namespace, change the xmlns attribute in your application descriptor to: <application xmlns="http://ns.adobe.com/air/application/3.8">
    6. (Optional) To ensure that the output SWF file targets SWF version 21, pass an additional compiler argument: -swf-version=21.
    Hope this will help.
    Regards,
    Nimit

Maybe you are looking for

  • My safari continues to quit unexpectedly. It does not even open up anymore. How do I fix this?

    This is the code I get: Process:               Safari [909] Path:                  /Applications/Safari.app/Contents/MacOS/Safari Identifier:            com.apple.Safari Version:               8.0.2 (10600.2.5) Build Info:            WebBrowser-76000

  • My iPod touch is stuck in recovery mode, help?

    A few hours ago, I tried updating my 5th generation iPod touch to iOS 8. It ran into an error and couldn't update, which left my iPod touch stuck in recovery mode with a screen showing a USB cord pointing to an iTunes symbol. I tried searching for wa

  • Skinning a custom List

    I'm trying to create a list with some custom functionality, and I want to be able to re-use it with different skins for different situations.  I made a simple list class, and started filling out it's functionality, then I realized I couldn't set the

  • Garageband files from PC to Garageband on Ipad

    Hey guys, I recently saved my Garageband files on my iPad by selecting save on iTunes, plugged my iPad to my HP PC, saved the files by selecting iPad then Apps then Garageband then saved the files to my Music folder on my PC. Well, my problem is afte

  • My purchase is gone!

    I bought "The Looks" by MSTRKRFT, and when 3 of the tracks were in their "Processing file" phase of downloading, iTunes locked up. I Ctrl, Alt, Delete'd it, then restarted iTunes. Then I "Searched for available downloads" and sure enough, it download