2013-06-06 6 views
0

키 누름에서 작은 삼각형을 움직이는 프로그램이 있습니다. 코드의 대부분은 작동하지만 키 누름이 배에 전혀 영향을 미치지 않습니다. 제 코드를 살펴보고 해결책을 찾도록 도와 주시겠습니까? 모든 도움을 주시면 감사하겠습니다. (응축) AffineTransform을 사용하여 벡터 이미지 이동

import java.awt.Polygon; 
import java.awt.Color; 

public class Ship extends GameObject{ 

    //position of vector points arrays 
    private int[] xpoints = {-10,0,10}; 
    private int[] ypoints = {-20,0,-20}; 
    Polygon shape = new Polygon(xpoints,ypoints,xpoints.length); 
    public Ship() 
    { 
     setShape(shape); 
     setX(300.0); 
     setY(300.0); 
     setColour(new Color(255,0,0)); 
    } 
} 

GameObject

는 다음과 같습니다 :

import java.awt.Shape; 
import java.awt.Color; 
import java.awt.Rectangle; 

abstract class GameObject { 
//variables 
private Shape shape; 
private boolean alive; 
private Color colour; 

//getter/setter methods 
public void setShape(Shape shape){this.shape = shape;} 
public void setX(double x){this.x = x;} 
public void setY(double y){this.y = y;} 
public void setColour(Color colour){this.colour = colour;} 
public void incX(double i){this.x += i;} 
public void incY(double i){this.y += i;} 

public Shape getShape(){return shape;} 
public double getX(){return x;} 
public double getY(){return y;} 
public Color getColor(){return colour;} 

public Rectangle getBounds(){return shape.getBounds();} 


public GameObject() 
{ 
    setAlive(false); 
    setSpeed(0); 
    setFaceAngle(0.0); 
    setMoveAngle(0.0); 
    setX(0.0); 
    setY(0.0); 
    setColour(null); 
} 
} 

그리고 내 주요 소스 코드 :

import java.awt.*; 
import java.applet.*; 
import java.awt.geom.*; 
import java.awt.image.BufferedImage; 
import java.awt.event.*; 


public class Shipmovementtest extends Applet implements KeyListener{ 

    Graphics2D g2d; 
    Ship ship = new Ship(); 
    Shape shape; 
    public void init() 
    { 
     shape = ship.getShape(); 
      addKeyListener(this); 
    } 
    public void paint(Graphics g) 
    { 
     g2d = (Graphics2D)g; 

     AffineTransform identity = new AffineTransform(); 
     int width = getSize().width; 
     int height = getSize().height; 
     g2d.setColor(Color.BLACK); 
     g2d.fillRect(0,0,width,height); 
     g2d.translate(ship.getX(),ship.getY()); 
     g2d.setColor(Color.RED); 
     g2d.fill(shape); 


    } 
    public void keyTyped(KeyEvent e){} 
    public void keyPressed(KeyEvent e) 
    { 
     int ke = e.getKeyCode(); 
     switch(ke) 
     { 
     case KeyEvent.VK_LEFT: 
      ship.incX(-5); 
      break; 
     case KeyEvent.VK_RIGHT: 
      ship.incX(5); 
      break; 
     case KeyEvent.VK_UP: 
      ship.incY(5); 
      break; 
     case KeyEvent.VK_DOWN: 
      ship.incY(-5); 
      break; 
     } 
     repaint(); 
    } 
    public void keyReleased(KeyEvent e){} 
} 
+0

어떤 의미가 있습니까? 열쇠가 등록되지 않았거나 등록되었지만 우주선이 갱신되지 않았습니까? – arynaq

+0

@arynaq가 업데이트되지 않습니다. 'addKeyListener (this)'줄을 추가하는 것을 잊어 버렸지 만, 여전히 아무 일도 일어나지 않습니다. – imulsion

+0

페인트 대신 paintcomponent를 오버라이드하고 그래픽 컨텍스트를 변환하는 대신 (많은 모양에서이 작업을 수행해야하는 이미지 작업은 비용이 많이 든다) 모양을 변환하는 것이 좋습니다. – arynaq

답변

1

I는 다음과 같습니다 Ship라는 클래스가 나는 당신이 JPanel을 확장하고 있다고 생각했다;)

어쨌든 다음 대답은 https://stackoverflow.com/a/9505232/948652입니다.

public void init() { 
    addKeyListener(this); 
    setFocusable(true); 
    requestFocusInWindow(); 
} 
+0

작동! 고맙습니다. 한 가지 질문 : 왜 그것이 효과가 있습니까? – imulsion

+0

링크에 대해 설명합니다. – arynaq