에 팩맨을 moivng 각 방향에 대해 서로 다른, 그리고별로 그리기 (반 폐쇄, 입을 열고 폐쇄 전체) :에 애니메이션에서 문제가 발생하고 난 팩맨 이미지의 스트립 사용하고 애니메이션의 경우 자바
frame = 0;
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(PacRIGHT.getSubimage(frame, 0, 28, 28), x, y, null);
}
에 우리는 모든 위해 그릴 4 개의 화상 스트립이 여기
frame = 0*30 ;
frame = 1*30 ;
frame = 2*30 ;
하고 : 같이 우측 30 개 화소 이동 30 * 할 팩맨 애니메이션 프레임이고> = 60 1 개 애니메이션 사이클을 완료하기 위해, 그 것 방향, 첫 번째 문제는 내가 그것을 할 방법을 알아낼뿐만 아니라 또한 그것을 이동할 수없는, 그녀를 직면하고있어 지금 내가지고있어 중고 스윙 타이머가이 시간 코드가 업데이트되어, 지금은 이동 한 팩맨과 오른쪽 방향 문제의 애니메이션 입이되어 여러 오류 : 전자 코드를
업데이트입니다.
import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JPanel; import javax.swing.Timer; public class Runtest extends JPanel implements ActionListener, KeyListener { Timer t = new Timer(4, this); int x, y, velocx, velocy = 0; int keyCode; int frame = 0; BufferedImage PacUP; BufferedImage PacDOWN; BufferedImage PacLEFT; BufferedImage PacRIGHT; public Runtest() throws IOException { t.start(); addKeyListener(this); setFocusable(true); PacRIGHT = ImageIO.read(new File("E:\\javapacman\\newright.png")); } public int frame() { frame++; if (frame > 3) frame = 0; return frame; } public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(PacRIGHT.getSubimage(frame() * 30, 0, 28, 28), x, y, null); // Graphics2D g2 = (Graphics2D) g ; // g2.fill(new Ellipse2D.Double(x,y,40,40)); } public void actionPerformed(ActionEvent ae) { repaint(); x += velocx; y += velocy; } public void up() { velocy = -1; velocx = 0; } public void down() { velocy = 1; velocx = 0; } public void left() { velocx = -1; velocy = 0; } public void right() { velocx = 1; velocy = 0; } @Override public void keyPressed(KeyEvent ke) { keyCode = ke.getKeyCode(); if (keyCode == KeyEvent.VK_UP) { up(); } if (keyCode == KeyEvent.VK_DOWN) { down(); } if (keyCode == KeyEvent.VK_LEFT) { left(); } if (keyCode == KeyEvent.VK_RIGHT) { right(); } } }
그리고 메인 클래스 : public class PacMan {
public static void main(String[] args) throws IOException {
JFrame frame = new JFrame("Test");
Runtest test = new Runtest();
frame.setSize(400, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(test);
frame.setVisible(true);
}
}
오류 난 내가 당신이라면 나는 움직임과 애니메이션을 분리하는 것,
Exception in thread "AWT-EventQueue-0" java.lang.UnsupportedOperationException: Not supported yet.
at pactest.Runtest.keyReleased(Runtest.java:128)
at java.awt.Component.processKeyEvent(Component.java:6466)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2828)
at java.awt.Component.processEvent(Component.java:6282)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1895)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:762)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1027)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:899)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:727)
at java.awt.Component.dispatchEventImpl(Component.java:4731)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
시작하려면 운동 및 애니메이션을 분리하고 1 이미지로 시작하여 운동을 시작하십시오. 그 후 이미지 전환 문제에 접근합니다. –
나의 첫 번째 초점은 또한 이미지를 먼저 움직이고 그리는 방법을 찾아 냈지만 움직이지 않았다면 다른 접근 방식을 시도했지만 실패했습니다. – AMATURE
팩맨을 움직이기 위해 무언가가 필요합니다. 현재 actionPerformed에 뭔가가 있지만 그게 어떻게 불려지는지 나는 모른다. 나는 게임 루프에 대해 잠시 후에 질문을 던졌다. http://stackoverflow.com/questions/16364487/java-rendering-loop-and-logic-loop/16364639#16364639 아마이 코드를 가지고 뭔가를 할 수있다. –