手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏15之拳击范围

简介: 手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏15之拳击范围

攻击范围


AttackAbleObject.java

package character;
import sprite.Transform;
import java.awt.*;
import java.awt.geom.AffineTransform;
public abstract class AttackAbleObject extends GameObject{
    private Transform _transform;
    private int _cx1;
    private int _cx2;
    private int _cy1;
    private int _cy2;
    public AttackAbleObject(Transform trans,
                            int hurt_x, int hurt_y, int hurtscale_x, int hurtscale_y, int hitoffset_x1,
                            int hitoffset_y1, int hitoffset_x2, int hitoffset_y2) {
        super(trans,hurt_x,hurt_y,hurtscale_x, hurtscale_y);
        _transform = trans;
        this.setHitBoxOffsets(hitoffset_x1,hitoffset_y1,hitoffset_x2,hitoffset_y2);
    }
    public Shape getHitBox(){
        AffineTransform as = new AffineTransform();
        as.setTransform(_transform.getTransform());
        return as.createTransformedShape(new Rectangle(_cx1,_cy1,_cx2,_cy2));
    }
    public void setHitBoxOffsets(int x1,int y1, int x2, int y2){
        _cx1 = x1;
        _cx2 = x2;
        _cy1 = y1;
        _cy2 = y2;
    }
}

Player.java继承AttackAbleObject,在构造函数中传入player的攻击范围参数(最后4个参数)

public class Player extends AttackAbleObject{
    public Player(Animator animator, int hurtx, int hurty, int hurtscale_x, int hurtscale_y
            , int hitoffset_x1, int hitoffset_y1, int hitoffset_x2, int hitoffset_y2){
        super(animator,hurtx,hurty,hurtscale_x,hurtscale_y
                ,hitoffset_x1,hitoffset_y1,hitoffset_x2,hitoffset_y2);
}

最后GameApp.java中,player的构造方式改为如下:

_player = new Player(animator,60,44,18,98
                    ,65,60,50,11);

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

g.draw(_player.getHitBox());

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


项目源码


项目源码

目录
相关文章
|
6天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
35 3
|
3天前
|
人工智能 安全 Java
Java8 - LocalDateTime时间日期类使用详解
Java8 - LocalDateTime时间日期类使用详解
|
4天前
|
安全 Java 程序员
|
4天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
5天前
|
Java
Java Class类
Java Class类
8 0
|
9天前
|
IDE Java 数据库连接
使用 Java 进行桌面应用开发
【4月更文挑战第19天】Java 是一款广泛应用于企业级、网络和桌面应用开发的编程语言。其跨平台特性使Java程序能在不同操作系统上运行,而JDK提供了开发所需工具和库。使用Swing等GUI库构建用户界面,结合JDBC进行数据库操作,Socket实现网络通信。虽然面临性能和用户体验的挑战,但通过优化和选用合适的IDE,Java仍能开发出高效稳定的桌面应用。
|
9天前
|
前端开发 Java Go
开发语言详解(python、java、Go(Golong)。。。。)
开发语言详解(python、java、Go(Golong)。。。。)
|
20天前
|
Java
Java中的多线程实现:使用Thread类与Runnable接口
【4月更文挑战第8天】本文将详细介绍Java中实现多线程的两种方法:使用Thread类和实现Runnable接口。我们将通过实例代码展示如何创建和管理线程,以及如何处理线程同步问题。最后,我们将比较这两种方法的优缺点,以帮助读者在实际开发中选择合适的多线程实现方式。
24 4
|
3月前
|
存储 Java 数据库连接
Java 编程问题:七、Java 反射类、接口、构造器、方法和字段4
Java 编程问题:七、Java 反射类、接口、构造器、方法和字段
25 0
|
8月前
|
安全 Java 开发者
【Java|多线程与高并发】JUC中常用的类和接口
JUC是Java并发编程中的一个重要模块,全称为Java Util Concurrent(Java并发工具包),它提供了一组用于多线程编程的工具类和框架,帮助开发者更方便地编写线程安全的并发代码。