Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
src/SpriteDemoApp.java
/* |
* QuickTime for Java SDK Sample Code |
Usage subject to restrictions in SDK License Agreement |
* Copyright: © 1996-1999 Apple Computer, Inc. |
*/ |
import java.awt.*; |
import java.awt.event.*; |
import java.io.IOException; |
import java.io.File; |
import quicktime.*; |
import quicktime.qd.*; |
import quicktime.io.*; |
import quicktime.app.image.*; |
import quicktime.app.display.*; |
import quicktime.app.QTFactory; |
import quicktime.util.*; |
import quicktime.app.anim.*; |
import quicktime.app.actions.*; |
import quicktime.std.image.*; |
public final class SpriteDemoApp extends Frame { |
public static void main (String[] args) { |
try { |
QTSession.open(); |
SpriteDemoApp win = new SpriteDemoApp ("QT in Java"); |
win.show(); |
win.toFront(); |
} catch (Exception e) { |
QTSession.close(); |
e.printStackTrace(); |
} |
} |
MovingQTCanvas c1; |
MovingQTCanvas c2; |
boolean c1Active; |
SpriteDemoApp (String s) throws Exception { |
super(s); |
setResizable (false); |
setLayout(new BorderLayout()); |
setBounds (0, 0, 400, 220); |
addWindowListener (new WindowAdapter() { |
public void windowClosing (WindowEvent we) { |
c1.cleanup(); |
c2.cleanup(); |
QTSession.close(); |
dispose(); |
} |
public void windowClosed (WindowEvent we) { |
System.exit(0); |
} |
}); |
Compositor shipAnimation = new Compositor (new QDGraphics (new QDRect(200, 200)), |
QDColor.yellow, 20, 1); |
addSprites (shipAnimation); |
shipAnimation.getTimer().setRate(1); |
c1 = new MovingQTCanvas (shipAnimation); |
add("West", c1); |
c1.setClient (shipAnimation, true); |
c2 = new MovingQTCanvas (shipAnimation); |
add("East", c2); |
Button b = new Button ("Click Here To Make Sprites Jump"); |
b.addActionListener (new ActionListener () { |
boolean c1Active = true; |
public void actionPerformed (ActionEvent event) { |
if (c1Active) { |
c1.removeClient(); |
c2.doSetClient(); |
} else { |
c2.removeClient(); |
c1.doSetClient(); |
} |
c1Active = ! c1Active; |
} |
}); |
add("North", b); |
} |
// this is used to change the rates when the clients are changed |
static int r = 2; |
class MovingQTCanvas extends QTCanvas { |
MovingQTCanvas (Compositor anim) { |
client = anim; |
} |
Compositor client; |
void doSetClient() { |
try { |
setClient (client, true); |
if (r++ % 3 == 0) |
client.getTimer().setRate(0); |
else { |
float rt = client.getTimer().getRate(); |
if (rt == 0) |
client.getTimer().setRate (1); |
else |
client.getTimer().setRate (-client.getTimer().getRate()); |
} |
} catch (QTException e) { |
e.printStackTrace(); |
} |
} |
public void cleanup () { |
client = null; |
removeClient(); |
} |
} |
static void addSprites (Compositor sh) throws IOException, QTException { |
File matchFile = QTFactory.findAbsolutePath ("images/Ship01.pct"); //this file must exist in the directory!!! |
ImageDataSequence isp = ImageUtil.createSequence (matchFile); |
ImageDataSequence seq = ImageUtil.makeTransparent (isp, QDColor.blue); |
// Build Sprites |
Matrix matrix1 = new Matrix(); |
matrix1.setTx(20); |
matrix1.setTy(20); |
matrix1.setSx(0.8F); |
matrix1.setSy(0.8F); |
TwoDSprite s1 = new TwoDSprite(seq, 4, matrix1, true, 1); |
sh.addMember (s1); |
Matrix matrix2 = new Matrix(); |
matrix2.setTx(4); |
matrix2.setTy(4); |
TwoDSprite s2 = new TwoDSprite(seq, 1, matrix2, true, 10); |
sh.addMember (s2); |
// This needs to be a 32bit QDGraphics so the blend mode will |
// be applied correctly to this sprite |
File shipFile = QTFactory.findAbsolutePath ("images/Ship10.pct"); |
GraphicsImporterDrawer ip = new GraphicsImporterDrawer (new QTFile(shipFile)); |
QDRect r = new QDRect (ip.getDescription().getWidth(), ip.getDescription().getHeight()); |
ImageSpec si = ImageUtil.makeTransparent (ip, QDColor.blue, new QDGraphics (QDGraphics.kDefaultPixelFormat, r)); |
Matrix matrix3 = new Matrix(); |
matrix3.setTx(50); |
matrix3.setTy(50); |
TwoDSprite s3 = new TwoDSprite(si, matrix3, true, 8, new GraphicsMode (QDConstants.blend, QDColor.green)); |
sh.addMember(s3); |
// Build ActionList |
SimpleActionList al = new SimpleActionList(); |
ImageSequencer is = new ImageSequencer (seq); |
is.setLooping (ImageSequencer.kLoopForwards); |
al.addMember (new NextImageAction (10, 1, is, s1)); |
al.addMember (new BounceAction (5, 1, sh, s1, 3, 2)); |
ImageSequencer is2 = new ImageSequencer (seq); |
is2.setLooping (ImageSequencer.kLoopForwards); |
al.addMember (new NextImageAction (20, 1, is2, s2)); |
al.addMember (new BounceAction (20, 1, sh, s2, 4, 3)); |
sh.addController(al); |
} |
} |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14