手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏14之人身攻击范围指定与获取

简介: 手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏14之人身攻击范围指定与获取

冲突范围


GameObject.java

public abstract class GameObject{
    private Transform _transform;
    private double _z;
    private Shape _collideBox;
    private int _colliderX = 0;
    private int _colliderY = 0;
    private int _colliderXscale = 0;
    private int _colliderYscale = 0;
    public GameObject(Transform trans,
                      int hurtx, int hurty, int hurtscale_x, int hurtscale_y){
        _transform = trans;
        this.setCollider(hurtx, hurty, hurtscale_x, hurtscale_y);
    }
    public Transform getTransform(){
        return _transform;
    }
    public void move(double x,double y){
        _z += y;
        _transform.translate(x,y);
    }
    public Shape getHurtBox(){
        AffineTransform as = new AffineTransform();
        as.setTransform(_transform.getTransform());
        _collideBox = as.createTransformedShape(new Rectangle(_colliderX,_colliderY,_colliderXscale,
                                                            _colliderYscale));
        return _collideBox;
    }
    public void setCollider(int x1,int y1, int x2, int y2){
        _colliderX = x1;
        _colliderY = y1;
        _colliderXscale = x2;
        _colliderYscale = y2;
    }
    public abstract void update(Graphics2D g);
    public double getZ(){
        return _z;
    }
    public void setZ(double z){
        _z = z;
    }
    public double getX(){
        return _transform.getX();
    }
    public double getY(){
        return  _transform.getY();
    }
}

getHurtBox的createTransformedShape是一个重要的方法,有必要解释一下:作用是基于sprite当前位置获取传入参数指定的矩形。

很多实体都有一个HurtBox(伤害盒子,用于人身攻击,冲突检测),故我们定义个基类GameObject,里面有2个主要的方法:

setCollider用来设置盒子范围;

getHurtBox返回当前对象的伤害盒子

让Player继承GameObject

public class Player extends GameObject{
 public Player(Animator animator, int hurtx, int hurty, int hurtscale_x, int hurtscale_y){
        super(animator,hurtx,hurty,hurtscale_x,hurtscale_y);
        _animator = animator;
        _animator.setAnimation("idle");
    }

并在初始化时设置范围:

GameApp.java

Animator animator = new Animator(Config.PLAYER_JASMIN);
    _player = new Player(animator,60,44,18,98);

GameApp.java

我们可以通过调用以下方法,可视化player的被攻击范围

_gameLoop()

g.setColor(Color.red);
    g.draw(_player.getHurtBox());

如果您迷路了,请参考完整源码:


项目源码


项目源码


目录
相关文章
|
1天前
|
IDE Java API
Java游戏开发基础:从零开始制作一个简单的2D游戏
本文介绍了使用Java开发一个简单的2D避障游戏的基础流程。
28 10
|
1天前
|
Java 应用服务中间件 API
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
本文介绍了 Spring Boot 的核心概念和使用场景,并通过一个实战项目演示了如何构建一个简单的 RESTful API。
19 5
|
1天前
|
Java
Java实现贪吃蛇游戏
本文介绍了如何使用Java实现一个简单的贪吃蛇游戏。
23 4
|
1天前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
18 4
|
1天前
|
SQL Java API
|
1天前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
10 2
|
27天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
13天前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
15天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
72 17
|
26天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者