08_Animation

Download Report

Transcript 08_Animation

Threads and Multimedia
Animation, Images, Sound
Animation
 Animation, displaying a sequence of
frames to create the illusion of motion, is a
typical application of threads
 One thread is used to download the
image(s)
 Other thread(s) are used to paint the
image(s) sequentially
 See programs
- ButtonToMove.java
- MoveBall.java
- AnimateBall.java
ButtonToMove
This program uses a button to allow
the user to move a ball across the
screen
- Push button, move ball 9 pixels
southeast
Solution to animate?
- put movement into for loop (next slide)
Wrong Approach
public void actionPerformed(ActionEvent ae)
{ for(int i = 0; i < 10; i++)
{ x += 9;
y += 9;
repaint(); // system collects them into
// one call to paint()
}
}
- Cannot put motion in a for loop in the
actionPerformed method because the calls to
repaint will be combined into one call to paint.
• effect is to show only position at end of loop
MoveBall.java
Animates ball using a separate thread
The button pressed creates the thread
to animate ball.
In an applet, the applet will implement
runnable and the code for the run
method will be used by the thread.
- why does it have to implement runnable?
See actionPerformed in MoveBall.java
- try pushing the Move button multiple times
• Why does it act the way it does??
AnimateBall.java
Modified MoveBall so that the run
method continually moves the ball until
the web page is left. When the web
page is re-entered, the thread will start
again.
See start, stop, and run of
AnimateBall.java
Line Animation
Uses a thread to move lines across an
applet
The thread draws several lines
repeatedly to create the illusion of the
line moving.
When the lines reach the border of the
applet, the motion reverses.
See LineAnimation.java
Text Animation
Demonstrates how a streaming banner
can be shown in an applet.
Applet with string drawn inside
- no init()
- no nothing, except a graphics object used
to draw a string
• see what happens when you change its size in
the html file
Animation.java
The Clock Frame
Demonstrates Frames, Event Handler,
Threads, and Calendar class to build a
clock with alarm.
Thread is used to run the clock
Can embed in another application
Application: ClockFrame.java
- Note use of Toolkit
Images
 Applets and applications can use images in
the .gif or .jpg format
 Applets usually cannot read images from the
client computer even if the page came from
the client.
 images usually are in the base path of the
web page or one of its subdirectories.
 images use a URL to find them
Images in Applets
Some Methods needed
- getDocumentBase()
- getCodeBase()
- getImage(url, filename)
• im.getWidth(this);
• im.getHeight(this);
- g.drawImage(im, x, y, this);
• there are several versions of drawImage
Example: ImageDemo.java
Images and URLs
 getCodeBase()
- location of applet code
 getDocumentBase()
- location of document in which applet is embedded
 getImage(URL,Filename)
- load named image from given URL
- returns the image in a separate thread (Image is, of course,
a class)
 drawImage(image,x,y,which)
- place the named image, with its upper left-hand corner at the
given point.
- which is the object to be notified as drawing progresses
whether it is progressing
- returns false if drawing is still occurring when it returns
Tracking Images
MediaTracker
- Keeps track of images added to its list
Methods:
 addImage(Image, id)
- add an image for this media tracker to track
• id is passed in and used to identify the image
 removeImage(Image)
- stop tracking the named image (why not its id?)
 checkAll()
- returns true if all tracked images are done loading
 checkID(id)
- returns true if all tracked images with this id are done loading
(can be multiples)
Tracking Images
More MediaTracker methods:
 isErrorID(id)
- check error status of images with given id; return true if error
 isErrorAny()
- check error status of all tracked images
 waitForID(id,[ms])
- Starts loading all images tracked by this media tracker with
the specified identifier. Can specify maximum time in
milliseconds to wait for loading to complete
 waitForAll(id,[ms])
- same as waitForID, but starts loading all images
The Class URL
Used for accessing web sites
Methods:
 Constructors; URL(string url)
- simplest; 5 other variations on constructor
 getContent();
- retrieves url’s content as Object
 openConnection();
- get a connection to this URL.
 openStream();
- returns InputStream used to read from the URL
URL Class
Methods, con’t.:
 getHost()
- return host as IPv6 address enclosed in square brackets
 getFile()
- get actual file this URL represents. Will not have web
address if loacl
 getProtocol()
- returns http or https, as a string
 getPort()
- returns the port number allocated to this URL object
 toExternalForm()
- returns string form for this URL
Images in Applications
 No applet limitations as to where the image can
come from
 must use different methods since application is
not an applet
 create a URL object for the file
 load whatever the URL object refers to
 we use getContent() to return an Object, since a
URL can refer to any type of Object. If it is an
image, getContent returns an ImageProducer
object which can create an Image.
 Alternative: Use the Toolkit version.
Image Demo Applications
Examples:
 ImageDemo2.java
- Uses the URL and getContent() with
ImageProducer
 ImageDemo3.java
- Use the Toolkit class
• (actually, Image2Demo did, too; This example uses the
toolkit to obtain the image)
Sequences of Images
 Sequence of displayed images create
animation.
 Animation can flicker because of repaint.
- Avoid by creating ImageIcon
 Override the update method
 Use double buffering
- draw image twice
 Examples:
- ImageAnimation.java
- AnimateImage_NoFlicker.java