В следующем примере коды причинял мне некоторые горя в проекте я делаю:Хотя петля кажется, перерыв живописи кода
Вот моя проблема ...
результатов Этого кода в виде сетки квадратов втягивается в окне, наряду с цветной формой, начиная с верхней частью этой сетки:
MainWindow mainAppWindow = mainAppWindow = new MainWindow("TETRIS");
mainAppWindow.setExtendedState(Frame.MAXIMIZED_BOTH);
mainAppWindow.setVisible(true);
TetriminoFactory blockBuilder = mainAppWindow.getGameBoard().getBlockFactory();
mainAppWindow.getGameBoard().setActiveTetrimino(blockBuilder.createTetrimino());
Tetrimino activeTetrimino = mainAppWindow.getGameBoard().getActiveTetrimino();
После этого, у меня есть время цикл, который должен переместить форму вниз по экрану на определенное расстояние каждую секунды. Это движение должно быть представлено на окне:
while((activeTetrimino.getLowermostPiece().getLoc().getYPos()/MiscConsts.TETRIS_UNIT) <= mainAppWindow.getGameBoard().getLowermostRowIndex())
{
if(activeTetrimino.checkForNeighbouringBlock().equals(Collision.BLOCK_BELOW_ME))
{
if(!activeTetrimino.setSecuredState(true))
{
activeTetrimino = blockBuilder.createTetrimino();
}
}
activeTetrimino.moveTetrimino(0, MiscConsts.TETRIS_UNIT);
mainAppWindow.canvas.repaint();
try {
Thread.sleep(MiscConsts.TIME_BETWEEN_ADVANCEMENTS);
} catch (InterruptedException e) {
System.out.println("ERROR - InterruptedException thrown in operate(). Terminating.");
e.printStackTrace();
System.exit(1000);
}
}
В этот момент я столкнулся с проблемой. Кажется, что цикл отменяет весь предыдущий рисунок, и получается пустой экран. Если я прокомментирую цикл, сетка рисуется вместе с формой, но, конечно, движение не происходит. Я не уверен, что здесь происходит, но я подозреваю, что это связано с нитями или чем-то еще. Или, возможно, просто в то время как петли анти-качели: P
ПОЛНОЙ ВЫПИСКА:
public static void main(String[] args)
{
theApp = new Tetris();
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
theApp.createGUI(); // Call GUI creator
}
});
}
public void createGUI()
{
MainWindow mainAppWindow = mainAppWindow = new MainWindow("TETRIS");
mainAppWindow.setExtendedState(Frame.MAXIMIZED_BOTH);
mainAppWindow.setVisible(true);
TetriminoFactory blockBuilder = mainAppWindow.getGameBoard().getBlockFactory();
// NEEDS WORK???
mainAppWindow.getGameBoard().setActiveTetrimino(blockBuilder.createTetrimino());
Tetrimino activeTetrimino = mainAppWindow.getGameBoard().getActiveTetrimino();
while((activeTetrimino.getLowermostPiece().getLoc().getYPos()/MiscConsts.TETRIS_UNIT) <= mainAppWindow.getGameBoard().getLowermostRowIndex())
{
if(activeTetrimino.checkForNeighbouringBlock().equals(Collision.BLOCK_BELOW_ME))
{
if(!activeTetrimino.setSecuredState(true))
{
activeTetrimino = blockBuilder.createTetrimino();
}
}
activeTetrimino.moveTetrimino(0, MiscConsts.TETRIS_UNIT);
mainAppWindow.canvas.repaint();
try {
Thread.sleep(MiscConsts.TIME_BETWEEN_ADVANCEMENTS);
} catch (InterruptedException e) {
System.out.println("ERROR - InterruptedException thrown in operate(). Terminating.");
e.printStackTrace();
System.exit(1000);
}
}
}
Возможный дубликат [В то время как петля делает белый экран апплета и не отвечает] (http://stackoverflow.com/questions/16369264/while-loop-makes-applet-white-screen-and-unresponsive) среди множества других –