2014-01-24 4 views
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) { 

    } 
} 
+0

난 당신이 libGDX 또는 AndEngine와 같은 적절한 게임 엔진을 사용하는 것이 좋습니다. 그러면 훨씬 더 간단해질 것입니다. 스윙은 게임 UI에는 적합하지 않습니다. – ashes999

답변

0

ImageIcon마다 보이지 않는 Rectangle 개체를 만듭니다. 나는 각 개체 (예 : 사람, 검 등)가 자신의 클래스가 먼저 만들어 지도록 권합니다. 그런 다음 다음과 같이하십시오.

나머지 클래스에도이 작업을 수행하려고합니다. 이제 당신도 소드 클래스라고 가정합시다. 그럼 당신은 너무로 충돌을 감지 할 수 있습니다 :

//create an instance of Man 
    //create an instance of Sword 


    Rectangle manRect = man.getBounds(); 
    Rectangle swordRect = sword.getBounds(); 


    if (manRect.intersects(swordRect)) { 
     //perform your action code here 
     //update sprites 
    } 

Source