Java Swing游戏开发学习2

跟随大佬教程继续,图片资源,视频简介有下载链接。

这个文章是看视频教程写的,不算原创。有条件的可以去油管搜索RyiSnow,是一个游戏开发视频制作up主,讲解的非常基础,可以边看边实践,增加对Java SDK中游戏相关API的认识,能学到好多东西。

上一次实现了,一个游戏窗口,窗口添加了一个矩形方块,按w,s,a,d键,可以控制矩形移动;这一次将矩形改为一个player类,控制玩家移动。

添加玩家类

package entity;public class Player extends Entity {GamePanel gp;KeyHandler keyH;public Player(GamePanel gp, KeyHandler keyH) {this.gp = gp;this.keyH = keyH;setDefaultValues();getPlayerImage();direction = "down";}public void setDefaultValues() {x = 100;y = 100;speed = 4;}public void getPlayerImage() {try {up1 = ImageIO.read(getClass().getResourceAsStream("/player/boy_up_1.png"));up2 = ImageIO.read(getClass().getResourceAsStream("/player/boy_up_2.png"));down1 = ImageIO.read(getClass().getResourceAsStream("/player/boy_down_1.png"));down2 = ImageIO.read(getClass().getResourceAsStream("/player/boy_down_2.png"));left1 = ImageIO.read(getClass().getResourceAsStream("/player/boy_left_1.png"));left2 = ImageIO.read(getClass().getResourceAsStream("/player/boy_left_2.png"));right1 = ImageIO.read(getClass().getResourceAsStream("/player/boy_right_1.png"));right2 = ImageIO.read(getClass().getResourceAsStream("/player/boy_right_2.png"));} catch (IOException e) {e.printStackTrace();}}public void update() {if (keyH.upPressed || keyH.downPressed || keyH.leftPressed || keyH.rightPressed) {if (keyH.upPressed) {direction = "up";y -= speed;} else if (keyH.downPressed) {direction = "down";y += speed;} else if (keyH.leftPressed) {direction = "left";x -= speed;} else if (keyH.rightPressed) {direction = "right";x += speed;}spriteCounter++;if (spriteCounter > 12) {if (spriteNum == 1) {spriteNum = 2;} else if (spriteNum == 2) {spriteNum = 1;}spriteCounter = 0;}}}public void draw(Graphics2D g2) {
//        g2.setColor(Color.WHITE);
//        g2.fillRect(x, y, gp.tileSize, gp.tileSize);BufferedImage image = null;switch (direction) {case "up":if (spriteNum == 1) {image = up1;}if (spriteNum == 2) {image = up2;}break;case "down":if (spriteNum == 1) {image = down1;}if (spriteNum == 2) {image = down2;}break;case "left":if (spriteNum == 1) {image = left1;}if (spriteNum == 2) {image = left2;}break;case "right":if (spriteNum == 1) {image = right1;}if (spriteNum == 2) {image = right2;}break;}g2.drawImage(image, x, y, gp.tileSize, gp.tileSize, null);}
}

玩家添加图片资源、实现动画

在这里插入图片描述
按键动画效果
在这里插入图片描述

实现地图Background tiles(背景瓷砖或背景瓦片)

地图文件内容

1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 2 2 2 2 0 0 0 0 0 1
1 0 0 0 0 0 2 2 2 2 0 0 0 0 0 1
1 0 0 0 0 0 2 2 2 2 0 0 0 0 0 1
1 0 0 0 0 0 2 2 2 2 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

这里是通过文本文件存储数字,不同数字代表不同的瓷砖/瓦片,根据读取到的数字,绘制对应的瓷砖贴图实现的地图效果。1代表墙,2代表草地,3代表水

解析绘制的效果

在这里插入图片描述

动画演示

在这里插入图片描述

项目代码

参考gitee

https://gitee.com/ximen502/My2DGame

总结

代码运行后,按键开始有些卡顿,原因还没查找。虽然Java不擅长做游戏客户端,但还是能做的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/484170.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【EI会议征稿通知】第十届能源材料与环境工程国际学术会议(ICEMEE 2024)

第十届能源材料与环境工程国际学术会议(ICEMEE 2024) 2024 10th International Conference on Energy Materials and Environment Engineering 随着前9年的成功,ICEMEE在2024年迎来了第10届。很荣幸地宣布,第十届能源材料与环境…

Zabbix 6.2.1 安装

目录 1、监控介绍 监控的重要性 网站的可用性 监控范畴 如何监控 2、Zabbix 介绍 zabbix 简介 zabbix 主要功能 zabbix 监控范畴 Zabbix 监控组件 zabbix 常见进程 zabbix agentd 工作模式 zabbix 环境监控中概念 3、搭建LNMP 拓扑规划 安装MySQL 安装 Nginx …

怎么传输IT企业远程大量数据?

IT行业在远程数据传输方面面临着日益增长的需求。无论是进行项目合作、数据备份还是文件共享,远程传输大量数据已经成为日常工作的一个重要组成部分。然而,这一过程并非没有困难。在远程传输大量数据时,企业经常遇到传输速度缓慢、成本高昂以…

三、创建脚手架和脚手架分析

三、创建脚手架 一、环境准备 1、安装node.js **下载地址:**https://nodejs.org/zh-cn/界面展示 2、检查node.js版本 查看版本的两种方式 node -vnode -version 出现版本号则说明安装成功(最新的以官网为准) 3、为了提高我们的效率&…

⭐北邮复试刷题106. 从中序与后序遍历序列构造二叉树__递归分治 (力扣每日一题)

106. 从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7], postor…

