| By Guy Watson | Article Rating: |
|
| October 25, 2005 06:45 AM EDT | Reads: |
88,971 |
Collision Detection
Finally, results from hittesting code using MovieClip.hitTest will not be affected by Bitmap Caching, as hittesting is still calculated based upon the vector data of a movie clip, not the generated bitmap that you actually see. To prove this create a new movie clip and draw a circle inside it, drag it onto the first frame of the main timeline and give it an instance name of circle_mc. Now add the following code to the first frame of the main timeline:
circle_mc.onMouseMove=function()
{
trace("hit: "+this.hitTest(_root._xmouse,_root._ymouse,true))
}
circle_mc.cacheAsBitmap=true
Cropping and Scrolling
Scrolling large amounts of complex vector data or text was previously a very intensive task for the Flash Player, it still is. However, Macromedia has recognized this problem and has added a new feature to the latest release of the Flash Player that provides a solution to this particular problematic scenario
It is now possible for us to define a rectangular viewing window for a movie clip that basically visually crops the movie clip to a specified size and scrolls the content of the movie clip by a specified offset. The scrolling offset can then be changed to scroll the movie clip's content into view over a number of frames.
How Do I Use It?
As a fairly advanced feature, at present and for the foreseeable future, it can only be utilized through ActionScript. For this, a property has been added to all movie clips called scrollRect which we use to tell Flash to crop a movie clip and shift the position of its content.
The scrollRect property can be though of as a very simplified equivalent of the ScrollPane component but for scrolling movie clips. That is because it allows you to show a certain part of a movie clip and move the content around inside this viewing area all by setting the value of one ActionScript property. This property is set by specifying an object that contains four properties; these four properties define the size and the scrolling offset of the movie clip's content.
They are:
- Width - width of the viewing rectangle
- Height - height of the viewing rectangle
- X - scrolling offset on the x-axis
- Y - scrolling offset on the y-axis
We can create an object that defines a viewing rectangle as follows:
scrollRect={x:50,y:50,width:100,height:100}
//define the viewing area and scrolling offset
And then pass this object to the movie clip we want to scroll by setting the value of the scrollRect property:
scrollingMovieclip.scrollRect=scrollRect
//scroll and crop the movie clip
This will basically crop the movie clip to a 100 * 100 square and the position of the movie clip's contents appears to have changed by 50 pixels along both the x and y axis. The movie clip's _width and _height will change to the cropped size of the movie clip after applying a scrollRect.
trace(scrollingMovieclip._width+"/"+scrollingMovieclip._height)
Local coordinate space A movie clip is always cropped and scrolled in its local coordinate space, from the top left hand corner which is zero on both the x and y axis (0, 0). You cannot move the viewing window of the movie clip; you can only move the content of the movie clip in the opposite direction to bring it into view.
The cropping gives the same effect as having a mask that is positioned at 0,0 in the movie clip's local coordinate space. That's a hard concept to grasp, so let's take a look at an example and see what happens when we apply it to a movie clip.
Below you will see a movie clip with an instance name of gradientMc that contains a 200 * 200 square filled with a gradient. That square is centered on the movie clips local original (0, 0). Therefore the squares top left hand corner in the movie clip's local coordinates starts at 100,100.
The following code defines a viewing area that is 100 * 100 in size with no scrolling offset:
scrollRect={x:0,y:0,width:100,height:100}
//define the viewing area and no scroll offset
When we set the scrollRect property of this movie clip you can see below, that the movie clip has been cropped from, not around its local origin.
gradientMc.scrollRect=scrollRect
Scaling a movie clip will scale the size of the cropped area. For example, if you define the cropped area as a 100 * 100 rectangle:
scrollRect={x:0,y:0,width:100,height:100}
scrollingMovieclip.scrollRect=scrollRect
And then you scale the movie clip to twice its size:
scrollingMovieclip._xscale=scrollingMovieclip._yscale=200
//resize the movie clip to 200%
You will find that the cropped area is now actually a 200 * 200 square.
Similarly, if you rotate a movie clip that has a scrollRect property defined, the coordinate space of the scrollRect is rotated as well. Therefore, if you were to rotate a movie clip by 90 degrees and change the scrolling offset on the x-axis (left and right) by setting the scrollRect property, the movie clips content will actually scroll along the y-axis (up and down):
scrollingMovieclip.scrollRect={x:100,y:0,width:100,height:100}
scrollingMovieclip._rotation=90
Removing the cropping and scrolling Retrieving the value of a movie clip's scrollRect property actually returns a copy of its original scrollRect. It doesn't return the original, which is a shame because it means we can't do something like this:
scrollingMovieclip.scrollRect.x+=10
//doesn't work
Instead you have to get a copy of the original scrollRect, change its properties and then reapply it:
var s=scrollingMovieclip.scrollRect
//store a copy of the scrollRect property
s.x+=10 //change the xaxis
scrolling offset
scrollingMovieclip.scrollRect=s
//reapply with our changed copy
That also means that you can't simply delete the scrollRect property of a movie clip to remove it:
delete scrollMovieClip.scrollRect
//doesn't work
You have to explicitly set the scrollRect property of a movie clip to undefined to remove the cropping and scrolling:
scrollingMovieclip.scrollRect=undefined
//remove the cropping and scrolling
Published October 25, 2005 Reads 88,971
Copyright © 2005 SYS-CON Media, Inc. — All Rights Reserved.
Syndicated stories and blog feeds, all rights reserved by the author.
More Stories By Guy Watson
Guy Watson (aka FlashGuru) has been a well-recognized figure in the Flash community for around four years, supporting the community with tutorials and source files, moderating the large Flash community forums, and running his own Flash resource Web site - FlashGuru's MX 101. Guy was one of the two developers that created the award-winning zoom interface for Relevare and now works for Endemol UK, the creative force behind reality television, producing programs such as Big Brother and The Salon. Guy now spends most of his time developing Flash games and applications for high-profile clients such as Channel 5 Television, Ladbrookes, and UK Style.
![]() |
Conference Call 07/07/06 04:45:58 PM EDT | |||
Trackback Added: Conference Call; Conference Call |
||||
![]() |
Drug Rehab 07/07/06 09:19:22 AM EDT | |||
Trackback Added: Drug Rehab; Drug Rehab |
||||
![]() |
Payday Loan 07/05/06 10:59:50 AM EDT | |||
Trackback Added: Payday Loan; Payday Loan |
||||
![]() |
Dental Insurance 07/05/06 10:33:31 AM EDT | |||
Trackback Added: Dental Insurance; Dental Insurance |
||||
![]() |
Data Recovery 07/04/06 08:38:25 AM EDT | |||
Trackback Added: Data Recovery; Data Recovery |
||||
![]() |
Printers 07/02/06 12:24:47 PM EDT | |||
Trackback Added: Printers; Printers |
||||
![]() |
1031 Exchange 07/01/06 02:08:26 PM EDT | |||
Trackback Added: 1031 Exchange; 1031 Exchange |
||||
![]() |
First Aid Kits 07/01/06 03:49:12 AM EDT | |||
Trackback Added: First Aid Kits; First Aid Kits |
||||
![]() |
Car Accident Lawyer 06/30/06 02:25:19 PM EDT | |||
Trackback Added: Car Accident Lawyer; Car Accident Lawyer |
||||
![]() |
Acne 06/25/06 02:22:46 PM EDT | |||
Trackback Added: Acne; Acne |
||||
![]() |
Equity Line Of Credit 06/25/06 07:38:23 AM EDT | |||
Trackback Added: Equity Line Of Credit; Equity Line Of Credit |
||||
![]() |
Forklift 06/25/06 07:22:27 AM EDT | |||
Trackback Added: Forklift; Forklift |
||||
![]() |
Term Life Insurance 06/24/06 04:21:24 AM EDT | |||
Trackback Added: Term Life Insurance; Term Life Insurance |
||||
![]() |
Eye Surgery 06/23/06 06:58:00 PM EDT | |||
Trackback Added: Eye Surgery; Eye Surgery |
||||
![]() |
Relocation 06/23/06 06:35:57 PM EDT | |||
Trackback Added: Relocation; Relocation |
||||
![]() |
Payday Loan 06/23/06 06:33:04 PM EDT | |||
Trackback Added: Payday Loan; Payday Loan |
||||
![]() |
Payday Loan 06/23/06 03:15:54 PM EDT | |||
Trackback Added: Payday Loan; Payday Loan |
||||
![]() |
Relocation 06/23/06 03:10:34 PM EDT | |||
Trackback Added: Relocation; Relocation |
||||
![]() |
Distance Education 06/23/06 01:29:59 AM EDT | |||
Trackback Added: Distance Education; Distance Education |
||||
![]() |
Relocation 06/22/06 09:36:41 PM EDT | |||
Trackback Added: Relocation; Relocation |
||||
![]() |
Vasectomy 06/22/06 12:31:50 PM EDT | |||
Trackback Added: Vasectomy; Vasectomy |
||||
![]() |
Aeon 05/27/06 03:21:41 AM EDT | |||
This tutorial is full of syntax errors. |
||||
![]() |
eddyC 02/19/06 07:05:15 PM EST | |||
Hi "noname", I was searching for a solution to this problem and found out you've had the same tysRect-problem... Have you solved it by now? :-) TIA! |
||||
![]() |
noname 01/05/06 06:00:11 PM EST | |||
hey, i just took a shot at the example in "Cover Story: How to Increase the Frame Rates of Your Flash Movies": "Scrolling Large Amounts of Text". Unless i'm doing something incredibly wrong, it's not close to complete the way you have it in the article. Anyway, i think i've narrowed it down and just need the value for one last property: "tysRect", in the scroll() function. what is this supposed to be set to??? is there a working fla anywhere? thanks! |
||||
- Ulitzer.com Named Exclusive "New Media" Sponsor of Cloud Computing Conference & Expo
- Adobe’s Aiming ColdFusion at Multiple Clouds
- Cloud Computing Journal: Adobe to Deliver ColdFusion in the Cloud
- Adobe Unveils LiveCycle Enterprise Suite 2 for Deployment in the Cloud
- Adobe Flex Developer Earns $100K in New York City
- Adobe May Cooperate with Apple to Transplant Flash Player to iPhone
- Ph.D. in Twitter Anyone?
- Eolas Sues the Internet
- Adobe LiveCycle Enterprise Suite 2 for Cloud Computing
- Adobe Betas Target RIAs and Cloud Computing
- Special Report on the Emerging Cloud Computing Trend
- Adobe Cans Another 9% of its Workforce
- My Thoughts on Ulitzer
- Ulitzer.com Named Exclusive "New Media" Sponsor of Cloud Computing Conference & Expo
- Ulitzer Live! New Media Conference & Expo
- Adobe’s Aiming ColdFusion at Multiple Clouds
- Eval JavaScript in a Global Context
- Fig Leaf Software to Exhibit at Government IT Conference & Expo
- Cloud Executives Feature on Cloud Computing Expo Power Panel
- Software Flexibility in the Cloud - Part 4 of 5
- Cloud Computing Journal: Adobe to Deliver ColdFusion in the Cloud
- Is Microsoft as Free as Open Source?
- Adobe Reader Sued
- Adobe Unveils LiveCycle Enterprise Suite 2 for Deployment in the Cloud
- Where Are RIA Technologies Headed in 2008?
- Cover Story: How to Increase the Frame Rates of Your Flash Movies
- AJAX World RIA Conference & Expo Kicks Off in New York City
- Your First Adobe Flex Application with a ColdFusion Backend
- Adobe Flex 2: Advanced DataGrid
- i-Technology Blog: Death-Knell For "Rich Media? Hardly!
- Adobe/Macromedia - Microsoft, Look Out!
- How To Create a Photo Slide Show ...
- Adobe Flex Interface Customization - Themes, Styles, Skins
- Personal Branding Checklist
- Has the Technology Bounceback Begun?
- "Real-World Flex" by Adobe's Christophe Coenraets




































