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();
}