Linux中安装Nginx及日常配置使用

高性能的http服务器/反向代理服务器。官方测试支持5万并发,CPU、内存等消耗较低且运行稳定 使用场景 Http服务器。 Nginx可以单独提供Http服务,做为静态网页的服务器。虚拟主机。 可以在一台服务器虚拟出多个网站。反向代理与负载均衡。 Nginx做反向代理…

【Spring Cloud】实现微服务调用的负载均衡

文章目录 什么是负载均衡自定义实现负载均衡启动shop-product微服务通过nacos查看微服务的启动情况自定义实现负载均衡 基于Ribbon实现负载均衡添加注解修改服务调用的方法Ribbon支持的负载均衡策略通过修改配置来调整 Ribbon 的负载均衡策略通过注入Bean来调整 Ribbon 的负载均…

Shader基础的简单实现(基于URP渲染)

一个模型是很多个顶点组成,顶点数据中包含坐标、法线、切线、UV坐标、顶点颜色等等组成。 URP(Universal Render Pipeline)通用渲染管线,是Unity在2019.3版本之后推出的一种新的渲染管线。传统的渲染管线在渲染多光源的情况,是把每一个主要光…

由面试题“Redis是否为单线程”引发的思考

👨‍🎓博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…

理论学习-ARM-内核

ARM内核 函数的调用加载、存储计算中断异常线程的切换注意事项参考文献 为了提高学习效率,我们要提前想好学习策略。 首先,使用频率越高的知识点,越要首先学习。假使,我们学习了一个知识点,能覆盖工作中80%的工作量&am…

大模型相关论文笔记

Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks 用于知识密集型NLP任务的检索增强生成 Facebook 2020 PDF CODE (论文代码链接已失效,以上是最新链接) 引言 大模型有幻觉问题(hallucinations)&…

【MATLAB源码-第143期】基于matlab的蝴蝶优化算法(BOA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境: MATLAB 2022a 1、算法描述 蝴蝶优化算法(Butterfly Optimization Algorithm, BOA)是基于蝴蝶觅食行为的一种新颖的群体智能算法。它通过模拟蝴蝶个体在寻找食物过程中的嗅觉导向行为以及随机飞行行为,来探索解空间&a…