दिलचस्प पोस्ट
मैं JSF FacesMessage को HTML कोड कैसे जोड़ूं? पायथन के साथ रीडायरेक्ट के यूआरएल कैसे प्राप्त करें HTML5 ईमेल सत्यापन फोनगैप 3.0 आईओएस प्लगिन नहीं मिला गिट में ईविल विलीन हो जाता है? क्या रिवर्स इंजीनियरिंग से एंड्रॉइड ऐप की रक्षा करना वास्तव में असंभव है? ~ 40 छवियों को लोड करने वाले एनएटी मेमोरी मुद्दे, स्मृति को पुनः प्राप्त नहीं किया जा सकता, संभवतः LOH विखंडन के कारण लोचदार बीनस्टॉक रूबी / रेल को गिट स्थापित करने की आवश्यकता है ताकि बंडल इंस्टॉल किए जा सकें .. लेकिन ये नहीं है क्रमिक आउटपुट की तिथि? क्या मुझे डीटीओ ऑब्जेक्ट्स में एंटिटी (पर्सिस्टेंट) ऑब्जेक्ट्स को बदलना चाहिए? strstr नहीं कामकाज क्या अस्थायी आवधिक संकलक नहीं है? आईफ़ोन नेविगेशन बार केवल प्रथम पृष्ठ पर छुपाएं PGAdmin से एक CSV फ़ाइल आयात करने का प्रयास करते समय अनुमति अस्वीकृत हो गई फोरट्रान: पूर्णांक * 4 बनाम पूर्णांक (4) बनाम पूर्णांक (प्रकार = 4)

जावा की पेंट विधि के साथ समस्याएं, हास्यास्पद रीफ्रेश वेग

मैं विश्वविद्यालय के लिए काम के रूप में आर-टाइप का एक बहुत सरल संस्करण विकसित कर रहा हूं, लेकिन इसके बावजूद शिल्प गति बहुत धीमी है, इसलिए आंदोलन बदसूरत और अनाड़ी है मैं स्क्रीन को ताज़ा करने के लिए विधि का पुन: उपयोग कर रहा हूं, इसके अलावा अन्य तरीकों या तरीके बेहतर हैं?

आंदोलन का वीडियो

मुख्य पैनल में पेंट विधि

@Override public void paint(Graphics g) { super.paint(g); Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.drawImage(fondo, 0, 0,1200,600,this); pj.paint(g2); g2D=g2; } 

पीजे की पेंट विधि

 public void paint(Graphics2D g) { g.drawImage(imagen,x,y,this); } 

पीजे की चाल विधि

 public void move (KeyEvent e) { int dx = 0; int dy = 0; int code = e.getKeyCode(); switch (code) { case KeyEvent.VK_Q: dy-=1; break; case KeyEvent.VK_A: dy+=1; break; case KeyEvent.VK_P: dx+=1; break; case KeyEvent.VK_O: dx-=1; break; } int x = (getX()<maxX&&getX()!=0) ? getX()+dx : getX(); int y = (getY()<maxY&&getY()!=0) ? getY()+dy : getY(); if (getY()>=maxY||getY()==0) { if (dy==+1) y=y+1; } setPosicion(x, y); } 

Solutions Collecting From Web of "जावा की पेंट विधि के साथ समस्याएं, हास्यास्पद रीफ्रेश वेग"

  • छवि fondo पहले से 1200×600 तक स्केल किया जाना चाहिए।
  • मुझे यकीन नहीं है, लेकिन क्या super.paint(g) जरूरत है? आप paintComponent उपयोग भी कर सकते हैं।

ईवेंट हैंडलिंग (आप नीचे कुंजी पर 1 पिक्सेल की ओर बढ़ रहे हैं), सही ढंग से किया जाना चाहिए मैं दिशा और गति (1 पीएक्स) सेट कर सकता था, और लगातार चलती रहने के लिए इसे स्विंग टाइमर पर छोड़ दिया।

repaint(20L) : Repainting सबसे अच्छा लचीला / लचीला किया गया है: repaint(20L) (50 फ्रेम प्रति सेकेंड); इवेंट जैसे कि डाउन हो सकता है EventQueue.invokeLater(new Runnable() { ... });

विशेष रूप से आप परिवर्तित क्षेत्र के साथ फिर से उपयोग कर सकते हैं।

