您的位置:首页 > 编程语言 > Java开发

Java模拟弹球效果

2013-03-29 20:11 274 查看
/*
* 不添加事件监听的话最大最小可以用,但关闭不可以
*/
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//coordinate:坐标系;oval椭圆(矩形的内切,不信可以把矩形和椭圆的参数设置的一样)
//计算机画椭圆采用的是参数方程 x = a*cosθ ,y = b*sinθ,不用一般方程;采用弧度
public class BallGame extends Frame {

/**
* 图片的位置不和src平级就显示不了
*/
private static final long serialVersionUID = -4408396034592021515L;//这个是导出jar包时建议的,我也不知道啥意思
Image sun = Toolkit.getDefaultToolkit().getImage("images/sun.jpg");
double x=100;
double y=100;
double degree = Math.PI/3;//初始角度
public void paint(Graphics g){
//System.out.println("窗口被画了一次!");
g.drawImage(sun, (int)x,(int)y, null);
x = x+ 10*Math.cos(degree);//椭圆的中心每次要变化
y = y+10*Math.sin(degree);

if(y>300-30){
degree = - degree;
}
if(x>500-30){
degree = Math.PI-degree;
}
if(x<0){
degree = Math.PI-degree;
}
if(y<30){//减去标题栏宽度,因为标题栏也算在坐标系内,否则上面小球会进去
degree = -degree;
}
}

void launchFrame(){
setSize(500, 300);
setLocation(50, 50);
setTitle("火星十一郎");
setBackground(Color.black);
myEvent();
setVisible(true);
new PaintThread().start();
}

public static void main(String[] args){
new BallGame().launchFrame();
}

class PaintThread extends Thread {
public void run(){
while(true){
repaint();  //重画窗口!
try{
Thread.sleep(40);   //40ms    1s=1000ms
}catch (Exception e) {
e.printStackTrace();
}
}
}
}

private void myEvent()
{
/*
* Cannot make a static reference to the non-static method addWindowListener(WindowListener) from the type Window
* 把BallGame改成this就对了
*/
this.addWindowListener(new WindowAdapter()//窗口监听
{
public void windowClosing(WindowEvent e)
{
//System.out.println("窗体执行关闭!");
System.exit(0);
}
});
}
}




  导出jar包直接用MyEclipse的Export,不过我发现我的jar包没显示图片。

  Roy说这样写就行了(确实对了),并把images放在src目录下。

Image sun = Toolkit.getDefaultToolkit().getImage(getFilePath("/images/sun.jpg"));

public URL getFilePath(String path) {
return BallGame.class.getResource(path);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: