Java模拟星空
目录
前言
JavaFX基础
1. GraphicsContext
2. AnimationTimer
代码实现
完整代码
前言
看了Python模拟星空很漂亮,Java也应该必须有一个!
环境:只需要JDK1.8就好!不需要外部包!!!
JavaFX基础
1. GraphicsContext
GraphicsContext是JavaFX中用于绘图的类,它是Canvas类的成员之一,可以通过Canvas的getGraphicsContext2D()方法获取。GraphicsContext提供了一组方法,用于绘制各种基本形状、图像、文本等。
GraphicsContext中常用的绘图方法如下:
- strokeRect():绘制一个空心矩形。
- fillRect():绘制一个实心矩形。
- strokeOval():绘制一个空心椭圆。
- fillOval():绘制一个实心椭圆。
- strokePolygon():绘制一个空心多边形。
- fillPolygon():绘制一个实心多边形。
- drawImage():绘制一张图像。
- strokeText():绘制一段空心文本。
- fillText():绘制一段实心文本。
- setLineWidth():设置线条宽度。
- setStroke():设置线条颜色。
- setFill():设置填充颜色。
- setFont():设置字体。
绘图的过程一般是先设置好绘图属性,比如线条宽度、颜色、填充等,然后调用GraphicsContext中的绘图方法进行绘制。
2. AnimationTimer
AnimationTimer是JavaFX中一个用于处理动画的类,它继承自抽象类AnimationTimer,需要实现handle(long now)方法。
使用AnimationTimer类处理动画的步骤如下:
- 创建AnimationTimer对象,重写handle(long now)方法。
- 在handle(long now)方法中更新动画状态,比如更新物体位置、角度等。
- 在handle(long now)方法结尾处调用自身,以实现动画的连续播放。
代码实现
用上面的 GraphicsContext 对象(画笔)绘制一个黑色背景画布,因为要做成动画所以要放到AnimationTimer 的handle方法里面,其余说明已经标好注释了:
完整代码
import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.stage.Stage;import java.util.Random;public class StarField extends Application {//类变量private static final int WIDTH = 800;private static final int HEIGHT = 600;private static final int STAR_NUMS = 100;private Star[] stars = new Star[STAR_NUMS];private Random random = new Random();public static void main(String[] args) {launch(args);}@Overridepublic void start(Stage primaryStage) throws Exception {Canvas canvas = new Canvas(WIDTH,HEIGHT);GraphicsContext gc = canvas.getGraphicsContext2D();for (int i = 0; i < STAR_NUMS; i++) {stars[i] = new Star(random.nextInt(WIDTH),random.nextInt(HEIGHT),random.nextDouble()*2+1);}AnimationTimer animationTimer = new AnimationTimer() {@Overridepublic void handle(long now) {gc.setFill(Color.BLACK); //设置画笔颜色gc.fillRect(0,0,WIDTH,HEIGHT); //填充满整个矩形画布for (Star star : stars){star.update();gc.setFill(Color.WHITE);gc.fillOval(star.getX(),star.getY(),star.getSize(),star.getSize());}}};Group group = new Group(canvas);Scene scene = new Scene(group);primaryStage.setScene(scene);primaryStage.show();animationTimer.start();}private class Star{//对象变量private double x;private double y;private double size;private double speed;public Star(double x,double y,double speed){this.x = x;this.y = y;this.size = random.nextDouble()*5+1;this.speed = speed;}public void update(){x -= speed; //控制星星向左移动if (x<0){x = WIDTH; //循环播放,每次出发点的y坐标发生变化y = random.nextInt(HEIGHT);}}public double getX() {return x;}public void setX(double x) {this.x = x;}public double getY() {return y;}public void setY(double y) {this.y = y;}public double getSize() {return size;}public void setSize(double size) {this.size = size;}public double getSpeed() {return speed;}public void setSpeed(double speed) {this.speed = speed;}}
}
相关文章:
Java模拟星空
目录 前言 JavaFX基础 1. GraphicsContext 2. AnimationTimer 代码实现 完整代码 前言 看了Python模拟星空很漂亮,Java也应该必须有一个! 环境:只需要JDK1.8就好!不需要外部包!!! Jav…...
YGG 代表 Web3 Gaming 参加 2023 年游戏开发者大会
Yield Guild Games(YGG)在 2023 年 3 月 20 日至 24 日在加州旧金山举行的游戏开发者大会(GDC)上大显身手,这是游戏开发者的重要交流学习活动。虽然 GDC 本身提供了多种多样的活动,包括讲座、小组讨论、圆桌…...
水库安全运行智慧管理平台解决方案筑牢防汛“安全墙”
解决方案 水库安全运行智慧管理系统解决方案,系统主要由降雨量监测站、水库水位监测站、大坝安全监测中的渗流量、渗流压力和变形监测站及视频和图像监测站等站点组成,同时建立规范、统一的监测平台,集数据传输、信息共享、数据储存于一体&a…...
Exchange升级部署方案
目录 前言 一、需求分析 二、升级前准备 1.备份当前 Exchange Server 数据...
AE开发之图层渲染20210603
AE开发之图层渲染比例符号化地图的整饰唯一值符号的符号化过程点符号设置,线符号设置标注图层,(写得不好,不推荐看) 唯一值符号化,字段进行设置,这里用到了UniqueValueRenderer接口,这里面有一…...
需要了解的过滤器
过滤器 1. 概念 过滤器: 从名字上理解就是对于事件的过滤操作,在web 中的过滤器,就是对于请求进行过滤操作,我们使用过滤器,就可以对于请求进行拦截操作,然后进行响应的处理操作,实现很多的特殊…...
VUE3的setup函数
文章目录 目录 文章目录 前言 一、setup函数是什么? 二、使用步骤 三、vue3中文文档和面向vue3的组件库 总结 前言 Vue3是一个面向数据驱动的渐进式JavaScript框架,其的设计理念包括简洁、灵活和高效。相比Vue2,Vue3的架构设计有很大的不同&…...
停车场管理系统文件录入(C++版)
❤️作者主页:微凉秋意 ✅作者简介:后端领域优质创作者🏆,CSDN内容合伙人🏆,阿里云专家博主🏆 文章目录一、案例需求描述1.1、汽车信息模块1.2、普通用户模块1.3、管理员用户模块二、案例分析三…...
线程(Thread)的三种等待唤醒机制详解
1、为什么需要线程的等待和唤醒 线程的等待唤醒机制是一种经典的“生产者和消费者”模型。例如食品加工厂,食品加工人员和原料补给人员,在有充足原料时,补给人员是在等待,等到原料不够时,食品加工人员通知补给人员&am…...
从零学习python - 13模块的导入与使用(实现单例模式)
模块基础知识 # 项目 > 包 > 模块 > 变量\方法\类 # 在python中,模块是代码组织的一种方式,把功能相近的函数或类放到一个文件中,一个文件(.py)就是一个模块,模块名就是文件名去掉py后缀. # 好处:提高代码可复用性和可维护性,一个模块编写完成后,很方便在其他项目中导…...
国产SSD、内存卷哭国外大厂,三星宣布减产涨价在路上了
PC 圈有一句话是这么说的:论价格屠夫还得看国产品牌! 可不是嘛,国产长鑫、长江算是彻底将全球存储芯片市场搅局者这一「骂名」坐实了! 不说特别早期,前几年吧,普通单条 8G DDR4 内存都能卖到六七百元&…...
数据库管理-第六十六期 SQL Domain(20230413)
数据库管理 2023-04-13第六十六期 SQL Domain1 基本介绍2 Domain的表达式和条件3 语法4 语义5 示例总结第六十六期 SQL Domain 上一期一笔带过了部分Oracle 23c的新特性,这一期重点讲一下SQL Domain新特性。 【https://docs.oracle.com/en/database/oracle/oracle-…...
《Vue3实战》 第一章 nods/npm安装、配置
1、nods.js安装(Windows) 1.1、下载并安装node https://nodejs.org/en/ , 安装到d盘nodejs目录 1.2、配置环境变量 path配置 1.3、配置全局包存放目录和缓存目录 在根目录下创建node_global(全局包存放目录)和node_cache&…...
JAVA练习104-四数相加 II
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、题目-四数相加 II 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示:这里可以添加本文要记录的大概内容: 4月10日练…...
【C++基础】引用(引用的概念;引用的特性;常引用;使用场景:做输出型参数、大对象传参、做输出型返回值、返回大对象的引用);引用和指针的区别)
六、引用 6.1 引用的概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。(语法上) 格式:类型& 引用变量名(对象名) …...
Redis只用来做缓存?来认识一下它其他强大的能力吧。
当今互联网应用中,随着业务的发展,数据量越来越大,查询效率越来越高,对于时序数据的存储、查询和分析需求也越来越强烈,这时候 Redis 就成为了首选的方案之一。 Redis 提供了多种数据结构,如字符串、哈希表…...
【ES】数据同步集群
【ES】数据同步&集群3.数据同步3.1.思路分析3.1.1.同步调用3.1.2.异步通知3.1.3.监听binlog3.1.4.选择3.2.实现数据同步3.2.1.思路3.2.2.导入demo3.2.3.声明交换机、队列1)引入依赖2)声明队列交换机名称3)声明队列交换机3.2.4.发送MQ消息…...
37岁男子不愿熬夜,回乡养鸡每天准时下班,青山绿水中养鸡,直播间里卖鸡蛋...
37岁男子不愿熬夜,回乡养鸡每天准时下班,青山绿水中养鸡,直播间里卖鸡蛋。今天和大家分享一个创业案例,他叫胡铭浩,来自安徽省旌德县,今年37岁,曾做过车床操作工,开过婚纱摄影店&…...
深度学习和人工智能之间是什么样的关系?
深度学习与人工智能概念的潜在联系,我们依然借助维恩图来说明,如图4.1所示。 1、人工智能 “人工智能”这个概念新鲜时髦但又含混模糊,同时包罗万象。尽管如此,我们仍尝试对 人工智能进行定义:用一台机器处理来自其周围环境的信息,然后将这些…...
实战打靶集锦-016-lampiao
提示:本文记录了博主打靶过程中一次曲折的提权经历 文章1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查4.1 80端口探查4.2 1898端口探查4.3 EXP搜索4.3.1 exploit/unix/webapp/drupal_coder_exec4.3.2 exploit/unix/webapp/drupal_drupalgeddon25. 提权5.1 系统信息…...
从赛博朋克到量子有机体,未来主义风格演进全图谱,深度解析MJ 5.2→6.2→NijiV6的渲染范式跃迁
更多请点击: https://intelliparadigm.com 第一章:赛博朋克到量子有机体:未来主义视觉范式的哲学跃迁 当霓虹雨巷中的义体少女凝视全息广告牌,她瞳孔倒映的已不仅是资本编码的欲望图景,而是意识与拓扑量子态耦合的初始…...
NocoDB企业数据管理平台:如何用可视化数据库解决业务协作难题
NocoDB企业数据管理平台:如何用可视化数据库解决业务协作难题 【免费下载链接】nocodb 🔥 🔥 🔥 A Free & Self-hostable Airtable Alternative 项目地址: https://gitcode.com/GitHub_Trending/no/nocodb 在数字化转型…...
JoyCon-Driver:让Switch手柄在Windows上重获新生的完整方案
JoyCon-Driver:让Switch手柄在Windows上重获新生的完整方案 【免费下载链接】JoyCon-Driver A vJoy feeder for the Nintendo Switch JoyCons and Pro Controller 项目地址: https://gitcode.com/gh_mirrors/jo/JoyCon-Driver 你是否曾经想过,让闲…...
LuaDec51终极指南:3步快速掌握Lua 5.1字节码反编译
LuaDec51终极指南:3步快速掌握Lua 5.1字节码反编译 【免费下载链接】luadec51 Lua Decompiler for Lua version 5.1 项目地址: https://gitcode.com/gh_mirrors/lu/luadec51 LuaDec51是一个强大的Lua 5.1字节码反编译工具,能够将编译后的Lua字节码…...
告别闪烁!用STM32和Multisim搞定LED PWM调光,从仿真到实战保姆级教程
从零构建无频闪LED调光系统:STM32硬件PWM与Multisim滤波电路全解析 当你在深夜伏案工作时,台灯突然出现肉眼可见的闪烁;当你在实验室观察培养样本时,光源的不稳定导致数据出现偏差——这些恼人的场景背后,往往隐藏着L…...
容器镜像深度分析:Quaid工具的设计原理与DevOps实践
1. 项目概述:Quaid,一个为现代开发者打造的容器镜像分析利器如果你和我一样,日常工作中需要频繁地处理Docker镜像,无论是进行安全审计、优化镜像体积,还是单纯地想搞清楚一个镜像里到底“藏”了什么,那你一…...
在Visual Studio 2022中搭建LVGL 8.3模拟器:从零开始的嵌入式GUI开发环境配置
1. 环境准备:搭建LVGL模拟器的基石 第一次接触嵌入式GUI开发时,我被各种硬件兼容性问题折磨得够呛。直到发现LVGL模拟器这个神器,才真正体会到"先模拟后部署"的开发乐趣。在Visual Studio 2022中配置LVGL 8.3模拟器,就…...
Zotero文献去重终极指南:3步快速清理重复文献库的完整教程
Zotero文献去重终极指南:3步快速清理重复文献库的完整教程 【免费下载链接】ZoteroDuplicatesMerger A zotero plugin to automatically merge duplicate items 项目地址: https://gitcode.com/gh_mirrors/zo/ZoteroDuplicatesMerger 在学术研究过程中&#…...
保姆级教程:用Python搞定安居客滑块验证码(附AES加密与轨迹生成源码)
Python实战:破解安居客滑块验证码的完整技术方案 滑块验证码已经成为现代网站反爬机制的重要组成部分。对于开发者而言,理解其工作原理并实现自动化解决方案,不仅能提升爬虫效率,也是技术能力的体现。本文将深入解析安居客滑块验证…...
AI插件模拟开发:从Claude假插件项目学习本地测试与安全研究
1. 项目概述:一个“伪装”的Claude插件仓库 最近在GitHub上闲逛,发现了一个挺有意思的仓库,名字叫 fake-claude-plugins 。光看这个标题,就让人忍不住想点进去看看葫芦里卖的什么药。这个项目由用户 Surendrakumawat992892 创…...
