gpt4 book ai didi

java - 扩展类的问题

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

我正在制作《时空幻境》。我有一个类 Wall 可以防止物体进入墙壁。Wall 的一切都正常。但现在我正尝试对天花板做同样的事情。我的天花板类扩展了Wall。我只是做了一个这样的构造函数:

public Ceiling(boolean deadly, int[] xPositions, int[] yPositions)
{
super(deadly,
Direction.Down, //Enum: the direction you have to leave the wall (Left, Right)
//Here of course down
xPositions, yPositions);
}

现在,我的关卡类中有一个包含所有墙壁的 ArrayList 和一个包含所有天花板的 ArrayList。我必须以这种方式添加墙:

walls.add(new Wall(false, Direction.Right, ..., ...));

这边的天花板:

ceilings.add(new Ceiling(false, ..., ...));

... 替换坐标。

如果我检查天花板中是否有物体:什么也没有发生:物体穿过天花板。如果我使用这种方式添加天花板,它会起作用:

ceilings.add(new Wall(false, Direction.Down, ..., ...));

我希望我已经解释得很好了。有人知道问题出在哪里吗?

谢谢

编辑:

这是我的碰撞代码:

public boolean intersects(Rectangle r)
{
if (!bounds.intersects(r))
{
return false;
}
for (int i = 1; i < yPositions.length; i++) {
Line l = new Line(xPositions[i - 1], yPositions[i - 1], xPositions[i], yPositions[i]);
if (r.intersectsLine(l)) {
return true;
}
}
return false;
}

我的代码

<小时/>' doodelijk' 意味着致命

墙:

package levels;

import domein.Direction;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;

public class Wall
{

public boolean doodelijk;
public int[] yPositions;
public int[] xPositions;
private Rectangle bounds;
public Direction directionToLeave;

public Wall(boolean doodelijk, Direction directionToLeave, int[] yPositions, int[] xPositions)
{
this.doodelijk = doodelijk;
this.yPositions = yPositions;
this.xPositions = xPositions;
this.directionToLeave = directionToLeave;
createRectangle();
}

public boolean intersects(Rectangle r)
{
if (!bounds.intersects(r))
{
return false;
}
for (int i = 1; i < yPositions.length; i++) {
Line l = new Line(xPositions[i - 1], yPositions[i - 1], xPositions[i], yPositions[i]);
if (r.intersectsLine(l)) {
return true;
}
}
return false;
}

private void createRectangle()
{
int x = Integer.MAX_VALUE;
int y = Integer.MAX_VALUE;
int x1 = 0;
int y1 = 0;
for (int i = 0; i < xPositions.length; i++)
{
int tx = xPositions[i];
int ty = yPositions[i];
if (x > tx)
{
x = tx;
}
if (y > ty)
{
y = ty;
}
if (x1 < tx)
{
x1 = tx;
}
if (y1 < ty)
{
y1 = ty;
}
}
bounds = new Rectangle(x, y, x1 - x + 1, y1 - y +1);
System.out.println("Rect: " + bounds);
}

class Line extends Line2D
{

Point2D p1;
Point2D p2;

public Line()
{
p1 = new Point();
p2 = new Point();
}

public Line(Point2D p1, Point2D p2)
{
this.p1 = p1;
this.p2 = p2;
}

public Line(double X1, double Y1, double X2, double Y2)
{
this();
setLine(X1, Y1, X2, Y2);
}

@Override
public double getX1()
{
return p1.getX();
}

@Override
public double getY1()
{
return p1.getY();
}

@Override
public Point2D getP1()
{
return p1;
}

@Override
public double getX2()
{
return p2.getX();
}

@Override
public double getY2()
{
return p2.getY();
}

@Override
public Point2D getP2()
{
return p2;
}

@Override
public void setLine(double X1, double Y1, double X2, double Y2)
{
p1.setLocation(X1, Y1);
p2.setLocation(X2, Y2);
}

public Rectangle2D getBounds2D()
{
return new Rectangle((int) getX1(), (int) getY1(), (int) (getX2() - getX1()), (int) (getX2() - getY1()));
}
}

public void setXpositions(int ... xPos)
{
this.xPositions = xPos;
}

public void setYpositions(int ... yPos)
{
this.yPositions = yPos;
}

public void setPositions(int[] yPos, int[] xPos)
{
setXpositions(xPos);
setYpositions(yPos);
}
}

天花板:

package levels;

import domein.Direction;


public class Ceiling extends Wall
{
public Ceiling(boolean doodelijk, int[] xPositions, int[] yPositions)
{
super(doodelijk, Direction.Down, yPositions, xPositions);
}
}

最佳答案

您确定 xposition 和 yposition 参数的设置吗?也就是说,天花板真的在你想象的地方吗?您的构造函数的两个变体是否相同?

关于java - 扩展类的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1357169/

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