当前位置:网站首页>用头像模仿天狗食月

用头像模仿天狗食月

2022-07-06 21:33:00 InfoQ

用头像模仿天狗食月

今天来了兴趣,用头像模仿了一下天狗食月,那么什么是天狗食月呢?

所谓天狗其实就是月食,以前古人不了解这个,所以说月亮被狗吃了,其实是自然界的一种现象,当太阳、地球、月亮三者恰好或几乎在同一条直线上时(地球在太阳和月球之间),太阳到月球的光线便会部分或完全地被地球掩盖,产生月食。

本文章主要用了Jpanel,那么什么是Jpanel呢?

JPanel 是 Java图形用户界面(GUI)工具包swing中的面板容器类,包含在javax.swing 包,可以加入到JFrame窗体中。JPanel默认的布局管理器是FlowLayout,其自身可以嵌套组合,在不同子容器中可包含其他组件(component),如JButton、JTextArea、JTextField 等,功能是对窗体上的这些控件进行组合。

本文主要用到的就是JPanel的paint方法,一看这个方法就是画画的意思。

代码展示:

import lombok.extern.slf4j.Slf4j;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.*;

/**
 * @Author xiepanpan
 * @Description //吃月亮
 * @Date 9:05 2021/9/8
 * @Param
 * @return
 **/
@Slf4j
public class XppMoonPanel extends JPanel{
 int x=700;
 public void startRun(){
 new Thread(){
 public void run(){
 while(true){
 //头像的横坐标坐标不断自增
 //这样去接近月亮和远离,造成天狗食月的效果
 for (int i=0;i<1024;i++){
 x++;
 if(x>1024){
 x=0;
 }
 }
 try {
 //让线程休眠10毫秒
 Thread.sleep(10);
 }
 catch (InterruptedException e) {
 log.info(&quot;&quot;,e);
 }
 //自动刷新屏幕,调用paint()方法
 repaint();
 }
 }
 }
 .start();
 }

 /*
 * @Author xiepanpan
 * @Description //开始画
 * @Date 9:01 2021/9/8
 * @Param [g]
 * @return void
 **/
 public void paint(Graphics g){
 super.paint(g);
 //天空颜色
 this.setBackground(Color.BLACK);

 //爱心星空
 g.setColor(Color.RED);
 for (int i = 0; i < 20; i++) {
 g.drawString(&quot;&quot;, (int) (Math.random() * 1024), (int) (Math.random() * 768));
 }

 //月亮
 g.setColor(Color.yellow);
 g.fillArc(500, 100, 200, 200, 0, 360);

 ImageIcon icon = new ImageIcon(&quot;D:\\1.png&quot;);
 //设置头像将去覆盖月亮
 g.drawImage(icon.getImage(),x,100,200,200,this);
 }
}

启动类:

import javax.swing.JFrame;

/**
 * @Author xiepanpan
 * @Description //启动
 * @Date 9:06 2021/9/8
 * @Param
 * @return
 **/
public class XppMoonFrame {

 public static void main(String[] args) {
 JFrame frame = new JFrame();
 frame.setSize(1024, 768);
 frame.setLocation(100, 100);
 XppMoonPanel panel = new XppMoonPanel();
 frame.add(panel);
 panel.startRun();
 frame.setVisible(true);
 }
}

下面我简单说一下大体思路,其实很简单:

  • 新建一个类继承Jpanel 重写它的paint方法
  • 方法里画天空 月亮和星星 然后加载一张图片 这种图片用来覆盖月亮
  • 然后不断改变图片的位置,,从而实现天狗食月的效果

最后我将效果图给大家展示一下:

null
效果图可以说是相当漂亮,快来试一试吧~,喜欢的朋友们给我点个赞再走哦,您的赞是我前进最大的动力的呢~ 哈撒尅!

️ 感谢大家

如果你觉得这篇内容对你挺有有帮助的话:

  • 欢迎关注我️,点赞,评论,转发
  • 关注
    盼盼小课堂
    ,定期为你推送好文,还有群聊不定期抽奖活动,可以畅所欲言,与大神们一起交流,一起学习。
原网站

版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://xie.infoq.cn/article/a21d8a51334e9e161ddb00982