Tag: 双缓冲

JavaFX Canvas Double Buffering

我正在使用JavaFX在Java中复制经典游戏Pong。 我使用java.util.Timer,java.util.TimerTask进行游戏循环,使用JavaFX的Canvas进行渲染。 有没有办法为Canvas添加双缓冲,以便动画不会闪烁? 或者我应该采用不同的方法吗? 贝娄是代码。 我删除了它的一些部分,我认为这些部分无关紧要,因为代码长约200行。 Canvas canvas = new Canvas(stageW, stageH); GraphicsContext gc; public void start(Stage stage) throws Exception { Group root = new Group(); gc = canvas.getGraphicsContext2D(); Timer loop = new Timer(); root.getChildren().add(canvas); loop.schedule(new GameLoop(), 0, 1000 / 60); stage.setScene(new Scene(root,stageW, stageH)); stage.show(); } public class GameLoop extends TimerTask { @Override public void […]

Java swing双缓冲

我刚刚开始使用双缓冲,一切正常,直到我想在屏幕上添加一个JScrollPane,所以我以后可以做一些相机移动。 一切都很好(我的精灵)除了JScrollPane的ScrollBars之外。 我希望它们能被展示出来! 但是,如果我调整窗口大小,滚动条会闪烁,所以我知道它们在那里! 如果我足够快,我甚至可以使用它们。 他们怎么没有出现在渲染? 🙁 这是问题的SSCCE: public class BufferStrategyDemo extends JFrame { private BufferStrategy bufferStrategy; private JPanel gameField; private JScrollPane scroll; public BufferStrategyDemo() { this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.getContentPane().setPreferredSize(new Dimension(800, 600)); this.pack(); this.createBufferStrategy(2); this.gameField = new JPanel(); this.gameField.setPreferredSize(new Dimension( 1400, 600 )); this.scroll = new JScrollPane( gameField ); this.add( scroll, BorderLayout.CENTER ); this.setVisible( true ); this.bufferStrategy […]

双缓冲JFrame

当我正在制作2D游戏时,我一直在阅读很多关于双缓冲的内容。 我遇到了许多不同的实现策略,但我不确定Double Buffering如何适合我创建游戏窗口的方式。 例如,我遇到的一篇文章(http://content.gpwiki.org/index.php/Java:Tutorials:Double_Buffering)建议使用单独的绘图方法; 但是,我怀疑如果您正在绘制形状,而不是向窗口添加组件,这将适用。 这是我的主要GUI代码(省略了keylistener方法) public class MainWindow extends JFrame implements KeyListener{ private Dimension dim; private CardLayout layout; private JPanel panel; private JLayeredPane gameLayers; private Menu menu; private MiniGame miniGame; private Board board; private Sprite sprite; private Game game; private Map map; private GameState gs; private Boolean[] keys; public MainWindow(Game game, GameState gs, Map […]