Java 碰撞边界的旋转
我正在做我的2D java游戏,我有一个关于碰撞边界旋转的问题 我有一门攻击课:Java 碰撞边界的旋转,java,collision,Java,Collision,我正在做我的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.
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);
}
但在实践中,它只会对角色右侧造成“伤害”——就像没有旋转一样。我试图使用:
解决方案,但我有点失败了,不确定我做错了什么
几点提示:
- 攻击是一个单独的类
- 攻击是由玩家类通过键盘输入引起的
- 碰撞发生在敌方舱内
if (tempObject.getId() == ID.Attack){ if (getBounds().intersects(tempObject.getBounds())){ health-=3; } }
我一直在寻找一些“简单”的方法来做这件事,因为我希望在很多事情上使用它;)如果没有简单的方法,那么困难的方法也可以-接受挑战 我找到了一个非常简单的解决方案(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;
}
我希望你发现它有用。干杯