आप यहां एक समान कार्यक्रम का एक बड़ा उदाहरण पा सकते हैं। उदाहरण एक नया धागा बनाने का प्रावधान करता है और उस थ्रेड को मुख्य लूप के माध्यम से हर चलना सोता है।

यहां जावा में खेलों के लिए छवियों को लोड करने के बारे में एक और सवाल है

ऐसा लग रहा है कि गेम में छवियों का उपयोग करने के लिए स्विंग ही बहुत कमजोर है। आप अधिक उपयुक्त लाइब्रेरी का उपयोग करने पर विचार करना चाह सकते हैं।

नीचे सरल खेल लूप के रूप में एक पृष्ठभूमि का उपयोग करते हुए सरल उदाहरण है। यह गेम ऑब्जेक्ट की स्थिति अपडेट करता है और आवश्यक एफपीएस बनाए रखने के लिए आवश्यक देरी की गणना करता है।

गेम ऑब्जेक्ट ( Ship ) में कम समय की अवधि में तेजी लाने / गति कम करने की क्षमता है

 import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.awt.geom.Path2D; import javax.swing.AbstractAction; import javax.swing.ActionMap; import javax.swing.InputMap; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.KeyStroke; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; public class AnimationTest { public static void main(String[] args) { new AnimationTest(); } public AnimationTest() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } JFrame frame = new JFrame("Test"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(new GamePane()); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public class GamePane extends JPanel { private Ship ship; public GamePane() { ship = new Ship(); Thread thread = new Thread(new MainLoop(this)); thread.setDaemon(true); thread.start(); InputMap im = getInputMap(WHEN_IN_FOCUSED_WINDOW); ActionMap am = getActionMap(); // Key controls... im.put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0, false), "upPressed"); im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0, false), "downPressed"); im.put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0, true), "upReleased"); im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0, true), "downReleased"); am.put("upPressed", new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { // Change the direction... ship.setDirection(-1); // Accelerate by 1 per frame ship.setVelocity(1); } }); am.put("downPressed", new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { // Change direction ship.setDirection(1); // Accelerate by 1 per frame ship.setVelocity(1); } }); am.put("upReleased", new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { // Deccelerate by 1 per frame ship.setVelocity(-1); } }); am.put("downReleased", new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { // Deccelerate by 1 per frame ship.setVelocity(-1); } }); } @Override public Dimension getPreferredSize() { return new Dimension(200, 200); } public void updateState() { // Update the state of the game objects. // This would typically be better done in // some kind of model ship.update(getWidth(), getHeight()); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); // Paint the game state... Graphics2D g2d = (Graphics2D) g.create(); ship.paint(g2d); g2d.dispose(); } } public class MainLoop implements Runnable { private GamePane pane; private int fps = 25; public MainLoop(GamePane pane) { this.pane = pane; } @Override public void run() { // Wait until the screen is ready while (pane.getHeight() <= 0) { try { Thread.sleep(125); } catch (InterruptedException ex) { } } // Main loop while (true) { // Start time loop long startTime = System.currentTimeMillis(); // Update the game state pane.updateState(); // Calculate the amount of time it took to update long elasped = System.currentTimeMillis() - startTime; // Calculate the number of milliseconds we need to sleep long sleep = Math.round((1000f / fps) - elasped); pane.repaint(); if (sleep > 0) { try { Thread.sleep(sleep); } catch (InterruptedException ex) { } } } } } public static class Ship { public static int MAX_SPEED = 8; private int direction = 0; private int velocity = 0; private int x; private int y; private int speed = 0; private Path2D shape; private boolean initState; public Ship() { shape = new Path2D.Float(); shape.moveTo(0, 0); shape.lineTo(5, 5); shape.lineTo(0, 10); shape.lineTo(0, 0); shape.closePath(); initState = true; } public void setDirection(int direction) { this.direction = direction; } public void setVelocity(int velocity) { this.velocity = velocity; } public void update(int width, int height) { if (initState) { y = (height - 10) / 2; initState = false; } else { // Add the velocity to the speed speed += velocity; // Don't over accelerate if (speed > MAX_SPEED) { speed = MAX_SPEED; } else if (speed < 0) { speed = 0; } // Adjust out position if we're moving if (speed > 0) { y += (direction * speed); } // Bounds check... if (y - 5 < 0) { y = 5; } else if (y + 5 > height) { y = height - 5; } } } public void paint(Graphics2D g2d) { int yPos = y - 5; g2d.translate(10, yPos); g2d.fill(shape); g2d.translate(-10, -yPos); } } }