Я работаю над большой игрой «Монополия» как школьный проект, и столкнулся с довольно большой проблемой производительности. Прямо сейчас у меня есть метод рисования, который рисует всю доску каждый раз, когда он вызывается ... это большая проблема, потому что доску нужно рисовать только один раз в начале и только всякий раз, когда кто-то покупает дом или что-то еще. Единственные компоненты, которые я хочу, чтобы их много рисовали, - это игроки, потому что они больше всего движутся и их нужно рисовать.
Вот метод рисования моей доски:
public void paint(Graphics g){
super.paint(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//Draw all the spots
for(int i = 0; i < spots.length; i++){
g2d.setColor(Color.white);
g2d.fill(spots[i].getRect());
if(spots[i] instanceof Property){
if(i < 10){
g2d.setColor(spots[i].getColor());
Rectangle temp = new Rectangle(spots[i].getRect().x,spots[i].getRect().y,spots[i].getRect().width,spots[i].getRect().height/3);
g2d.fill(temp);
g2d.setColor(Color.black);
g2d.drawString(((Property)spots[i]).getName(), spots[i].getRect().x, spots[i].getRect().height);
}else if(i >= 10 && i < 20){
g2d.setColor(spots[i].getColor());
Rectangle temp = new Rectangle(spots[i].getRect().x+spots[i].getRect().width-spots[i].getRect().width/3,spots[i].getRect().y,spots[i].getRect().width/3,spots[i].getRect().height);
g2d.fill(temp);
}else if(i >= 20 && i < 30){
g2d.setColor(spots[i].getColor());
Rectangle temp = new Rectangle(spots[i].getRect().x,spots[i].getRect().y+spots[i].getRect().height-spots[i].getRect().height/3,spots[i].getRect().width,spots[i].getRect().height/3);
g2d.fill(temp);
g2d.setColor(Color.black);
g2d.drawString(((Property)spots[i]).getName(), spots[i].getRect().x, spots[i].getRect().y);
}else if(i >= 30 && i < 40){
g2d.setColor(spots[i].getColor());
Rectangle temp = new Rectangle(spots[i].getRect().x,spots[i].getRect().y,spots[i].getRect().width/3,spots[i].getRect().height);
g2d.fill(temp);
}
}else if(spots[i] instanceof Railroad){
if(i == 5)
g2d.drawImage(imgTrain3, spots[i].getRect().x, spots[i].getRect().y+spots[i].getRect().height/4, null);
else if(i == 15)
g2d.drawImage(imgTrain4, spots[i].getRect().x+spots[i].getRect().width/4, spots[i].getRect().y, null);
else if(i == 25)
g2d.drawImage(imgTrain1, spots[i].getRect().x, spots[i].getRect().y+spots[i].getRect().height/4, null);
else if(i == 35)
g2d.drawImage(imgTrain2, spots[i].getRect().x+spots[i].getRect().width/4, spots[i].getRect().y, null);
}else if(spots[i] instanceof Chance){
if(i == 7)
g2d.drawImage(imgChance2, spots[i].getRect().x, spots[i].getRect().y, null);
else if(i == 22)
g2d.drawImage(imgChance2, spots[i].getRect().x, spots[i].getRect().y+spots[i].getRect().height/3, null);
else if(i == 36)
g2d.drawImage(imgChance3, spots[i].getRect().x, spots[i].getRect().y, null);
}else if(spots[i] instanceof Community){
if(i == 2)
g2d.drawImage(imgComm1, spots[i].getRect().x, spots[i].getRect().y+spots[i].getRect().height/3, null);
else if(i == 17)
g2d.drawImage(imgComm2, spots[i].getRect().x, spots[i].getRect().y, null);
else if(i == 33)
g2d.drawImage(imgComm3, spots[i].getRect().x+spots[i].getRect().width/3, spots[i].getRect().y, null);
}else{
g2d.setColor(spots[i].getColor());
g2d.fill(spots[i].getRect());
}
}
//Draw the outline of every spot
g2d.setColor(Color.black);
for(Spot index : spots)
g2d.draw(index.getRect());
//Draw the outline of the whole board
g2d.drawRect(newX, newY, boardSize, boardSize);
//Draw the Players location
for(Player index : players)
g2d.drawImage(index.getImage(), index.getLoc().x, index.getLoc().y, null);
}
В основном тонна текста для представления доски, и это делается каждый раз, когда доска перерисовывается. Любой совет?
Бонусный вопрос: я также только начал работать над анимацией движения для игроков после того, как они бросили (в настоящее время просто прыгают к месту назначения). Я создал таймер, который занимает 1 секунду за бросок (например: если вы бросаете 5, для перемещения требуется 5 секунд). Единственная проблема заключается в том, что у меня нет хорошей идеи о том, как показать медленное перемещение фигуры игрока из начальной точки в конец. Просто нужен кто-то, чтобы дать мне основную идею, чтобы я мог двигаться в правильном направлении.