I have a (turn-based) tile-based game, in which you can shoot at entities.
You can move around with mouse and keyboard, it's all tile-based, except that bullets move "freely".
I've got it all working just fine except that when I move, and the creatures shoot towards the player, they shoot towards the previous tiles.. resulting in ugly looking "miss hits" or lag.
I think I need to implement some kind of predictive firing based on the bullet speed and the distance, but I don't quite know how to implement such a thing...
Here's a simplified snip of my firing code.
class Weapon {
public void fire(int x, int y) {
...
...
...
Creature owner = getOwner();
Tile targetTile = Zone.getTileAt(x, y);
float dist = Vector.distance(owner.getCenterPosition(), targetTile.getCenterPosition());
Bullet b = new Bullet();
b.setPosition(owner.getCenterPosition());
// Take dist into account in the duration to get constant speed regardless of distance
float duration = dist / 600f;
// Moves the bullet to the centre of the target tile in the given amount of time (in seconds)
b.moveTo(targetTile.getCenterPosition(), duration);
// This is what I'm after
// Vector v = predict the position
// b.moveTo(v, duration);
Zone.add(bullet); // Now the bullet gets "ticked" and moveTo will be implemented
}
}
Movement of creatures is as simple as setting the position variable.
If you need more information, just ask.