Java Swing游戏开发学习20

内容来自RyiSnow视频讲解

这一节讲的是Monster野兽、就是常说的游戏中的怪,打怪升级的那个怪。

前言

本节目标

  • 实现怪
  • 处理碰撞和伤害(当玩家player碰到怪会掉血)

实现

添加怪到窗口

这里只使用了2张图片,每个方向移动都是用这2个图片的逐帧动画表示。移动逻辑同老人NPC。
在这里插入图片描述

检测碰撞

  在碰撞检测中实现了Entity之间的互相碰撞检测,这里有一个细节,就是由于npc和monster是数组,当调用checkEntity(Entity e, npc[]);checkEntity(Entity e, monster[])的方法进行判断的时候,要注意,要将数组中与e参数相等的元素排除掉,否则npc和monster将无法移动。

public int checkEntity(Entity entity, Entity[] target) {
	//...
	if (entity.solidArea.intersects(target[i].solidArea)) {
		//Removing this class from target
	    if (target[i] != entity) {//把自己从target数组中“移除”,大意为避免自己和自己碰撞
	        entity.collisionOn = true;
	        index = i;
	    }
	}
	//...
}

这一节修改了许多地方,去掉了很多冗余重复的逻辑,具体可以参考项目代码。

player receives damage玩家接收伤害

当玩家碰到Monster怪的时候,处理逻辑为生命值-1,后续会有更精确的伤害计算。

public class Player {
	public void update() {
	//...
		// check monster collision(player -> monsters)
	    int monsterIndex = gp.cChecker.checkEntity(this, gp.monster);
	    contactMonster(monsterIndex);
	    //... 
	}
	
	public void contactMonster(int i) {
		if (i != 999) {
	        // temp test, we will add more accurate calculate damage after attack,defense, equipment...
	        life -= 1;
	    }
	}
}

当玩家碰到怪,收到伤害后,会有1秒的无敌时间。不然每秒60帧,life每一帧-1,玩家很快就死了。具体可以参考项目代码。invincible无敌的。

怪碰到玩家

前面的逻辑当玩家原地不动,怪走过来碰到玩家,玩家并不会掉血,这里增加一下这个逻辑。
Entity增加一个type变量,2代表怪。这个2硬编码后续会修改。临时用一下。

public class Entity {	
	public void update() {
        //......
        boolean contactPlayer = gp.cChecker.checkPlayer(this);

        //2 means monster
        if (this.type == 2 && contactPlayer) {
            if (!gp.player.invincible) {
                // we can give damage
                gp.player.life -= 1;
                gp.player.invincible = true;
            }
        }
	}
}
  • 效果
    在这里插入图片描述

无敌状态增加视觉效果

public class Player {
	public void draw(Graphics2D g2) {
//	...
		if (invincible) {
	        g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f));
	        }
	    g2.drawImage(image, screenX, screenY, null);
	
	    // Reset alpha
	    g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f));
    }
}

当玩家被攻击或碰到怪,掉血的时候会进入无敌状态,有一个半透明效果。替代前面的显示无敌帧数的调试信息。
在这里插入图片描述

下一节讲Player攻击Monster

代码

参考第6篇文章最后,可以使用git clone或直接下载获得完整项目

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言用if语句设计选择结构程序

在C语言中,if语句是一种常用的选择结构语句,用于根据条件选择性地执行不同的代码块。if语句的设计使得程序可以根据条件的真假进行分支控制,从而实现灵活的程序逻辑。本文将深入介绍C语言中如何使用if语句设计选择结构程序,包括if…

激光焊接机在不锈钢三角阀制造中的应用与发展

不锈钢三角阀激光焊接机是一种专门用于焊接不锈钢三角阀的高效、精准设备。这种设备在不锈钢三角阀的制造过程中起到了至关重要的作用,其应用主要体现在以下几个方面: ​ 一、激光焊接机在不锈钢三角阀制造中的应用 激光焊接机以其独特的优势&#xff…

金属板材成型仿真软件 Altair® Inspire™ Form,完整的冲压仿真环境

Inspire Form 是一个完整的冲压仿真环境,产品设计师和工艺工程师可以使用该环境,有效地优化设计、对稳健的制造进行仿真、降低材料成本。 借助快速简便的可行性模块,用户可以在几秒钟内完成零部件分析,从而在产品开发早期阶段预测…

李宏毅【生成式AI导论 2024】第6讲 大型语言模型修炼_第一阶段_ 自我学习累积实力

背景知识:机器怎么学会做文字接龙 详见:https://blog.csdn.net/qq_26557761/article/details/136986922?spm=1001.2014.3001.5501 在语言模型的修炼中,我们需要训练资料来找出数十亿个未知参数,这个过程叫做训练或学习。找到参数后,我们可以使用函数来进行文字接龙,拿…

【Pt】马灯贴图绘制过程 02-制作锈迹

目录 一、边缘磨损效果 二、刮痕效果 三、边缘磨损与刮痕的混合 四、锈迹效果 本篇效果: 一、边缘磨损效果 将智能材质“Iron Forge Old” 拖入图层 打开“Iron Forge Old” 文件夹,选中“Sharpen”(锐化),增大“…

