#java #optimization
Вопрос:
поэтому я пытаюсь создать «призрачный» эффект, например, след на изображении, и мне это очень нравится
то, как я это делаю, выглядит так:
public boolean geffect = true; private int traceint = 1, ti; private int tracesize = 13; private BufferedImage[] trace = new BufferedImage[tracesize]; private BufferedImage[] eyetrace = new BufferedImage[tracesize]; private int[] xtrace = new int[tracesize]; private int[] ytrace = new int[tracesize]; private double[] optrace = new double[tracesize]; [...] if(geffect) { if(ti gt;= traceint) { for(int i = tracesize - 1; i gt; 0; i--) { xtrace[i] = xtrace[i-1]; ytrace[i] = ytrace[i-1]; trace[i] = trace[i-1]; eyetrace[i] = eyetrace[i-1]; optrace[i] = optrace[i-1]; } xtrace[0] = this.getX(); ytrace[0] = this.getY(); trace[0] = animation.getCurframe(); if(lright) { eyetrace[0] = animGey[0]; }else if(lleft) { eyetrace[0] = animGey[1]; } optrace[0] = fade; ti = 0; }else { ti ; } } for(int i = 0; i lt; tracesize; i ) { double traceop = (tracesize-i)/(double)tracesize/5; g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, (float)(traceop*optrace[i]))); g.drawImage(trace[i], xtrace[i]-(int)Camera.x, ytrace[i]-(int)Camera.y, width, height, null); g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, (float)traceop)); g.drawImage(eyetrace[i], xtrace[i]-(int)Camera.x, ytrace[i]-(int)Camera.y, width, height, null); g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f)); }
но я знаю, что есть гораздо лучший способ сделать это, и прямо сейчас, когда больше врагов с таким эффектом и размер трассировки превышает 100, игра начинает отставать
но я хотел найти лучший и более оптимизированный способ сделать это, как я думаю, вы, ребята, знаете, как это сделать
заранее благодарю вас!
Комментарии:
1. Пожалуйста, проясните вашу конкретную проблему или предоставьте дополнительные сведения, чтобы выделить именно то, что вам нужно. Поскольку это написано в настоящее время, трудно точно сказать, о чем вы просите.