🎨绘画
🎡基本常识
要想开发坦克大战游戏,我觉得你要思考一以下几点👀👀👀:
- 制作界面
- 画出静态的坦克
以上两个问题就是本篇博文要带大家攻克的,要完成上面两个挑战,必须要先知道Java提供的一个工具类
JFrame 可以理解为框架
JPanel 可以理解为画板 如果想要在画 板上画东西肯定要有一个画画的方法 paint()
Graphics g 这个g就可以理解为画笔
🎩🎩🎩首先你要知道,画板应该是置于以一个框架为基础的上面,而画笔要画内容,必须在画板上画
- 🌲🌲🌲所以基于以上的小知识的讲述,我们就可以把框架大概的写出来了,通过代码来实现上面的类
public class Tank extends JFrame {
private Mypanel mp=null;
}
class Mypanel extends JPanel{
@Override
public void paint(Graphics g) {
super.paint(g);
}
}
-
刚才说过,想要制造页面的最基本的是要有一个框架,然后是画板,那么如何通过代码的形式把画板添加到框架里面呢?要弄清这个问题,我们要了解一下JFrame中几个方法
this.add(mp); 这个add方法就相当于把我们的画板 添加到框架中 this.setSize(1000,800); 这个是设置框架的大小的,默认颜色 是白的 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 这个方法是当我们点击退出界面使, 让JavaJVM虚拟机也自动关闭 this.setVisible(true); 这个方法就是让我们画板画的东西可见
🚡界面搭建
-
🌲🌲🌲有了上述的知识储备,我们就可以继续调整一下我们的界面构建
public class Tank extends JFrame { private Mypanel mp=null; public Tank(){ mp=new Mypanel(); this.add(mp); this.setSize(1000,800); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } public static void main(String[] args) { Tank tank = new Tank(); } } class Mypanel extends JPanel{ @Override public void paint(Graphics g) { super.paint(g); } }
- 这样一个基本的框架和面板的构建才算完成
🌌常见的图形画法
-
🌲🌲🌲接下来我们就可以简单的画一些图形了
- 画之前,我们要先知道一个小知识点,这个paint()方法是在每次界面刚打开,或者是面板重绘,或者是到时候键盘或者鼠标移动的时候都会被系统在自动的调用
- 画板的设定是左上角为原点,横轴为x轴,纵轴为y轴,通过我画的这张图片你应该会很清楚
public void paint(Graphics g) { super.paint(g); g.drawLine(10,10,50,50); 画直线 前两个参数是 x y 的起始位置 后两个参数是末点的 x y的位置 g.fillOval(20,20,30,30); 要画⚪你首先要直到一点 他这个⚪是画在一个矩形里面 这个是画⚪ 前两个参数是起始坐标 然后后两个参数必须要一样才确保画出的是一个⚪ g.setColor(Color.green); 设置画笔的颜色 g.drawString("Cx_330",100,100); 画出一个字符串 g.fill3DRect(110,110,60,60,false); 这个是要画出3D效果的矩形 后面的参数true或者false都可以 看各人的喜好而定 Image image=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/b3.jpg")); g.drawImage(image,250,250,100,200,this); 要画图片必须先创建一张图片 格式很固定,但是要注意一点的是你必须要把你的图片放在out目录下的你的模块的下一级目录。如果还是不明白的话看一下第一篇博客那个模块搭建的截图就明白了 }
🌏绘画坦克
🌲🌲🌲通过这张图片,你就可以知道,要画一个坦克其实很简单,只需要画出:
- 两个一样的矩形 当作轮胎
- 一个矩形当作壳子
- 一个圆形当作盖子
- 一个细线当作炮筒
- 得知了这些,那么在画的时候只需要搞懂每个图形的坐标,长度,宽度,那么你就可以轻松的画出一个坦克了,在画之前我建议先在纸上自己试着画一个坦克,标出对应的坐标然后再去用代码实现这样就会很简单了
- 🌲🌲🌲代码演示
drawTank(hero.getX(),hero.getY(),g,hero.getDirect(),0); --------------------------------------------------------------------------------- public void drawTank(int x,int y,Graphics g,int direct,int type){ //0我的坦克 1敌人坦克 switch (type){ case 0: g.setColor(Color.cyan); break; case 1: g.setColor(Color.green); break; } //方向 (w 0上 1d 2右 s 3下 a左) switch (direct){ case 0://👆 g.fill3DRect(x,y,10,60,false);//左轮 g.fill3DRect(x+30,y,10,60,false);//右轮 g.fill3DRect(x+10,y+10,20,40,false);//身体架子 g.fillOval(x+10,y+20,20,20);//盖子 g.drawLine(x+20,y,x+20,y+20);//炮筒 break; case 1://👉 g.fill3DRect(x,y,60,10,false);//左轮 g.fill3DRect(x,y+30,60,10,false);//右轮 g.fill3DRect(x+10,y+10,40,20,false);//身体架子 g.fillOval(x+20,y+10,20,20);//盖子 g.drawLine(x+60,y+20,x+20,y+20);//炮筒 break; case 2://👇 g.fill3DRect(x,y,10,60,false);//左轮 g.fill3DRect(x+30,y,10,60,false);//右轮 g.fill3DRect(x+10,y+10,20,40,false);//身体架子 g.fillOval(x+10,y+20,20,20);//盖子 g.drawLine(x+20,y+20,x+20,y+60);//炮筒 break; case 3://👈 g.fill3DRect(x,y,60,10,false);//左轮 g.fill3DRect(x,y+30,60,10,false);//右轮 g.fill3DRect(x+10,y+10,40,20,false);//身体架子 g.fillOval(x+20,y+10,20,20);//盖子 g.drawLine(x,y+20,x+20,y+20);//炮筒 break; } }