沖突范圍
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當(dāng)前位置獲取傳入?yún)?shù)指定的矩形。
很多實體都有一個HurtBox(傷害盒子,用于人身攻擊,沖突檢測)岸夯,故我們定義個基類GameObject颠印,里面有2個主要的方法:
setCollider用來設(shè)置盒子范圍昧诱;
getHurtBox返回當(dāng)前對象的傷害盒子
讓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");
}
并在初始化時設(shè)置范圍:
GameApp.java
Animator animator = new Animator(Config.PLAYER_JASMIN);
_player = new Player(animator,60,44,18,98);
GameApp.java
我們可以通過調(diào)用以下方法,可視化player的被攻擊范圍
_gameLoop()
g.setColor(Color.red);
g.draw(_player.getHurtBox());
如果您迷路了潭辈,請參考完整源碼: