我现在发现,学习进度一定不能停滞,哪怕视频看不懂,也必须继续按进度前进,问题可以慢慢来解决,切勿完美主义,先行动起来,拒绝拖延。
第77集:游戏项目1——加载窗口、画图形、编程中坐标基本知识
本集新学知识
-
窗口加载的常用方法
setSize()
setLocation()
setVisible()
-
关闭窗口的常用方法
//匿名内部类 addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);//参数传负数表示异常结束,传0表示正常结束。 } });
-
画笔类相关常用方法
drawRect()
drawLine()
drawOval()
drawString()
fillRect()
-
画面使用完毕一定要“清洗”
public void Paint(Graphics g){ Color c = new Color(); g.setColor(Color.red); g.drawRect(100,100,200,200) g.setColor(c); }
画笔类之所以写完方法就能运行,是因为callback的原因。
-
字体相关常用方法
setFont()
package com.test077;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/**
* @author wangtao
* 游戏窗口类
*/
public class GameFrame extends Frame { //GUI编程:AWT,swing等 Java编写的桌面软件极少,这些工具不要花太多时间
/**
* 加载窗口类
*/
public void launchFrame(){
setSize(500,500);
setLocation(100,100);
setVisible(true);
//下面是一个匿名内部类
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);//参数传负数表示异常结束,传0表示正常结束。
}
});
}
//画笔类,这个地方用了回调
@Override
public void paint(Graphics g) {
g.drawLine(100, 100, 200, 200);//画线
g.drawRect(100, 100, 200, 200);//画矩形
g.drawOval(100,100,200,200);//画矩形的内切圆
Font f = new Font("宋体",Font.BOLD,100);
g.setFont(f);//设置字体
g.drawString("Hello World!",200,200);//字符串的左下角就是后面那个坐标
g.fillRect(100, 100, 20, 20);//画填充矩形
Color c = g.getColor();//先获取原画笔颜色
g.setColor(Color.red);//设置新画笔颜色,
g.fillOval(300, 300, 20, 20);//用新画笔填充
g.setColor(c);
}
public static void main(String[] args){
GameFrame gf = new GameFrame();
gf.launchFrame();
}
}
第78集:游戏项目2——图片的加载
本集新学知识
一个用于加载图片的工具类
package com.test077;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
/**
* @author wangtao
* 加载图片用的工具类
*/
public class GameUtil {
private GameUtil(){}//将构造方法私有,防止创建实例
public static Image getImage(String path){
URL u = GameUtil.class.getClassLoader().getResource(path);
BufferedImage img = null;
try {
img = ImageIO.read(u);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return img;
}
}
-
使用图片应该先加载,再后画进窗口。
加载:Image img = GameUtil.getImage("images/plane.jpeg");
画入窗口:g.drawImage(img,200,200,null);
package com.test077;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/**
* @author wangtao
* 游戏窗口类
*/
public class GameFrame extends Frame { //GUI编程:AWT,swing等 Java编写的桌面软件极少,这些工具不要花太多时间
Image img = GameUtil.getImage("images/plane.jpeg");
/**
* 加载窗口类
*/
public void launchFrame(){
setSize(500,500);
setLocation(100,100);
setVisible(true);
//下面是一个匿名内部类
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);//参数传负数表示异常结束,传0表示正常结束。
}
});
}
//画笔类,这个地方用了回调
@Override
public void paint(Graphics g) {
g.drawLine(100, 100, 200, 200);//画线
g.drawRect(100, 100, 200, 200);//画矩形
g.drawOval(100,100,200,200);//画矩形的内切圆
Font f = new Font("宋体",Font.BOLD,100);
g.setFont(f);//设置字体
g.drawString("Hello World!",200,200);//字符串的左下角就是后面那个坐标
g.fillRect(100, 100, 20, 20);//画填充矩形
Color c = g.getColor();//先获取原画笔颜色
g.setColor(Color.red);//设置新画笔颜色,
g.fillOval(300, 300, 20, 20);//用新画笔填充
g.setColor(c);
g.drawImage(img,200,200,null);
}
public static void main(String[] args){
GameFrame gf = new GameFrame();
gf.launchFrame();
}
}