मैं वर्तमान में एक विश्वविद्यालय परियोजना के लिए एक टॉवर रक्षा खेल विकसित कर रहा हूं। ऊंची लहरों पर सैकड़ों दुश्मन इधर-उधर घूम रहे हैं। मेरी समस्या यह है कि लगभग ३००+ दुश्मनों पर एक साथ चलने पर यह बहुत ही खराब हो रहा है। हर दुश्मन एक फलक का बच्चा है जो मेरे दृश्य में प्रदर्शित होता है।

मेरे पास मेरे एनीमीग्राफिक्स क्लास में एक विधि है जो अद्यतन विधि को कॉल करके पॉजिटॉन को अपडेट करती है:

    public class EnemyGraphics extends ImageView implements EventObserver {

...
    @Override
    public void update() {
            Platform.runLater(() -> {
                    relocate(enemy.getxCoordinate(), enemy.getyCoordinate());
            });
    }
    }

मुझे लगता है कि यह पिछड़ रहा है क्योंकि हर दुश्मन हर बार अपडेट() को कॉल करके अपने स्थान को अपडेट कर रहा है।

क्या कोई ऐसा तरीका है जिससे मैं अपने इमेज व्यू ऑब्जेक्ट के लिए नए निर्देशांक सेट कर सकता हूं, बिना दृश्य को फिर से खींचे और मुख्य एफएक्स-थ्रेड में एक टाइमर बना रहा हूं जो एक निश्चित अंतराल में पूरे दृश्य को फिर से तैयार करता है? या क्या कोई अन्य समाधान/विधि है जिसे मैं फलक पर छवियों को प्रदर्शन करने के लिए कॉल कर सकता हूं?

0
GreenLegend 3 पद 2018, 17:11

1 उत्तर

सबसे बढ़िया उत्तर

ठीक है मुझे अपनी गलती मिल गई है। हर बार जब मेरा दुश्मन लॉजिक क्लास अपनी स्थिति को अपडेट करने के लिए दुश्मन ग्राफिक ऑब्जेक्ट नामक एक नई स्थिति की गणना करता है। परीक्षण के दौरान मैंने दुश्मन ग्राफिक्स वर्ग में विधि की कार्यक्षमता को हटा दिया है लेकिन कॉल नहीं।

सभी शत्रुओं के पदों को अद्यतन करने के लिए मैंने अपने GUIcontroller वर्ग में एक विधि लिखी है:

private void startUpdateTicker() {
    final AnimationTimer timer = new AnimationTimer() {
        @Override
        public void handle(long timestamp) {
                updateEnemies();
        }
    };
    timer.start();
}

public synchronized void updateEnemies() {
        for (EnemieGUI enemy : enemyList) {
            enemy.relocate(enemy.getEnemie().getxCoordinate(), enemy.getEnemie().getyCoordinate());
        }
}
1
GreenLegend 4 पद 2018, 08:04