im, создавая мир 2d, в котором есть игрок, который находится в форме прямоугольника, и что им нужно делать, когда игрок нажимает клавишу пробела, он рисует блок в зависимости от его направления, проблема в том, что он задает только один блок, и плюс он удаляет его после повторной обработки теперь, я знаю, что моя ошибка заключается в методе рисования. то, что я хочу знать, как сделать это рисует блок каждый раз я нажимаю пространство без удаления после перекрашивания и может быть установлена на несколько раз я знаю, что я должен использовать цикл, но я не знаю точно, я должен написать егоJava, как сделать фигуру, которую можно нарисовать, нажав кнопку
private static final long serialVersionUID = -1401667790158007207L;
int playerx = 450;
int playery = 450;
int playerDirection = 0; //north = 0, west = 1, south = 2, east = 3
boolean setBlock;
public platform(){
super("2D game");
JPanel panel = new JPanel();
panel.setBackground(Color.white);
addKeyListener(this);
this.setContentPane(panel);
}
public void paint(Graphics g){
super.paint(g);
Graphics2D g2 = (Graphics2D)g;
Rectangle player = new Rectangle(playerx, playery, 50, 50);
g2.fill(player);
if(setBlock){
if(playerDirection == 0){
g2.fillRect(playerx, playery - 50, 50, 50);
}else if(playerDirection == 1){
g2.fillRect(playerx + 50, playery, 50, 50);
}else if(playerDirection == 2){
g2.fillRect(playerx, playery + 50, 50, 50);
}else if(playerDirection == 3){
g2.fillRect(playerx - 50, playery, 50, 50);
}
setBlock = false;
}
}
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_UP){
playerDirection = 0;
playery -=50;
repaint();
}
if(e.getKeyCode() == KeyEvent.VK_DOWN){
playerDirection = 2;
playery +=50;
repaint();
}
if(e.getKeyCode() == KeyEvent.VK_RIGHT){
playerDirection = 1;
playerx += 50;
repaint();
}
if(e.getKeyCode() == KeyEvent.VK_LEFT){
playerDirection = 3;
playerx -=50;
repaint();
}
if(e.getKeyCode() == KeyEvent.VK_SPACE){
setBlock = true;
}
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
}
Во-первых, избавиться от этого 'setBlock = ложь;' в методе краски, так как государственная программа не должна зависеть от способа окраски, которые являются методы, которые не имеют контроля над. Является ли это графическим интерфейсом Swing, если вам следует избегать переопределения краски в первую очередь и использовать paintComponent. –
Вы должны сохранить свои прямоугольные блоки в списке. Потому что каждый раз, когда вы перерисовываете, вы в основном теряете все, что где-то не сохранилось. –