Actionscript 3 :: Handle Mouse Events On Occluded (overlapped) Display Objects In Flash/flex?
Sep 3, 2011
I want to handle the mouseevents for all the sprites on the stage including the one those are hidden behind (or overlapped or occluded) and the main condition is that I want to handle the occluded sprite (that hidden behind other sprite). example, say I have sprite1 and sprite2 on stage and I want to start drag whenever i click on the sprite and stop drag after another click.
This can be done easily, but the problem and my main requirement is that if I drag the sprite1 and drop it exactly on top of the sprite2 then sprite2 will be hidden behind the sprite1 I wont be able to drag the sprite2 without moving the sprite1 first. if you have played zynga's empires and allais game on facebook, it is handled seperatly, it is how it works in that game, the mouse event is triggered on the sprite behind the overlapping sprite, if you have two sprites overlapping one sprite than the mouse event is triggered on the sprite which is last and not the one in front irrespective of whether there is only one sprite overlapping or two or three and this happens to irregular shaped sprites (not just rectangles)
i have 2 sprites on stage. bottomSprite is added to the display list first, followed by topSprite. topSprite partially covers bottomSprite.i've added an event listener to bottomSprite for MouseEvent.MOUSE_MOVED notifications to simply trace the mouseX and mouseY coordinates. however, the notification doesn't work for the parts of bottomSprite that are covered by topSprite.
var bottomSprite:Sprite = new Sprite(); bottomSprite.graphics.beginFill(0x666666, 0.5); bottomSprite.graphics.drawRect(150,150, 150, 150); bottomSprite.graphics.endFill();
I'm trying to recreate a UI for an application that my company makes in order to create an in-depth training companion to the application. One of the features is a weird tree view that works quite different from any tree view component I've ever seen, so I decided to create my own version of it as the Flash AS2 Tree Component doesn't have the functionality, and I haven't found any Tree Component for sale or download that works like that either. At first glance it seems like a standard Tree, except that it behaves differently if you click on the icon for each node than if you click on the label.
Some labels are links, some nodes can have 2 different labels, each with their own link, and most nodes have a second label underneath the label next to the icon (these don't have events assigned to them; they're just a quick way to view information). So anyway, I set up an XML file with all the information that I need (the easy part), but populating the whole thing, making sure each subnode can properly exist within each parentnode while allowing me to open and close them has been a real challenge.
Basically, I decided to use a whole bunch of loops to go through the nodes in the XML, but my lack of experience in using them is kicking my rear end. Basically, I need some code that can evaluate all the nodes in the XML and sort them within the proper hierarchies and then create all the clips in the stage to add the mouse events for opening, closing, and handling the links (which do not direct to the same event as when the icon next to that link is clicked).
I'm developing an AIR application with Flash Builder 4 Beta 2 (nightly SDK) an am not using a framework like mate. I have a couple of views and components in my application. An outline might look like this:
In ACE Flex 3 , there is a topic "Handle Framework Events". Any document which lists all the 'required' framework events for ACE test? So I could know what are "framework" events and will focus on them.
I have a flash object which dimension and position are as same as the HTML button. The button is under the flash object. I want when the flash is clicked and hovered, the button has the styles as if it is clicked and hovered at the same time. I am trying to call: ExternalInterface.call("mouseEventHandle", elementId, eventName); in flash to pass event to JS. And in JS(coffeescript): window.mouseEventHandle = (elementId, eventName) -> id = '#' + elementId switch event when "down" then console.log("down") when "up" then console.log("up") when "enter" then console.log("enter") else console.log("leave") # leave the function is responsible for styling the HTML button. The question is how to style the button under in JS? Or is there other way to achieve the goal?
in Adobe tutorials, they suggest to create a class to handle the events (see below the copy/pasted code, and link to page).I was wondering if I have to handle all events with the function handleAllEvents, using if statements to check if the target is the one I want, and the event is the one I want.i.e. if (event.type=="click") && (event.currentTarget == "myId")Should I have a list of ifs (for each target and each event type ?)[code]
So, events bubble up the display list. That's great if that's what you want. But what if you have objects on the stage that are not related that need to listen for events from each other? A simplified example:
var objA = new ObjA; addChild(objA); var objB = new ObjB;
[Code]....
Object B can listen for events dispatched by object C. But I also need object A to listen for events dispatched by object C. Also, these objects are created in different classes so I can't hard code references to each other.
When dispatching events in as3 I always have to extend class from sprite, or movieclip, but when I don't have display objects I don't wont to extend to sprite or movieclip. What is the most light class that I can extend, I mean no display object, and still do use event dispatching?
I have a garment class which extends Sprite. Each garment class has 2 children on the display list: var hittest: Sprite //basic rectangle sprite to use for drag and drop of the garment itself var artwork:Sprite //this is a simple piece of vector artwork imported from flash. The artwork is visually important and the hittest is just an approximation for moving the Garment item. When i add artwork to this structre. Then hittest gets covered unless i do this: artwork.mouseEnabled = false; The problem for me comes with this:
I need to be able to always keep the garment draggable via access to hittest. However, IF an item is placed on the character, then i want to artwork to also catch click events. (to open a colour pallette). So i must make artwork.mouseEnabled = true to catch these events (but it blocks drag now).
The reason i am here is because of a byproduct of that. Even if i do somehow manage to keep the dragging enabled on hittest sprite, i have noticed that MOUSE_UP, and DOUBLE_CLICK always fire a MOUSE_CLICK event. My head turns to mush because now it seems that im going to be wrestling with the color pallette opening when i dont want it to.
How can I make a mouse event ignore, or skip over another object? Say I have a small Sprite on a Large sprite, I want it to act as if the small sprite isn't there, and pass the mouse events directly through to the larger sprite behind it. I've been searching for this for a while and have tried various things but no avail.
I am trying to perform two way binding e.g I have a button (out of many controls), on its selection, I am showing the values of its diff properties(like height, width etc) in some textinput. This one way process works fine.But the reverse process doesn't work. i.e When I select some button, and try to change its dimension by entering some value in height, width textinputs, the dimension are not changed.
private void Form1_Load(object sender, System.EventArgs e) { //Create some data and bind it to the grid
If my understanding of Flex is correct, skins in Flex are just DisplayObjects that are added as children to UIComponents to create the visual representation of the object. But if my understanding of the Flash event model is correct, if there is a non-transparent DisplayObject on top of another, mouse events will go to the topmost DisplayObject. The overlapped DisplayObject won't receive any mouse input.
So how is it that skinned Flex UIComponents work at all?
This one's been irking me for a while. When I'm using the mouse scroll wheel to scroll up and down in a webpage, and a flash movie comes into the path of the cursor, the scroll wheel stops working. Also, when a flash movie has focus, you can't use browser shortcuts like Ctrl + L or Ctrl + R.
I'm writing a flex application now and I'd like to find a solution, so that at least my users aren't plagued by this inconsistency of the user interface behavior.
I should think there would be a way to tell flash to propagate such events as the mouse scroll wheel and keyboard input back up to the browser unless they occur in an element for which they are useful, like in a flex textarea. I can't find any solutions out there though, nor even anyone talking about it.
Specifically, how can I make it so that:
When the user is scrolling with the mouse, the browser scrolls unless the mouse is over a flex container with scrollbar, or another component that wants to scroll.When the user presses a button or combination of buttons on the keyboard, it will be propagated to the browser unless there is an active keyboard listener, or the cursor is in a text field, etc.
I am looking to provide some UI functionality using the mouse- I have two distinct UI events to be achieved via mouse
a) change value b) delete object
I don't seem to have sufficient mouseclick events for both. I am avoiding using the right click as it has some default options(whose signing off will affect the whole project- not just this). I have mouse click used for change value- how do I use the doubleclick as the single-click events seems to get invoked prior?
I want to know, Is there any way to handle or control the shockwave objects in flash by using 'as3'? I know this is possible in 'Director' by using 'Lingo'. But I am not able to find any way or any articles from where i can get some idea about this. In the director, I've seen there is way to set some properties like camera position, light affects etc. with the shockwave objects. But I am not sure about the FLASH. Can it possible to use these type of properties with shockwave objects in flash, which could be controlled in action script3 ?
How do I identify all the display objects in the display list in ActionScript, bellow the one that I have clicked? All the other objects are shadowed by the first one. What if other objects have visible parameter as hidden?
I'm coding a website in pure AS3 using FlashDevelop and have an object that loads an XML file on init. Is there a good way to make my main function wait until it has finished loading? I know about onComplete events and how to use them internally in the object but I'm not sure how to proceed.
How does flash player handle objects when they are no longer on the visible stage? Is the graphical data still in memory? Does hittestobject/point consider them? Are enterframe and interval events still running?
In AS2 I would hold metaobjects (minimal x,y,width,height data) that would delete/create movieclips as the screen scrolled. Is this still a correct approach in AS3? If not, is there anything I can do to offstage display objects that improves efficiency, assuming around 400 are created initially?
When using Loader class to load display objects (bitmaps, SWFs...) from remote URLs, is there any way for them to be instantiated (referenced as we know, by Loader::content property) as some user specified valid subclass? For example if I had a class that extended a Bitmap, is there any way for the loaded object to be of this class?
Is there any way to display flash objects which are outside the display area when flash is embeded in HTML The reason i ask is my current project has a rotating + enlarging effect which is largely dynamic so sometimes an object may clip the edge of the stage areathis looks messy but i dont want to increase the stage area to cover the largest possible area any object could enter because most of the time the objects are at the center and small so i would end up with a lot of white space
I have a list containing display objects from throughout the application (insertion order). I want to process the list either top-down (parent, child) or bottom up (child, parent). The only requirement is that either a parent is processed before any child or vice versa a child before its parent. What is a good approach? This question is not about sorting a list. It's about retrieving the depth of a particular display object.
Example Display list: A (root) B1 C1 C2 D1 B2 ......
My list: list = [E1, F4, A, B2, B1, C3, ..., N9, N8]
Bottom-up: N9, N8, F4, E1, C3, B2, B1, A
Top-down: A, B2, B1, C3, E1, F4, N9, N8 Does not matter if N9 before N8 or N8 before N9. Important is that any N is before M (first run) or any M before its children N* (second run).
If I plan to implement 100 objects on stage to be listen to mouse and keyboard input, is using "function" call responsive enough? How good does eventlistner work?
Right now all the sounds (78 of them) on my guitar play using the roll_over event but that doesn't give the user much control over what sound is played.
The actionscript im using to play my sounds is this;
I want to replicate the standard startDrag/stopDrag events with my own routine to alter things a bit, and I run into some kind of event propagation or bubbling problem. Here is my code:
The problem with this code is that as you drag the object to the right, you will see in the trace that occasionally some random localX values arrive there, resulting in the object jerking from side to side.
I have a base ShapeContainer(UIComponent). I add a uicomponent which has mouse down listener to ShapeContainer. the listener works great. When I add a simple sprite(draw square) on the ShapeContainer, The listener does not work any more. In the code, if I comment below line, The event listener works fine.
im working on:[code]For more detailed comprehension: corner is the black corner with the (i) and 'Promotion', text is some random text that can be displayed in the white remaining space, container contains corner and text, and finally this class contains container!I need to retrieve the event mouseevent.rollover/rollout from corner.And what's wrong?
1. When I put the mask on container (container.rawchildren.addchildren + container.mask = mask) and the dropshadowfilter on container (container. filters = [glow]), I cannot detect the mouse events.
2. When I put the mask on the promopanel (this.rawchildren.addchildren + this.mask = mask) and the dropshadowfilter on promopanel (this.filters = [glow]), I cannot detect the mouse events.
3. When I put the mask in a component and the filter in another, it does not work either.
4. If I remove the mask OR the filter, it works!! But I need them both...
So, does anyone has an idea on how to make this work? I've been trying to look for issues with filters, masks and mouseevents but haven't found anything that could enlighten this issue.