spacedemo.java
来自「全面实现ilog地功能,没有使用第三方lib.」· Java 代码 · 共 140 行
JAVA
140 行
/*
* This source code is part of TWaver 1.3.1
*
* SERVA Software PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
* Copyright 2000-2005 SERVA Software, Inc. All rights reserved.
*/
package demo.network;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.Ellipse2D;
import java.util.Random;
import javax.swing.SwingUtilities;
import twaver.Element;
import twaver.MovableFilter;
import twaver.Node;
import twaver.TDataBox;
import twaver.TWaverConst;
import twaver.background.TextureBackground;
import twaver.network.TNetwork;
import demo.DemoPane;
public class SpaceDemo extends DemoPane {
public SpaceDemo() {
final Random random = new Random();
class Planet extends Node {
int diameterX = (random.nextInt(10) + 1) * 30;
int diameterY = (random.nextInt(10) + 1) * 30;
int offset = random.nextInt(360);
Planet(String image) {
setImage(image);
}
}
final TNetwork network = new TNetwork();
TDataBox box = network.getDataBox();
final Planet[] planets = new Planet[5];
for (int i = 0; i < planets.length; i++) {
planets[i] = new Planet("/demo/resource/space/node" + (i + 1) + ".png");
box.addElement(planets[i]);
}
final Node sun = new Node();
sun.setLocation(300, 300);
sun.setImage("/demo/resource/space/sun.png");
network.getDataBox().addElement(sun);
network.addMovableFilter(new MovableFilter() {
public boolean isMovable(Element element) {
return false;
}
});
network.setNetworkBackground(new TextureBackground("/demo/resource/space/space.png") {
public void paint(Graphics g, double zoom, Rectangle view) {
super.paint(g, zoom, view);
Graphics2D g2d = (Graphics2D) g;
//paint orbit
g2d.setStroke(TWaverConst.DASHED_STROKE);
g.setColor(Color.white);
for (int i = 0; i < planets.length; i++) {
int x = sun.getLocation().x - planets[i].diameterX + sun.getWidth() / 2;
int y = sun.getLocation().y - planets[i].diameterY + sun.getHeight() / 2;
if (planets[i].getImageURL().equals("/demo/resource/space/node1.png")) {
x += planets[i].getWidth() / 2;
y += planets[i].getHeight() / 2;
}
Ellipse2D e = new Ellipse2D.Float(x,
y,
planets[i].diameterX * 2,
planets[i].diameterY * 2);
g2d.draw(e);
}
}
});
this.add(network, BorderLayout.CENTER);
Thread thread = new Thread() {
public void run() {
while (true) {
for (int i = 0; i < 360; i+=5) {
final int temp = i;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
float alpha = Math.abs(temp - 180) / 180.0f;
for (int j = 0; j < planets.length; j++) {
Planet planet = planets[j];
int width = planet.diameterX;
int height = planet.diameterY;
int angle = temp;
angle += planet.offset;
int x = (int) (Math.cos(Math.toRadians(angle)) * width);
x += sun.getLocation().x;
int y = (int) (Math.sin(Math.toRadians(angle)) * height);
y += sun.getLocation().y;
planets[j].setLocation(x, y);
planet.putClientProperty(TWaverConst.PROPERTYNAME_ELEMENT_ALPHA, new Float(alpha));
}
if(0.6 < alpha && alpha < 0.7){
network.setAlpha(0.4f);
}else if(0.7 < alpha && alpha < 0.8){
network.setAlpha(0.1f);
}else{
network.setAlpha(1.0f);
}
}
});
try {
Thread.sleep(100);
}
catch (InterruptedException ex) {
}
}
}
}
};
thread.start();
}
public String getHelp() {
return "This demo demonstrate the path of several " +
"planets revolves around the sun.";
}
public String getTitle() {
return "Space Demo";
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?