키 누름에서 작은 삼각형을 움직이는 프로그램이 있습니다. 코드의 대부분은 작동하지만 키 누름이 배에 전혀 영향을 미치지 않습니다. 제 코드를 살펴보고 해결책을 찾도록 도와 주시겠습니까? 모든 도움을 주시면 감사하겠습니다. (응축) 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){}
}
어떤 의미가 있습니까? 열쇠가 등록되지 않았거나 등록되었지만 우주선이 갱신되지 않았습니까? – arynaq
@arynaq가 업데이트되지 않습니다. 'addKeyListener (this)'줄을 추가하는 것을 잊어 버렸지 만, 여전히 아무 일도 일어나지 않습니다. – imulsion
페인트 대신 paintcomponent를 오버라이드하고 그래픽 컨텍스트를 변환하는 대신 (많은 모양에서이 작업을 수행해야하는 이미지 작업은 비용이 많이 든다) 모양을 변환하는 것이 좋습니다. – arynaq