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

坦克大战1--》java绘图机制

2015-10-02 23:16 471 查看
内容:理解java绘图坐标体系,掌握java绘图的基本技术,充分理解java事件处理机制,完成坦克大战小游戏

涉及到的技术:java面向对象编程 java界面编程 绘图技术 多线程 文件I/O操作 数据库

成为一个编程专家的秘诀就是:思考---》编程---》思考---》编程

【1】坐标体系:坐标原点位于JFrame或者JPanel左上角,以像素为单位,像素是计算机屏幕上最小的显示单位。在Java坐标系中,第一个是X坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是Y坐标,表示当前位置为垂直方向,距离坐标原点y个像素



像素:计算机在屏幕上显示的内容是由屏幕上的每一个像素组成的。例如,计算机显示器的分辨率是800*600,表示计算机屏幕上的每一行由800个点组成,共有600行,整个计算机屏幕共有480000个像素。现在的计算机可以支持更高的分辨率,也就是说,屏幕上可以显示更多的像素。因此,像素是一个密度单位,不是长度单位

【2】入门:在面板上划一个小圆,然后借这个案例,学习java绘图技术原理

Component类提供了两个和绘图相关的重要的方法:

(1)paint(Graphics g)绘制组件的外观

(2)repaint()刷新组件的外观

当组件第一次在屏幕显示的时候,程序会自动的调用paint()方法来绘制组件

在以下情况paint()将会被调用:窗口最小化,再最大化;窗口的大小发生变化;repaint函数被调用

/**

* 功能:java绘图原理

*/

package com.zjz.huitu;

import java.awt.*;

import javax.swing.*;

public class Demo9_1 extends JFrame{

MyPanel mp = null;

public static void main(String[] args) {

Demo9_1 demo9_1 = new Demo9_1();

}

public Demo9_1() {

mp = new MyPanel();

this.add(mp);

this.setSize(400,300);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

}

}

//定义一个MyPanel(自己的面板,用于绘图和显示绘图的区域)

class MyPanel extends JPanel {

//覆盖JPanel中的paint方法

//Graphics是绘图的重要类,可以理解成一支画笔

public void paint(Graphics g) {

//1.调用父类函数,完成初始化任务

//这句话不能少

super.paint(g);

System.out.println("paint方法被调用");

//2.先画出一个圆圈

g.drawOval(10,10,30,30);//前俩个参数确定左上角位置

}

}











在做填充图形的时候,在画图之前可以先设置画笔颜色:g.setColor(Color.blue);

//在面板上画一个图片

Image im = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/bomb.gif"));

g.drawImage(im, 90, 90, 200, 150,this);

//画出字

g.setColor(Color.red);


//g.setColor(new Color(66,66,66));

g.setFont(new Font("华文彩云",Font.BOLD,50));

g.drawString("加油吧",100 , 100);








应该是本机没有华文彩云这个字体

开始画坦克:

package com.zjz.huitu;

import java.awt.*;

import javax.swing.*;

public class MyTankGame1 extends JFrame{

MyTankPanel mp = null;

public static void main(String[] args) {

MyTankGame1 mtg = new MyTankGame1();

}

public MyTankGame1() {

mp = new MyTankPanel();

this.add(mp);

this.setSize(400, 300);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

}

}

//定义一个坦克类

class Tank {

int x = 0;//坦克的横坐标

int y = 0;//坦克的纵坐标

public int getX() {

return x;

}

public void setX(int x) {

this.x = x;

}

public int getY() {

return y;

}

public void setY(int y) {

this.y = y;

}

public Tank(int x, int y) {

this.x = x;

this.y = y;

}

}

//我的坦克

class Hero extends Tank {

public Hero (int x, int y) {

super(x,y);

}

}

//我的面板

class MyTankPanel extends JPanel {

//定义一个我的坦克,因为所有坦克均在JPanel里面活动

Hero hero = null;

//构造函数

public MyTankPanel() {

hero = new Hero(10,10);

}

//覆盖paint函数

public void paint(Graphics g) {

super.paint(g);

g.fillRect(0,0,400,300);

this.drawTank(hero.getX(), hero.getY(), g, 0, 0);

}

//画出坦克的函数

public void drawTank(int x, int y, Graphics g,int direction, int type) {

//判断坦克类型

switch(type) {

case 0 :

g.setColor(Color.cyan);

break;

case 1 :

g.setColor(Color.yellow);

break;

}

//判断方向

switch(direction) {

//向上

case 0 :

g.fill3DRect(x,y,5,30,false);//true表示凸起,false表示凹进

g.fill3DRect(x+15, y, 5, 30,false);

g.fill3DRect(x+5, y+5, 10, 20,false);

// g.setColor(Color.red);

g.fillOval(x+5,y+10, 10, 10);

g.drawLine(x+10, y+15, x+10, y);

break;

}

}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: