Java游戏开发基本知识一

[b][color=brown][size=medium]JAVA游戏开发基础一:[/size][/color][/b]
[b][color=darkblue]1、完成窗口的加载
2、用画笔画基本图形,改变画笔颜色,
3、用画笔画字符串,改变字符串字体
4、动画效果实现,通过线程轮训,不停调用重画方法,间接调用paint方法实现[/color][/b]
package com.hank.test;

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 huangqun08312
*/
public class GameFrame extends Frame{ //GUI编程,awt,swing,jframe等
private static final long serialVersionUID = -8342342546611528706L;

Image image = GameUtil.getImage("images/95501.jpg");

/**
* 启动主窗口
*/
public void launchFrame() {
this.setSize(800, 800); //设置窗体大小
this.setLocation(100, 100); //设置窗体在屏幕显示的位置
this.setVisible(true); //设置窗体是否可见

//启动重画线程,可以产生动态效果
new Thread(new PaintThread()).start();

//加个监听器,监听器用匿名内部类,监听窗口关闭动作,来执行相应动作
//WindowAdapter类实现了三个重要监听接口WindowListener,WindowStateListner,WindowFocusListner
//但WindowAdapter具体方法的实现没有写,需要我们手动完成
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}

private int x = 200;
private int y = 200;

//在窗体里面画东西,这个是构造函数回调自动调用的,一定会被执行
public void paint(Graphics g) {
System.out.println("painting!!!");
Color hisColor = g.getColor(); //用之前保存画笔的颜色,用完给改回去,保证方法调用完,不改动人家的东西

g.drawLine(100, 100, 200, 200); //画直线:注意画线的坐标是相对于窗口来说的
g.drawRect(100, 100, 200, 200); //画矩形:
g.drawOval(100, 100, 400, 300); //画圆:画的是矩形的内切圆,或者是内切椭圆

Font font = new Font("宋体", Font.BOLD, 100); //定义字体
g.setFont(font); //设置画笔的字体
g.drawString("我是黄群", 200, 200); //画字符串:在界面画字符串

g.setColor(Color.BLUE); //给当前画笔填充颜色
g.fillRect(100, 100, 50, 50); //用当前画笔颜色填充矩形
g.setColor(Color.RED);
g.fillOval(400, 400, 40, 40); //用当前画笔颜色填充原型
g.setColor(hisColor); //用完画笔,把画笔还原成之前的颜色

g.drawImage(image, x, y, null); //通过每次画不同的位置实现动态效果
x += 4;
y += 4;
}

/**
* 定义一个重画窗口的线程类,也是一个内部类,方便访问外部类属性,方法
*/
class PaintThread implements Runnable {
public void run() {
while (true) {
repaint(); //重画相当于反复调用paint()方法
try {
Thread.sleep(40);//为了不太耗cpu,大约40ms重画一次,大约1s25张图片
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

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

[b][color=indigo]游戏项目公共类[/color][/b]
package com.hank.test;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;

/**
* 游戏开发中常用的工具类
* 工具类:1.通常将构造方法私有
* 2.工具类基本都是静态的方法,方便调用
*/
public class GameUtil {
/**
* 加载图片方法
* @param path
* @return
*/
public static Image getImage(String path) {
URL url = GameUtil.class.getClassLoader().getResource(path); //要搞懂这句话 FIXME
BufferedImage image = null;
try {
image = ImageIO.read(url);
} catch (IOException e) {
e.printStackTrace();
}
return image;
}
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值