Erstmal die 2 wichtigen Klassen:
Game:
Player:
Aus irgendeinem Grund "springen" diese 2 Blöcke, obwohl sie eigentlich flüssig laufen sollten.
Es muss wohl irgendwas komisch gerundet sein, vllt. kann mir mal ein Erfahrener was dazu sagen.
Bin planlos, da ich es noch nie geschafft habe durch diese "Zeit" eine flüssige und gleichmäßige Bewegung hinzubekommen Hoffe ihr könnt mir sagen, wie man das hinbekommt.
Voller Code mit allen Klassen im Anhang, danke.
Game:
Java:
public class Game extends RenderContext {
private Player player;
private CopyOnWriteArrayList<Block> blocks;
public Game(int width, int height) {
super(width, height);
player = new Player(0, 0, 50, 50);
blocks = new CopyOnWriteArrayList<Block>();
blocks.add(new Block(50, 50));
blocks.add(new Block(-50, -50));
}
public void update(float time) {
player.update(time);
}
@Override
public void paint(Graphics g) {
g.setColor(Color.black);
int playerX = player.getX()-player.getScreenX(), playerY = player.getY()-player.getScreenY();
for(Block block : blocks)
g.drawRect(block.getX()-playerX, block.getY()-playerY, Block.getWidth(), Block.getHeight());
g.drawRect(player.getScreenX(), player.getScreenY(), player.getWidth(), player.getHeight());
}
}
Player:
Java:
public class Player {
private Rectangle bounds;
private int screenX, screenY;
private float x, y, speed;
public Player(int x, int y, int width, int height) {
double f = RenderContext.getFactor();
bounds = new Rectangle((int) (x*f), (int) (y*f), (int) (width*f), (int) (height*f));
this.x = bounds.x;
this.y = bounds.y;
screenX = (int) (f*1920d/2d-bounds.width/2d);
screenY = (int) (f*1080d/2d-bounds.height/2d);
speed = (float) (300d * f);
}
public void update(float time) {
float diffX = RenderContext.getMouseX()-screenX-bounds.width/2, diffY = RenderContext.getMouseY()-screenY-bounds.height/2,
degrees = (float) Math.toDegrees(Math.atan2(diffY, diffX));
if(degrees < 0)
degrees+=360;
if(Keyboard.isKeyDown(KeyEvent.VK_W)) {
x+=Math.cos(Math.toRadians(degrees)) * speed * time;
y+=Math.sin(Math.toRadians(degrees)) * speed * time;
}
bounds.x = (int) x;
bounds.y = (int) y;
}
}
Aus irgendeinem Grund "springen" diese 2 Blöcke, obwohl sie eigentlich flüssig laufen sollten.
Es muss wohl irgendwas komisch gerundet sein, vllt. kann mir mal ein Erfahrener was dazu sagen.
Bin planlos, da ich es noch nie geschafft habe durch diese "Zeit" eine flüssige und gleichmäßige Bewegung hinzubekommen Hoffe ihr könnt mir sagen, wie man das hinbekommt.
Voller Code mit allen Klassen im Anhang, danke.