java多线程正在旋转的,java - 图像旋转经常发生 - 堆栈内存溢出

在创建塔防游戏原型时,遇到箭头过度旋转的问题。箭头在生成后持续旋转,而应只根据目标怪物的位置进行微调。代码中已设置箭头旋转角度,但在逻辑更新调用中,箭头不断根据目标位置重新计算旋转,导致过度旋转。为修复此问题,需要调整逻辑以限制箭头的旋转更新。
摘要由CSDN通过智能技术生成

我正在为塔防游戏创建原型。 现在,我正在闯入一些箭头(例如以后从塔楼发射的子弹),这些箭头应指向周围跑来跑去的怪物的中心。 我设法在第一个逻辑调用中相应地设置了旋转角度,但是我不知道如何更改代码以防止发生以下情况: http : //recordit.co/jBdXtGGeN8

简而言之:箭头会一直旋转,即使它应该旋转后才生成,然后只旋转较小的值即可适应移动的怪物。

箭头的构造函数:

public Shot(Vector2 position, EntityV2 target) {

this.sprite = SpriteStore.get().getSprite("resources/sprites/arrowShot.png");

this.position = position;

this.targetEntity = target;

this.rotation = Math.atan2(targetEntity.getBounds().getCenterY()

- position.getY(), targetEntity.getBounds()

.getCenterX() - position.getX());

this.rotation += Math.PI / 2.0;

this.angle = Math.toDegrees(rotation);

this.movementVector = new Vector2();

bounds = new Rectangle((int) position.getX(), (int) position.getY(), sprite.getWidth(), sprite.getHeight());

}

逻辑更新调用:

public void move(float delta) {

position.add((movementVector.getX() * delta) / 1000, (movementVector.getY() * delta) / 1000);

if(targetEntity.getBounds().contains(position.getX(), position.getY())) {

isDone = true;

}

bounds.setLocation((int) position.getX(), (int) position.getY());

rotation = Math.atan2(targetEntity.getBounds().getCenterY()

- position.getY(), targetEntity.getBounds()

.getCenterX() - position.getX());

rotation += Math.PI / 2.0;

angle = Math.toDegrees(rotation);

calculateMovementVector(targetEntity.getCenter());

}

渲染调用:

public void draw(Graphics2D g) {

int x = (int) position.getX() + sprite.getWidth()/2;

int y = (int) position.getY() + sprite.getHeight()/2;

g.rotate(angle, x, y);

sprite.draw(g, (int) position.getX(), (int) position.getY());

g.rotate(-angle, x, y);

}

我计算运动向量的方式(应用于位置):

private void calculateMovementVector(Vector2 to) {

float dX = to.getX() - (float) bounds.getCenterX();

float dY = to.getY() - (float) bounds.getCenterY();

float distance = (float) Math.sqrt(dX * dX + dY * dY);

float sX = speed * dX / distance;

float sY = speed * dY / distance;

movementVector.set(sX, sY);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值