Jam/Sprite3D

From ggc

Jump to: navigation, search

01 package Jam;
02 
03 import wiki.Wiki;
04 import fang.*;
05 import java.awt.Graphics2D;
06 import java.awt.Shape;
07 import java.awt.geom.AffineTransform;
08 import java.awt.geom.Point2D;
09 import java.awt.geom.Rectangle2D;
10 
11 /**
12  * All about my class here.
13  @author Jam Jenkins
14  */
15 public class Sprite3D extends Sprite
16 {
17   public static double viewingAngle=Math.atan(0.1)*2;
18   public static double screenSizeFactor=Math.tan(viewingAngle/2)*2;
19   public static Point2D.Double center=new Point2D.Double(0.50.5);
20   double layer=1;
21   double cachedScale=1;
22   boolean layerChanged;
23   AffineTransform layerTransform;
24   public Sprite3D(Shape shape)
25   {
26     super(shape);
27     layerChanged=false;
28     layerTransform=new AffineTransform();
29   }
30 
31   public void setScale(double scale)
32   {
33     cachedScale=scale;
34     super.setScale(scale);
35   }
36 
37   public void scale(double scalingFactor)
38   {
39     cachedScale*=scalingFactor;
40     super.scale(scalingFactor);
41   }
42 
43   public void setLayer(double layer)
44   {
45     if(this.layer!=layer)
46       layerChanged=true;
47     this.layer=layer;
48     if(layer<=0return;
49   }
50 
51   public double getLayer()
52   {
53     return layer;
54   }
55 
56   private void adjustViewingAngle()
57   {
58     double visibleSize=cachedScale;
59     double screenSize=screenSizeFactor*(5-layer);
60     double scale=visibleSize/screenSize;
61     layerTransform.setTransform(
62         scale, 0,
63         0, scale,
64         center.x-scale*center.x,
65         center.y-scale*center.y);
66   }
67 
68   public void paint(Graphics2D brush)
69   {
70     if(layer>5return;
71     if(layerChangedadjustViewingAngle();
72     AffineTransform original=brush.getTransform();
73     brush.transform(layerTransform);
74     super.paint(brush);
75     brush.setTransform(original);
76   }
77 }


Download/View Jam/Sprite3D.java





Views
Personal tools
Add to 
del.icio.usAdd to 
diggAdd to 
FacebookAdd to 
favoritesAdd to 
GoogleAdd to 
MySpaceAdd to 
PrintAdd to 
SlashdotAdd to 
StumbleUponAdd to 
Twitter