所以,我試圖在LWJGL中製作遊戲,它似乎對我來說工作得很好。雖然,我遇到了一些將我的實體移動到屏幕上的問題。我想以相同的速度從一個點到另一個點。另外,我正在根據實體正在移動的方向來動畫我的精靈。Java遊戲 - 處理線性移動
但是!我有一些問題:
1#它會閃爍,因爲該運動被定義爲一個修飾符:delta(以使得由FPS定義的平滑運動)。事實上,它從來沒有真正達到它的目的(因爲它重新計算並且從未達到該位置)。我該如何解決這個問題?
2#當兩個玩家加入同一臺服務器時,我在最快的計算機上的角色運行得更快。我認爲這是因爲FPS,如何解決?
private String name;
private float positionx,positiony; // Current
private int targetx,targety; // Target
private int dx, dy; // Direction
private int pointx, pointy; // Direction
private float speed;
private Sprite sprite;
public Entity(String name, int positionx, int positiony, Sprite sprite){
this.name = name;
this.speed = 0.1f;
this.positionx = 720;
this.positiony = 450;
this.targetx = 1000; // fix this
this.targety = 10; // this for testing.
this.sprite = sprite;
this.dx = 0;
this.dy = 0;
}
//double distance = Math.sqrt((vx * vx) + (vy * vy));
public void move(long delta){
if(positionx < targetx){
dx = 1;
pointx = 1;
}else if(positionx > targetx){
dx = -1;
pointx = -1;
}else{
dx = 0;
}
if(positiony < targety){
dy = 1;
pointy = 1;
}else if(positiony > targety){
dy = -1;
pointy = -1;
}else{
dy = 0;
}
//Set animations:
if(positionx==targetx && positiony==targety){
if(pointx<0){
sprite.setAnimation(5, 2, 100); // Standing left
}else if(pointx>0){
sprite.setAnimation(6, 2, 100); // Standing right
}else if(pointy<0){
sprite.setAnimation(7, 2, 100); // Standing up
}else if(pointy>0){
sprite.setAnimation(4, 2, 100); // Standing down
}
}else{
if(pointx<0){
sprite.setAnimation(1, 2, 100); // Walking left
}else if(pointx>0){
sprite.setAnimation(2, 2, 100); // Walking right
}else if(pointy<0){
sprite.setAnimation(3, 2, 100); // Walking up
}else if(pointy>0){
sprite.setAnimation(0, 2, 100); // Walking down
}
}
//movement here.
positionx += dx*delta*speed;
positiony += dy*delta*speed;
System.out.println(dx*delta*speed);
sprite.setPosition((int)positionx, (int)positiony);
}
對不起,我不是說FPS。 Delta是最後一幀的渲染時間,我用作修改器。渲染最後一幀的時間越長,增量越大,因此移動的時間越長。這不會像定時器一樣好嗎?否則,我不能準確地看到如何使用定時器,而不會使其閃爍更多(每幀1000/60 = 16毫秒,並且如果定時器每隔50毫秒移動一次,它將閃爍)。 我執行:
– Deenis..哪個解決了閃爍,但現在能解決我的網絡問題? – Deenis
如果你有一箇中央服務器,讓服務器處理移動並讓玩家發送他們當前的方向。如果一個計時器用於移動,具有更快cpu的玩家不應該能夠移動得更快,這僅僅是因爲所有玩家在移動之間具有相同的計時器間隔。 – bas