0
paintComponent
の間に私のonFrame
メソッドがオブジェクトの位置を変更している問題があります。私のJPanelはオブジェクトfocus
の位置を基準にしてシーンをレンダリングするので、ペイント中にフォーカス位置が移動すると、シーンの一部が残りのシーンから変換されます(これはプレーヤに白い線で見えますスクリーン)。したがってpaintComponent
の部分でfocus
が変更されないようにしたいと思います。ここで paintComponent(Java)中の更新を防止する
@Override
public void paintComponent(Graphics g) {
if (focus == null) {
return;
}
super.paintComponent(g);
synchronized (focus) {
universe.getCurrentWorld().render(this, g, true); //draws scene around focus
}
focus.getInventory().render(this, g);
focus.renderHealthBar(g);
if (dialogQ.peek() != null) {
dialogQ.peek().render(this, g);
}
}
:
public void render(FocusedWindow g, Graphics gr, boolean showOutlands) {
level.renderMap(g, gr, showOutlands);
col.renderAround(g, gr);
for (Detector p : colliders.toArray(new Detector[0])) {
p.renderAround(g, gr);
}
}
レベルが実際にfocus
使用方法レンダリング:
public void renderMap(FocusedWindow g, Graphics gr, boolean renderOutside) {
int cushion = 4;
int scaleFactor = 2;
int minX = g.getFocus().getPos().getX()/Tile.WIDTH - g.getDimensions().getX()/Tile.WIDTH/scaleFactor - cushion;
int maxX = g.getFocus().getPos().getX()/Tile.WIDTH + g.getDimensions().getX()/Tile.WIDTH/scaleFactor + cushion;
int minY = g.getFocus().getPos().getY()/Tile.WIDTH - g.getDimensions().getY()/Tile.WIDTH/scaleFactor - cushion;
int maxY = g.getFocus().getPos().getY()/Tile.WIDTH + g.getDimensions().getX()/Tile.WIDTH/scaleFactor + cushion;
for (int i = minX; i < maxX; i++) {
for (int j = minY; j < maxY; j++) {
if (i >= 0 && i < map.length) {
if (j >= 0 && j < map[i].length) {
map[i][j].drawTile(g, gr, new Vector(i,j));
}
else if (renderOutside) {
map[0][0].drawTile(g, gr, new Vector(i,j));
}
}
else if (renderOutside) {
map[0][0].drawTile(g, gr, new Vector(i,j));
}
}
}
}
'同期 'ブロック内で' focus'が使用されていません。私はそれがすぐ下で使用されて参照してください。同期ブロックをそれらのステートメントに移動させてください –
すぐに役立つようにするには、[MCVE]または[ショート、自己完結型、正しい例](http://www.sscce.org/)を投稿してください。 –
@VinceEmigh 'universe.getCurrentWorld()。render'メソッドは渡されたウィンドウからフォーカスを受け取ります(この場合は' this') –