【发布时间】:2015-10-11 17:54:10
【问题描述】:
所以我试图在屏幕上鼠标位置指示的方向上移动弹丸。我已经将鼠标坐标转换为游戏中的坐标,但是我无法弄清楚如何正确地将弹丸移动到正确的方向。我正在尝试使用坡度来移动弹丸,但它似乎不想抓住正确的坡度,所以我最终让它们以完全错误的方向飞行。这是我正在使用的一些代码。 对此的任何帮助将不胜感激,因为我在这方面有点过头了。
注意:弹丸不会跟随鼠标。它应该保存坐标,然后朝那个方向前进,注意它也可以以相同的速度经过给定的坐标。
实体创建
int[] mousePos = MouseManager.getCalculatedMouseCoordinates();
float deltaX = mousePos[0] - GameManager.x;
float deltaY = mousePos[1] - GameManager.y;
float m = deltaY/deltaX;
System.out.println(m);
GameManager.currentWorld.addEntity(new EntityProjectile(GameManager.x, GameManager.y, 30, m, 50, "fireball"));
射弹类
package UnNamedRpg.Player.Entity;
public class EntityProjectile {
private double x, y;
private int entityID = -1;
private int speed;
private double headerX, headerY;
private int renderHeading;
private double range, currentRange = 0;
private String texture;
private double factor = -1;
public EntityProjectile(double startX, double startY, int speed, double headerX, double headerY, double range, String texture){
setX(startX);
setY(startY);
setSpeed(speed);
setHeaderX(headerX);
setHeaderY(headerY);
setTexture(texture);
setRange(range);
}
public void doTick(){
double vx = this.x - this.headerX;
double vy = this.y - this.headerY;
if(this.factor == -1){
double length = Math.sqrt((vx*vx) + (vy*vy));
double factor = this.speed / length;
this.factor = factor;
}
vx *= factor;
vy *= factor;
this.x = vx;
this.y = vy;
}
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
public int getRenderHeading() {
return renderHeading;
}
public void setRenderHeading(int renderHeading) {
this.renderHeading = renderHeading;
}
public int getEntityID() {
return entityID;
}
public void setEntityID(int entityID) {
this.entityID = entityID;
}
public double getX() {
return x;
}
public void setX(double x) {
this.x = x;
}
public double getY() {
return y;
}
public void setY(double y) {
this.y = y;
}
public String getTexture() {
return texture;
}
public void setTexture(String texture) {
this.texture = texture;
}
public double getRange() {
return range;
}
public void setRange(double range) {
this.range = range;
}
public double getCurrentRange() {
return currentRange;
}
public void setCurrentRange(double currentRange) {
this.currentRange = currentRange;
}
public double getHeaderX() {
return headerX;
}
public void setHeaderX(double headerX) {
this.headerX = headerX;
}
public double getHeaderY() {
return headerY;
}
public void setHeaderY(double headerY) {
this.headerY = headerY;
}
public double getFactor() {
return factor;
}
public void setFactor(double factor) {
this.factor = factor;
}
}
更新位置方法
--现在在 EntityProjectile 类中调用每个刻度,而不是在世界刻度中发生。
【问题讨论】:
-
应该有-吗?在 ent.getDirection 旁边;?除了极化你试图摆脱的答案之外,它似乎没有做任何事情。
-
我用来将斜率从 0 更改为 1,而 -direction 是我可以让它在我的设置测试中正常工作的唯一方法。
-
我看到斜坡是的。你能告诉我更多关于你的问题吗?
-
我注意到你从不改变方向。你知道
setDirection()甚至没有被使用吗?
标签: java 2d lwjgl motion projectile