gpt4 book ai didi

Java继承问题-如何更改super中所需的每个子类的属性

转载 作者:行者123 更新时间:2023-12-02 13:41:25 25 4
gpt4 key购买 nike

我是java继承的新手,我一直在尝试创建一个游戏。

这个游戏有一个游戏对象抽象类,我创建了一个扩展它的 Enemy 类。现在我想添加多种类型的敌人来扩展 Enemy。我正在尝试找到最有效的方法来执行此操作,但是我无法弄清楚如何为子类提供可以由super使用的final属性 如果这是有道理的。 例如,我希望所有敌人在 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);
}
}

最佳答案

摘自您的评论

handler.addObject(new BasicEnemy(r.nextInt(WIDTH - 64), r.nextInt(HEIGHT - 64), 16, 16, 5, 5, Color.red, ID.Enemy, handler)); This is what I have to do right now. But if I have to give them all those sizes everytime… then really there is no difference between the different types of enemies. It is just an enemy that I have to manually change everytime I create one.

如果速度和大小的值是常量并且该值取决于敌人类型,则可以将其放置在类本身中。您仅将其他变量作为参数。

public class FastEnemy extends Enemy {

public FastEnemy(int x, int y, Color c, ID id, Handler handler)
{

super(x, y, 16, 16, 5, 5, c, id, handler);
}
}

您也可以用相同的方式初始化ColorID(如果它们是常量)

关于Java继承问题-如何更改super中所需的每个子类的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59441938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com