ActionScript 3.0 :: Get MouseEvent Of Underlying MC?
Jul 22, 2010
I've googled around and seen this topic at a million places but I just don't get the solution![url]...
Like in the image above. My red movieclip is dragable when mouse_down and dropped when mouse_up. At the same time I want the underlying Blue MC to get it's mouseEvents but if the Red MC is overlapping it, it won't react. What do I do to make both active?
So I'm Bitmaping some heavy stuff to try bring down the [pre-render] and [render] which is quite high according to FlashBuilder's profiling. I thought this was going well until I realised that as soon as you change a MovieClip to a Bitmap, you lose the pixel based accuracy of the mouse move events (Over, Out, Move...), all your left with is the entire bounding box of the Bitmap, something which is less than desirable. I've got a game where many Bitmapped assets would be on top of each other in a scene, on the stage, arranged in various ways and need to have that pixel accuracy moving between each one and have exhausted my efforts as to how to achieve the same mouse move results with the Bitmapped guys as normal.
This, [URL], is a FLA which shows this operation, and you can see how it works here, [URL]. When it loads up, both items on stage are drawn Shapes, encapsulated in MovieClips, both that get a glow, if you hover over them. If you click the stage at all, the purple guy gets turned into a Bitmap and now, his 'hit area', when it comes to MouseEvents is his whole bounding box and you can only get through to the back green item at the edge slivers.
I'm also tracing the pixel which the mouse is over, so I can clearly tell when the mouse is over a transparent area, it's 0, but how can I tell the event to forward itself on down the chain to the green MovieClip?
Below is how it's now pretty much working for me,
var bitmap:Bitmap = this['bitmap']; var shouldMouseOver:Boolean = bitmap.bitmapData.getPixel(event.localX - bitmap.x, event.localY - bitmap.y); if(shouldMouseOver)
[Code].....
I shut off mouseEnabled for my item, when I know it's wrong, then I search for another item that properly fits the bill and if there is one, send an Event to that and break. If that one's also wrong, it'll do the same again, but each time taking themselves out of the loop.
This does work exactly how I want it to, but I'd always prefer to keep things like globalToLocal and looping, and reading from arrays for not frequently updated methods like listeners to MOUSE_MOVE. Is there a more efficient way to do this?
I have several stage event handlers to enable mouseovers over several dynamically generated moviecilps on the stage that then change their alpha to indicate the mouse is over that particular mc... fairly trivial (mcOver handler). Additionally, I also want to know what MC is clicked, so I update a public variable (public var activemc:Number) with the ID of the dynamic movieclip when the mouse is over it (using a hitTest to check, which is why the EventListener is added to stage and not to the MC), which is checked in the mcClicked handler:This is in the constructor:
However, the mouseover behaviour (alpha 0 when over, alpha 1 when out) stops working as soon as I click on any movieclip on the stage, and the mcClicked ID checking (below) stops working completely. I don't know if this is to do with focus:
private function mcClicked(event:MouseEvent):void { myTextField.text = String(activemc); // activemc is a public var:Number with the movieclip //ID }
I then tried adding the event handler for the stage mouse_move again and this gets the mouseover working again but only for 1 more click, after which it stops again:
private function mcClicked(event:MouseEvent):void { myTextField.text = String(activemc); // activemc is a public var:Number with the movieclip //ID stage.addEventListener(MouseEvent.MOUSE_MOVE, mcOver);
I have a MovieClip (call it base_mc) which is under a bunch of other MovieClips (call them subclips). The MovieClips on top are all mouseEnabled with MOUSE_OVER, CLICK, etc, event handlers. I want to capture the event of MOUSE_OVER (or ROLL_OVER) on the base_mc as well. Any time I am over one of the subclips I am also over the base_mc clip. How can I capture this event?
I'd like to know what is the difference between MouseEvent.CLICK & MouseEvent.MOUSE_DOWN. Because when i use MouseEvent.MOUSE_DOWN for a button to set full-screen view its doesn't work, instead of this MouseEvent.CLICK works. So what was the reason.
I'm making a button for the first time, and I wanted to use a full click to drive it. However, when I use addEventListener(MouseEvent.CLICK, onClickHandler); nothing happens when I click on it. When I use (with the rest of the code being identical) addEventListener(MouseEvent. MOUSE_ down, onClickHandler); it works like a charm.
I have a MOUSE_DOWN handler that creates a CLICK event listener on a child object. Naturally, as soon as you release the mouse button, if you happen to be over the child object, the CLICK event fires.I was disappointed to discover that event.stopImmediatePropagation doesn't interrupt the CLICK event from registering the MOUSE_DOWN as part of its detection cycle. It makes sense that it doesn't but still... disappointing.A MouseEvent.CLICK consists of detecting a MOUSE_DOWN on the object and then if it's followed by a MOUSE_UP without leaving the object, he event fires. I had hoped that by cancelling the MOUSE_DOWN event, it would clear that out of the CLICK buffer, but no such potatoes, alas.This could all be handled with a flag and a couple more MOUSE_UP and MOUSE_DOWN handlers, but dang, smacks of effort
rwBtn.addEventListener(MouseEvent.MOUSE_OVER, audioOver); function audioOver(e:MouseEvent):void { var thisClip:MovieClip = e.relatedObject; thisClip.alpha = 0; }
I would like to change the alpha of the clip that is being rolled over. I don't know how to target the clip that is being rolled over. How do I do that?
I'm using FlashDevelop, trying to create a wipe away effect. But for some reason, if you hold the mouse button down for a little while in one place, the underlying image (ice) gets erased and reveals the default background. How do I prevent that from happening?
We have a Flash swf object embedded in an html page. When the user sees the page it's just a small button, but on the rollover state the area of the object expands and covers more of the page. This is how it was designed. The problem seems to be that the maximum size of the swf object, even though it's transparent and "invisible" unless the user rolls over the button, blocks out all the underlying html so you can't access any of the links. It's as if the object is covering that part of the page even when it's not expanded. I've tried every publish setting I can imagine to compensate and make the item truly transparent so the "hidden" underlying links will still be clickable, but just can't get it.
I'm running into an instance where I am trying to load a file 'main.swf' using the Loader class and the content of the 'evt.currentTarget.content' points to '[ object Main__Preloader__ ]'. When attemting to trace the content of the loader, I would expect the trace would show similar to '[object Main ]' since the document class for the main.swf is 'Main'. In Safari I can get the file to load and play properly (admitting through a work around) however, on Firefox for mac all that displays is some sort of 'preloader' (which I can assure you I did not create) which looks like so:
Here's the animated sequence: oooooooooo I will mention I am using CS5 on a mac and this file works fine when published from CS4 to FP9. I will also mention that the main.swf does contain imported assets from a RSL.
I know ADG related questions generally get ignored because "it's a crappy component". Indeed, it is not one of my favorite pieces of code ever, but I'm stuck with it and have been working (pretty hard) at optimizing its performance. Turns out there's a fair amount of stuff one can do to make things go fast. One thing I've been stuck on, though, is not to optimize adding an element to the underlying dataprovider. Say you want to add a row to the ADG using a addChildAt call on the DP. All seems well but the operation is so slow - it's unbearable. Now, I realize that the ADG may need to redraw all the stuff below the line added, but seriously, in 2011 that should not take a load of time and 100$ of my CPU. Does anyone know what may be the main culprit?
Note: I'm able to catch the CollectionEvent of kind "add" and not deliver them to the ADG, which I thought would do the trick, but the ADG still updates and takes forever to do so, so I'm guessing there's something else somewhere else.
When you have movies in a layer, how can you stop the buttons of the underlying levels from showing through. I don't want the user to think that there is a button on the level showing because the cursor turns into a hand....plus also when clicked it does activate the lower movies actions.
I'm using jQuery Autocomplete just as in this example: [URL] The problem is, the area where you see the Result box in that example - that's where my flash object is. So, when the autocomplete dropdown appears, most of the text is concealed by the flash object (which I can't move). How can I make the autocomplete text appear over the flash object (concealing its view rather than vice versa)?
I have an (empty) ArrayCollection that I wrap with a ListCollectionView. Then I add a series of items to the ArrayCollection, but these are not showing up in the view.
public var transactions : ArrayCollection = new ArrayCollection(); public var filteredTransactions : ListCollectionView = new ListCollectionView(transactions);
transactions contains 150 items, filteredTransactions contains none. I originally thought it was the filter I was applying, but even when I remove the filter, I still get no items in the filtered list.
Do I need to add the items to the view as well as the underlying collection (this would seem to defeat the purpose of using a view though...)?
This is probably something simple I'm missing. There are tons of tuts out there on how to setup a custom right-click menu, however, I've not seen anything on how to get the target of the right-click, not the menu item, but the object actually right-clicked...
Here's the code I'm using. In the customMenuItemHandler I need both the target menu item AND the target object that was originally clicked to open the menu.[code]...
I want to simplify some event handling of an flash app (if that is possible).. so i thought to extend MouseEvent in some way to do it.What i need is OVER, OUT and CLICK callbacks with an extra parameter (an object)... or something like that..I tried:
I've created a function called dragItem() that I call with the MOUSE_DOWN event. I've got it working....kind of. I can access the function when the mouse is clicked and I can even get the name of the instance when the mouse is down. I'm trying to use the same logic to get the single object to allow a drag. see my code below...
function dragItem(event:MouseEvent):void { var instName:String = event.target.name; trace(instName); trace(event.target.width); event.target.startDrag(); event.target.removeEventListener(MouseEvent.MOUSE_DOWN,dropItem); event.target.addEventListener(MouseEvent.MOUSE_UP,dropItem); }
I get this error when I try to drag the item...ReferenceError: Error #1069: Property startDrag not found on flash.display.Loader and there is no default value. at Main/::dragItem()
I am develop on Air for iPad app, just wonder is TouchEvent more efficient or MouseEevent is doing fine. i am talking about performance wise, things like doing drag and drop and ect...
I have two sprites A and B, both are irreuglar drawn shapes (both with a transparent fill) that overlap certain points. The current result is B on top (though which is on top is not really relevant, as the same problem will exist if A is on top). They are both children of the same UIComponent.
Both are listening for the MouseEvent.MOUSE_MOVE event. It is to occur when a corner on either shape is passed over by the mouse. Though, when the mouse moves over the corner of A and this corner is behind B the MouseEvent is never raised.From my investigation I've found when i turn the fill off on the sprites and just draw the outline of the shape the mouse event will raise, but this is not what is wanted. how can I get *both* the objects listening and responding even when the corners of one is overlapping the other?