Java小程序不会移动图像

标签 java applet awt 2d-games

我正在尝试用 Java 制作一种太空入侵者游戏,首先让 PNG 宇宙飞船在屏幕上移动。它出现在它应该出现的地方,只是它拒绝移动。该程序编译良好,并且 Eclipse 没有给我任何错误/警告。谁能告诉我我做错了什么?

这是我的代码:

import java.awt.*;
import java.net.*;
import java.awt.geom.*;
import java.applet.*;
import java.awt.event.*;

public class DrawImage extends Applet implements KeyListener{
    private static final long serialVersionUID = 1L;
    private Image image;
    private int keycode;
    AffineTransform identity = new AffineTransform();
    private boolean keyleft = false;
    private boolean keyright = false;
    private URL getURL(String filename){
        URL url = null;
        try
        {
            url = this.getClass().getResource(filename);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return url;
    }
    public void init()
    {
        image = getImage(getURL("spaceship.png"));
        addKeyListener(this);
    }

    public void paint(Graphics g)
    {
        Graphics2D g2d = (Graphics2D)g;
        //fill background with black
        AffineTransform trans = new AffineTransform();
        g2d.setColor(Color.GREEN);
        g2d.fillRect(0,0,getSize().width,getSize().height);
        g2d.drawImage(image,320,240,this);
        trans.setTransform(identity);
        if(keyright == true)
        {
            trans.translate(-10,0);
            keyleft = false;
        }
        else if(keyleft == true)
        {
            trans.translate(10,0);
            keyright = false;
        }
    }
    public void keyPressed(KeyEvent e)
    {
        keycode = e.getKeyCode();
        if(keycode == KeyEvent.VK_LEFT)
        {
            keyleft = true;
        }
        else if(keycode == KeyEvent.VK_RIGHT)
        {
            keyright = true;
        }
        repaint();
    }
    public void keyTyped(KeyEvent e){}
    public void keyReleased(KeyEvent e){}

}

最佳答案

您应该在您的paint()方法中将变换设置为您的g2d:

g2d.setTransform(trans);

所以整个方法是:

  public void paint(Graphics g)
    {
        Graphics2D g2d = (Graphics2D)g;
        //fill background with black
        AffineTransform trans = new AffineTransform();
        g2d.setColor(Color.GREEN);
        g2d.fillRect(0,0,getSize().width,getSize().height);
        trans.setTransform(identity);
        if(keyright == true)
        {
            trans.translate(-10,0);
            keyleft = false;
        }
        else if(keyleft == true)
        {
            trans.translate(10,0);
            keyright = false;
        }
        g2d.setTransform(trans);
        g2d.drawImage(image,320,240,this);
    }

关于Java小程序不会移动图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14182470/

相关文章:

java - 在 catch block 中重新抛出异常是否有意义?

java - 如何在 Java Applet 中即时显示图像?

firefox - JApplet/JPanel 没有收到 KeyListener 事件!

java - 鼠标控制形状绘制

java - 无法使用书中的 java AWT 示例添加复选框组

java - 创建包含外部文件的 Runnable Jar

java - java 程序出现问题

java - Tomcat Servlet Jnotify目录监控

java - 除了 JSObject 之外,java 1.1 中还有另一种方法来处理 Applet 中的 cookie

Java 打印机 API