Я новичок в Java-наследовании и пытаюсь создать игру.
В этой игре есть абстрактный класс игрового объекта, и я создал класс Enemy
, который расширяет его. Теперь я хочу добавить несколько типов врагов, чтобы расширить Enemy
. Я пытаюсь найти наиболее эффективный способ сделать это , однако я не могу понять, как дать подклассу final
свойства, которые могут использоваться super
, если это имеет смысл. Например, , я хочу, чтобы у всех врагов была скорость в направлении X и Y, но я хочу, чтобы у каждого типа врагов была своя собственная.
То, как я сейчас это делаю, в принципе бессмысленно, потому что даже если я создаю FastEnemy
, я должен поместить все это в конструктор при создании объекта. Это, наверное, действительно просто, я просто новичок и никогда не сталкивался с этим раньше.
package first.Game;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
public class Enemy extends GameObject{
private Handler handler;
private Color c;
private int eWidth, eHeight, speedX, speedY, x, y;
public Enemy(int x, int y, int eWidth, int eHeight, int speedX, int speedY, Color c, ID id, Handler handler)
{
super(x, y, id);
this.x = x;
this.y = y;
this.id = ID.Enemy;
this.c = c;
this.eWidth = eWidth;
this.eHeight = eHeight;
this.handler = handler;
this.speedX = speedX;
this.speedY = speedY;
}
public Rectangle getBounds()
{
return new Rectangle(x, y, eWidth, eHeight);
}
public void tick()
{
x += speedX;
y += speedY;
if(y <= 0 || y >= Game.HEIGHT - 48) speedY *= -1; //What can I do instead of 48?
if(x <= 0 || x >= Game.WIDTH - 32) speedX *= -1;
handler.addObject(new Trail(x, y, ID.Trail, c, eWidth, eHeight, 0.03f, handler));
}
public void render(Graphics g)
{
g.setColor(c);
g.fillRect(x, y, eWidth, eHeight);
}
}
package first.Game;
import java.awt.Color;
public class FastEnemy extends Enemy{
public FastEnemy(int x, int y, int eWidth, int eHeight, int speedX, int speedY, Color c, ID id, Handler handler)
{
super(x, y, eWidth, eHeight, speedX, speedY, c, id, handler);
}
}