我正在处理我的2D java游戏,我遇到了碰撞边界旋转的问题。
我有一个攻击等级:
public void render(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
AffineTransform old = g2d.getTransform();
g2d.rotate(Math.toRadians(player.getDir()), (double) player.getX() + 16, (double) player.getY() + 16);
g2d.setComposite(makeTransparent(alpha));
g.setColor(Color.gray);
g.fillRect((int) x, (int) y, 32, 32);
g2d.setComposite(makeTransparent(1));
g.setColor(Color.red); // drawing the results
g2d.draw(getBounds()); // drawing the getBounds();
g2d.setTransform(old);
}
private AlphaComposite makeTransparent(float alpha) {
int type = AlphaComposite.SRC_OVER;
return (AlphaComposite.getInstance(type, alpha));
}
public Rectangle getBounds() {
return new Rectangle((int) x, (int) y, (int) width + 32, (int) height + 32);
}
但在实践中它只会造成伤害"在角色的右边 - 就像没有旋转一样。我试图使用: https://stackoverflow.com/a/5925715/5502471 解决方案,但我有点失败,不知道我做错了什么。
几点提示:
攻击是一个单独的类,
攻击是由键盘输入的播放器类引起的,
碰撞发生在敌人的班级,
if (tempObject.getId() == ID.Attack){
if (getBounds().intersects(tempObject.getBounds())){
health-=3;
}
}
我正在寻找一些" easy"这样做的方式,因为我希望在许多事情中使用它;)如果没有简单的方法,那么艰难的方式也会这样做 - 接受挑战!
答案 0 :(得分:0)
我找到了一个非常简单的解决方案(某处在stackoverlow.com; P)。它并不完美,但是,至少它是有效的;)。只需使用一种方法来移动绘制矩形边界的起点。
public Rectangle getBounds() {
double newX = 0;
double newY = 0;
Rectangle attack = new Rectangle((int) newX, (int) newY, 32, 32);
double[] pt = { x, y };
AffineTransform
.getRotateInstance(Math.toRadians(player.getDir()), (double) player.getX(), (double) player.getY())
.transform(pt, 0, pt, 0, 1);
//playeer.getDir() - method to return the rotation angle in degress
newX = pt[0];
newY = pt[1];
attack = new Rectangle((int) newX, (int) newY, 32, 32);
return attack;
}
我希望你发现它很有用。干杯!