0
플레이어가 검 이미지와 충돌하면 인벤토리 이미지가 검이 들어있는 인벤토리 이미지로 변경됩니다. 나는이 문제를 해결하기 위해 온통 보았다! 어떤 도움이라도 대단히 감사하겠습니다!JFrame 이미지 충돌 감지
package main;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.Ellipse2D;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class grow extends JPanel implements ActionListener, KeyListener {
int x = 0, y = 0, velx = 0, vely = 0;
Timer t = new Timer(5, this);
public grow() {
t.start();
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
ImageIcon ic = new ImageIcon("C:\\Users\\Michael\\Downloads\\map.jpg");
Image i = ic.getImage();
g2d.drawImage(i, 0, 0, null);
ImageIcon sw = new ImageIcon("C:\\Users\\Michael\\Downloads\\sword.jpg");
Image s = sw.getImage();
g2d.drawImage(s, 100, 100, null);
ImageIcon inv = new ImageIcon("C:\\Users\\Michael\\Downloads\\inv.jpg");
Image inv1 = inv.getImage();
g2d.drawImage(inv1, 350, 0, null);
ImageIcon im = new ImageIcon("C:\\Users\\Michael\\Downloads\\man.jpg");
Image m = im.getImage();
if(vely >= 0) {
g2d.drawImage(m, x, y, null);
}
if(vely < 0) {
ImageIcon imb = new ImageIcon("C:\\Users\\Michael\\Downloads\\manback.jpg");
Image mb = imb.getImage();
g2d.drawImage(mb, x, y, null);
}
if(velx > 0) {
ImageIcon imr = new ImageIcon("C:\\Users\\Michael\\Downloads\\manleft.jpg");
Image mr = imr.getImage();
g2d.drawImage(mr, x, y, null);
}
if(velx < 0) {
ImageIcon iml = new ImageIcon("C:\\Users\\Michael\\Downloads\\manright.jpg");
Image ml = iml.getImage();
g2d.drawImage(ml, x, y, null);
}
}
public void actionPerformed(ActionEvent e) {
repaint();
x += velx;
y += vely;
}
public void up() {
vely = -2;
velx = 0;
}
public void down() {
vely = 2;
velx = 0;
}
public void left() {
vely = 0;
velx = -2;
}
public void right() {
vely = 0;
velx = 2;
}
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_RIGHT) {
right();
}
if(code == KeyEvent.VK_LEFT) {
left();
}
}
public void stop(){
velx = 0;
vely = 0;
}
public void keyReleased(KeyEvent e) {
int code = e.getKeyCode();
if(code == KeyEvent.VK_UP){
stop();
}
if(code == KeyEvent.VK_DOWN) {
stop();
}
if(code == KeyEvent.VK_RIGHT) {
stop();
}
if(code == KeyEvent.VK_LEFT) {
stop();
}
}
public void keyTyped(KeyEvent e) {
}
}
난 당신이 libGDX 또는 AndEngine와 같은 적절한 게임 엔진을 사용하는 것이 좋습니다. 그러면 훨씬 더 간단해질 것입니다. 스윙은 게임 UI에는 적합하지 않습니다. – ashes999