用头像模仿天狗食月
【摘要】 用头像模仿天狗食月今天来了兴趣,用头像模仿了一下天狗食月,那么什么是天狗食月呢?所谓天狗其实就是月食,以前古人不了解这个,所以说月亮被狗吃了,其实是自然界的一种现象,当太阳、地球、月亮三者恰好或几乎在同一条直线上时(地球在太阳和月球之间),太阳到月球的光线便会部分或完全地被地球掩盖,产生月食。 技术点本文章主要用了Jpanel,那么什么是Jpanel呢?JPanel 是 Java图形用户界...
用头像模仿天狗食月
今天来了兴趣,用头像模仿了一下天狗食月,那么什么是天狗食月呢?
所谓天狗其实就是月食,以前古人不了解这个,所以说月亮被狗吃了,其实是自然界的一种现象,当太阳、地球、月亮三者恰好或几乎在同一条直线上时(地球在太阳和月球之间),太阳到月球的光线便会部分或完全地被地球掩盖,产生月食。
技术点
本文章主要用了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("",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("❤", (int) (Math.random() * 1024), (int) (Math.random() * 768));
}
//月亮
g.setColor(Color.yellow);
g.fillArc(500, 100, 200, 200, 0, 360);
ImageIcon icon = new ImageIcon("D:\\1.png");
//设置头像将去覆盖月亮
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方法
- 方法里画天空 月亮和星星 然后加载一张图片 这种图片用来覆盖月亮
- 然后不断改变图片的位置,,从而实现天狗食月的效果
最后我将效果图给大家展示一下:
效果图可以说是相当漂亮,朋友们快来试一试吧~,喜欢的朋友们给我点个赞再走哦,您的赞是我前进最大的动力的呢~ 哈撒尅!
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)