fpga 通过axi master读写PS侧DDR的仿真和上板测试

FPGA和ARM数据交互是ZYNQ系统中非常重要的内容。PS提供了供FPGA读写的AXI-HP接口用于两者的高速通信和数据交互。一般的,我们会采用AXI DMA的方式去传输数据,DMA代码基本是是C编写,对于FPGA开发者来说不利于维护和debug。本文提供一种手写AXI…

《思考,快与慢》揭示了决策过程中直觉反应与理性分析的关系 - 三余书屋 3ysw.net

思考,快与慢 你好,今天我们要分享的是《思考,快与慢》。作者是丹尼尔卡尼曼,2002年诺贝尔经济学奖获得者。他开辟了经济学中的一个新分支——行为经济学。在《思考,快与慢》这部作品中,他深入探讨了行为经…

JVM篇详细分析

JVM总体图 程序计数器: 线程私有的,每个线程一份,内部保存字节码的行号,用于记录正在执行字节码指令的地址。(可通过javap -v XX.class命令查看) java堆: 线程共享的区域,用来保存对…

搭建企业微信知识库,这些注意事项你必须知道

| 企业微信知识库是什么? 简单来说,企业微信知识库就是一个集中存储、管理和分享企业内部信息的置于企业微信中的系统。你可以把它想象成一个超级大的“资料库”,里面装满了公司的各种知识、文档、流程、经验等等。这个“资料库”不仅方便员工…

劳保鞋厂家与您聊聊:从事电力行业工作人员穿什么功能的劳保鞋

电力行业属于危险系数较高的行业,工作人员在工作中面临电力的潜在危险,如电击、高温、机械伤害、高空作业等风险。这就要有专业的安全设备,才能尽可能的保护电力工作人员的安全,真真正正起到防范的作用。因此,穿着合适…

学习或复习电路的game推荐:nandgame(NAND与非门游戏)、Turing_Complete(图灵完备)、logisim工具

https://www.nandgame.com/ 免费 https://store.steampowered.com/app/1444480/Turing_Complete/ 收费,70元。据说可以导出 Verilog ! logisim及其衍生版本 都需要安装java环境。 http://www.cburch.com/logisim/ 是原版, 下载页面&#…

Java的静态代理与jdk动态代理

代理 我们经常利用代理进行解耦以及控制对实际对象的访问等工作。例如,我们可以通过代理对方法的调用进行更精细的控制(例如加上日志、权限控制等),而无需修改实际对象的代码。代理的作用是无侵入式的给代码增加功能。有些事情是…

【分布式】——CAPBASE理论

CAP&BASE理论 ⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记链接👉https://github.com/A-BigTree/tree-learning-notes ⭐⭐⭐⭐⭐⭐ Spring专栏👉https://blog.csdn.net/weixin_53580595/category_12279588.html Sprin…

物联网实战--入门篇之(一)物联网概述

目录 一、前言 二、知识梳理 三、项目体验 四、项目分解 一、前言 近几年很多学校开设了物联网专业,但是确却地讲,物联网属于一个领域,包含了很多的专业或者说技能树,例如计算机、电子设计、传感器、单片机、网…

C++万物起源:类与对象(二)

一、类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗? 并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员 函数。 默认成员函数:用户没有显式实现,…

DataX-Oracle新增writeMode支持update

目录 前言 第一步下载源码 第二步修改源码 1、Oraclewriter 2、WriterUtil 2.1、修改getWriteTemplate方法 2.2、新增onMergeIntoDoString与getStrings方法 3、CommonRdbmsWriter 3.1、修改startWriteWithConnection 3.2、修改doBatchInsert 3.3、修改fillPreparedStatem…

红酒:红酒分类与消费者教育的重要性

在红酒的世界里,品种繁多,口感各异。对于消费者而言,了解红酒的分类以及接受相关的消费者教育至关重要。云仓酒庄雷盛红酒作为业界的持续发展者,深知这一点,致力于为消费者提供品质的教育内容,帮助他们更好…

Verilog语法之case语句学习

case分支语句是一种实现多路分支控制的分支语句。与使用if-else条件分支语句相比,采用case分支语句来实现多路控制会变得更加的方便直观。 case分支语句通常用于对微处理器指令译码功能的描述以及对有限状态机的描述。Case分支语句有“case”、“casez”、“casex”…

MybatisPlus学习总结

MybatisPlus.xmind 一、MybatisPlus快速入门 1.基本介绍 官网: 简介 | MyBatis-Plus MyBatis Plus是一个基于MyBatis的增强工具,它简化了MyBatis的使用,提供了一系列的增强功能,使开发更加方便快捷。 MyBatis Plus的主要特点包括&#xff…

3月23日笔记

广播域与泛洪范围是相同的 广播:在同一个泛洪范围内,强迫交换机泛洪(主动) 泛洪(被动) ARP的工作原理:ARP先通过广播发送请求包,所有收到该广播包的设备都会将其中的源IP和源MAC相…