一、源代码:
import java.awt.*;
import javax.swing.*;
public class BallGame extends JFrame{
Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png"); /*括号里为图片路径*/
Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.jpeg");
double x=100; //小球的横坐标
double y=100; //小球的纵坐标
boolean right=true; //方向 (二:double degree=3.14/3;//表示弧度,初始度数为60度)
//画窗口的方法
public void paint(Graphics g) {
System.out.println("窗口被画了一次");
g.drawImage(desk,0,0,null); /*要先画桌面再画球*/
g.drawImage(ball,(int)x,(int)y,null);/*(int)x是将double型强制转化类型为整型*/
(1)版本一:让小球水平方向来回弹
if(right) {
x = x+10;
}else {
x = x-10;
}
if(x>470) {
right=false;
}
if(x<-70) {
right=true;
}
}
(2)版本二:让小球沿任意角度来回弹
x = x+10*Math.cos(degree);//三角函数得出横坐标变化
y = y+10*Math.sin(degree);//三角函数得出横坐标变化
//碰到上下边界关于x轴对称
if(y>358-118||y<-8) {
degree=-degree;
}
//碰到左右边界关于y轴对称
if(x>470||x<-70) {
degree=3.14-degree;//表示pai-degree,即关于y轴对称的角度
}
//窗口加载
void launchFrame() {
setSize(647,358); /*设置窗口尺寸大小*/
setLocation(50,50); /*设置窗口位置,以页面左上角为原点*/
setVisible(true); /*设置为一直可见*/
//重画窗口
while(true) { /*while(true)表示一直死循环*/
repaint(); /*表示每次遇到该代码都会调用paint方法*/
try { /*try内是为了解决写Thread时遇到的异常机制*/
Thread.sleep(40); /*为了避免一直重画过度的限制,表示40ms画一次,1000ms=1秒,即1秒画25次*/
}catch(Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
System.out.println("hello java");
BallGame game = new BallGame();
game.launchFrame();
}
}
二、遇见问题
1、问题:小球图片加载时有外围白色边框
原因:由于找不到原图片素材下载地址,百度上找来的图片格式为jpge就直接使用了。
解决:先用ps将图片转换为png格式,发现小球的图片直接不见了,然后想起一开始的images包里的图片还没换成png的导致路径中不存在该图。
2、在设置上下左右边界时,由于图片找的不是原本的素材大小有不同,自己调试了很久。