/ / मैं तीर कुंजी के साथ स्क्रीन पर एक ग्राफिक कैसे स्थानांतरित करूं - जावा, स्विंग, जावा -2 डी

मैं तीर कुंजियों के साथ स्क्रीन पर ग्राफिक कैसे स्थानांतरित करूं? - जावा, स्विंग, जावा -2 डी

मैं एक सरल की शुरुआत बनाने की कोशिश कर रहा हूँखेल। पहली चीज जो मैं करने की कोशिश कर रहा हूं वह मेरे कोड में एक ग्राफिक आयात करता है और इसे स्क्रीन पर स्थानांतरित करता है। मैं स्क्रीन पर एक गेंद को आकर्षित करने और इसे स्थानांतरित करने में सक्षम था, लेकिन जब मैं किसी फ़ाइल से ग्राफिक आयात करता हूं तो मैं इसे स्थानांतरित करने में असमर्थ हूं। मुझे क्या याद आ रहा है या गलत कर रहा है?

import javax.swing.*;
import java.awt.Graphics;
import java.awt.*;
import java.awt.event.*;
import javax.swing.ImageIcon;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyListener;
import javax.swing.JPanel;
import javax.swing.Timer;

public class Game extends JPanel implements ActionListener, KeyListener {

Timer t = new Timer(5, this);
double x = 0, y = 0, velX = 0, velY = 0;
private ImageIcon image;


public Game(){
setBackground(Color.WHITE);
t.start();
addKeyListener(this);
this.setFocusable(true);
setFocusTraversalKeysEnabled(false);
image = new ImageIcon ("ship.gif");

}

public void paintComponent(Graphics g){
super.paintComponent(g);
ImageIcon i = new ImageIcon("C:\Users\Bryan\Pictures\ship.gif");
i.paintIcon(this, g, 0, 0);

}

public void actionPerformed(ActionEvent e){
repaint();
x += velX;
y += velY;

if(x<0){
velX = 0;
x = 0;
}

if(x>750){
velX = 0;
x = 750;
}

if(y<0);{
velY = 0;
y = 0;
}

if(y>550){
velY = 0;
y = 550;
}
}

public void up(){
velY = -1.5;
velX = 0;
}

public void down(){
velY = 1.5;
velX = 0;
}

public void left(){
velX = -1.5;
velY = 0;
}

public void right(){
velX = 1.5;
velY = 0;
}

public void keyPressed(KeyEvent e){
int code = e.getKeyCode();

if (code == KeyEvent.VK_UP){
up();
}

if (code == KeyEvent.VK_DOWN){
down();
}

if (code == KeyEvent.VK_LEFT){
left();
}

if (code == KeyEvent.VK_RIGHT){
right();
}
}

public void keyTyped(KeyEvent e){}

public void keyReleased(KeyEvent e){

//      velX = 0;
//      velY = 0;
int code = e.getKeyCode();

if (code == KeyEvent.VK_UP){
velY = 0;
}
if (code == KeyEvent.VK_DOWN){
velY = 0;
}
if (code == KeyEvent.VK_LEFT){
velX = 0;
}
if (code == KeyEvent.VK_RIGHT){
velX = 0;
}
}

}

मेरा ड्राइवर इस प्रकार है:

import java.awt.Color;

import javax.swing.JFrame;

public class GameDriver {

public static void main(String[] args) {

JFrame f = new JFrame();
Game  g = new Game();
f.add(g);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(800,600);

}
}

उत्तर:

जवाब के लिए 2 № 1

यहां दो बड़ी समस्याएं:

public void paintComponent(Graphics g){
super.paintComponent(g);
ImageIcon i = new ImageIcon("C:\Users\Bryan\Pictures\ship.gif");
i.paintIcon(this, g, 0, 0);
}
  1. आप भीतर से एक फ़ाइल से पढ़ रहे हैं paintComponent(...). कभी नहीँ इसे करें क्योंकि यह आपकी ड्राइंग को अनावश्यक रूप से धीमा कर देगा। छवि को एक बार पढ़ें, शायद एक निर्माता में, और फिर ड्राइंग में संग्रहीत छवि चर का उपयोग करें। पेंटिंग के लिए पेंटकंपोनेंट विधि होनी चाहिए केवल, और यह दुबला होना चाहिए, मतलब और उपवास.
  2. आप "0, 0 पर ड्राइंग कर रहे हैं हमेशा। यदि आप कुछ स्थानांतरित करना चाहते हैं, तो एक चर स्थिति पर आकर्षित करें, और फिर चर और दमन द्वारा रखे गए मूल्यों को बदलें।

इसके अलावा: आपको एक स्विंग एप्लिकेशन में कुंजी स्ट्रोक को स्वीकार करने के लिए कुंजी बाइंडिंग का उपयोग करना चाहिए क्योंकि इससे फोकस मुद्दों को हल करने में मदद मिलेगी।

उदाहरण के लिए, कृपया मेरे कोड पर एक नज़र डालें यह जवाब.