Java 用仿射变换移动矢量图像

Java 用仿射变换移动矢量图像,java,vector-graphics,affinetransform,Java,Vector Graphics,Affinetransform,我有一个程序,它试图在按键时移动一个小三角形。大部分代码都在工作,但按键根本不会影响飞船。你能看看我的代码并帮我找到解决方案吗?感谢所有的帮助 我有一个叫做Ship的类,它看起来像这样: import java.awt.Polygon; import java.awt.Color; public class Ship extends GameObject{ //position of vector points arrays private int[] xpoints = {

我有一个程序,它试图在按键时移动一个小三角形。大部分代码都在工作,但按键根本不会影响飞船。你能看看我的代码并帮我找到解决方案吗?感谢所有的帮助

我有一个叫做
Ship
的类,它看起来像这样:

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.*;
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){}
}

我以为你在扩展一个JPanel;)

不管怎样,下面的答案对你有用

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

你说不影响是什么意思?密钥未注册或已注册但船舶未更新?@arynaq未更新。我忘了添加行
addKeyListener(this)
,但即使这样,仍然没有任何效果。我建议重写paintcomponent而不是paint,而不是翻译graphicscontext(成像必须对许多形状执行此操作,成本也很高),只翻译形状。@arynaq我不知道你的意思。请张贴一个代码示例作为答案。
public void init() {
    addKeyListener(this);
    setFocusable(true);
    requestFocusInWindow();
}