如何使用箭头键在屏幕上移动图形?

2024-04-07

我正在尝试创建一个简单游戏的开始。我想做的第一件事是将图形导入到我的代码中并将其移动到屏幕上。我能够在屏幕上画一个球并移动它,但是当我从文件导入图形时,我无法移动它。我错过了什么或做错了什么?

import javax.swing.*;
import java.awt.Graphics;
import java.awt.*;
import java.awt.event.*;
import javax.swing.ImageIcon;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyListener;
import javax.swing.JPanel;
import javax.swing.Timer;

public class Game extends JPanel implements ActionListener, KeyListener {

    Timer t = new Timer(5, this);
    double x = 0, y = 0, velX = 0, velY = 0;
    private ImageIcon image;


    public Game(){
        setBackground(Color.WHITE);
        t.start();
        addKeyListener(this);
        this.setFocusable(true);
        setFocusTraversalKeysEnabled(false);
        image = new ImageIcon ("ship.gif");

    }

    public void paintComponent(Graphics g){
        super.paintComponent(g);
        ImageIcon i = new ImageIcon("C:\\Users\\Bryan\\Pictures\\ship.gif");
        i.paintIcon(this, g, 0, 0);

    }

    public void actionPerformed(ActionEvent e){
        repaint();
        x += velX;
        y += velY;

        if(x<0){
            velX = 0;
            x = 0;
        }

        if(x>750){
            velX = 0;
            x = 750;
        }

        if(y<0);{
            velY = 0;
            y = 0;
        }

        if(y>550){
            velY = 0;
            y = 550;
        }
    }

    public void up(){
        velY = -1.5;
        velX = 0;
    }

    public void down(){
        velY = 1.5;
        velX = 0;
    }

    public void left(){
        velX = -1.5;
        velY = 0;
    }

    public void right(){
        velX = 1.5;
        velY = 0;
    }

    public void keyPressed(KeyEvent e){
        int code = e.getKeyCode();

        if (code == KeyEvent.VK_UP){
            up();
        }

        if (code == KeyEvent.VK_DOWN){
            down();
        }

        if (code == KeyEvent.VK_LEFT){
            left();
        }

        if (code == KeyEvent.VK_RIGHT){
            right();
        }
    }

    public void keyTyped(KeyEvent e){}

    public void keyReleased(KeyEvent e){

//      velX = 0;
//      velY = 0;
        int code = e.getKeyCode();

        if (code == KeyEvent.VK_UP){
            velY = 0;
        }
        if (code == KeyEvent.VK_DOWN){
            velY = 0;
        }
        if (code == KeyEvent.VK_LEFT){
            velX = 0;
        }
        if (code == KeyEvent.VK_RIGHT){
            velX = 0;
        }
    }

}

我的司机在另一个班级,如下:

import java.awt.Color;

import javax.swing.JFrame;

public class GameDriver {

    public static void main(String[] args) {

        JFrame f = new JFrame();
        Game  g = new Game();
        f.add(g);
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(800,600);

    }
}

这里有两个大问题:

public void paintComponent(Graphics g){
    super.paintComponent(g);
    ImageIcon i = new ImageIcon("C:\\Users\\Bryan\\Pictures\\ship.gif");
    i.paintIcon(this, g, 0, 0);
}
  1. 您正在从文件内部读取内容paintComponent(...). Never这样做会不必要地减慢你的绘图速度。读取图像一次(可能在构造函数中),然后在绘图中使用存储的图像变量。 PaintComponent 方法应该用于绘画only,而且它应该是精益的、平均的和fast.
  2. 您正在 0, 0 处绘图always。如果要移动某些东西,请在变量位置绘制,然后更改变量保存的值并重新绘制。

另外:您应该使用键绑定来接受 Swing 应用程序中的击键,因为这将有助于解决焦点问题。

例如,请查看我的代码这个答案 https://stackoverflow.com/a/6887354/522444.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用箭头键在屏幕上移动图形? 的相关文章

  • 无法禁用 Firestore 中的离线数据

    从我的数据中删除数据后Firestore Database 这需要我的Android app一段时间后才意识到数据已被删除 我认为这是由于自动数据缓存而发生的 我的应用程序与离线使用无关 我想禁用此功能 我已将其添加到我的自定义中Appli
  • Javadoc 链接到其他类中的方法

    目前我正在使用以下 Javadoc 语法引用其他类中的方法 see link com my package Class method 据我从文档中了解到 这是执行此操作的正确方法 但现在到了有趣的部分 或者说令人沮丧的部分 当我生成这个 j
  • Android 服务 START_STICKY START_NOT_STICKY

    我需要让我的服务始终在后台运行 并使用 startService 函数启动我的服务 无论应用程序的状态如何 我都不想重新启动服务 这是我的观察 START STICKY gt 如果应用程序启动 则服务正在重新启动 当应用程序关闭时 服务也会
  • Spring MVC 和 Struts MVC 之间的区别 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Spring MVC 和 Struts MVC 之间的主要区别是什么 Spring MVC 和 Struts 之间的主要区别是 Spr
  • 如何在休眠中持久保存实体期间验证实体的约束

    我有一个带有字段名称的实体 我希望它不超过255 所以我这样定义它 Entity public class A implements Serializable NotNull Size max 255 private String name
  • 当我打印出数组列表的索引时如何删除最后一个逗号[重复]

    这个问题在这里已经有答案了 List
  • 具有多个字符串的列表视图

    我正在尝试创建一个包含多个字符串的列表视图 现在我有一个可以实现的功能 while i lt 10 GETS DATA FROM WEBPAGE ETC a DATAFROMWEBPAGE1 b DATAFROMWEBPAGE2 c DAT
  • 如何在 HashiCorp Vault 中安全地存储 Spring Boot 应用程序的机密?

    我已阅读以下教程 保险库配置 https spring io guides gs vault config 好的 我们安装了 Vault 服务器并放置了 2 对秘密属性 vault kv put secret gs vault config
  • 如何在 WebSphere Liberty Batch 中配置事务超时?

    的作用是什么javax transaction global timeout 我是否需要实施检查点 超时 中的方法检查点算法 服务器配置级别有什么东西吗 它如何与应用程序级别的设置进行交互 2016年12月2日编辑 重新设计并解释了为应用程
  • xclock 工作,X11 DISPLAY 设置但仍然 java.awt.HeadlessException:

    获取 java awt HeadlessException 似乎是一个非常常见的问题 并且 中已经讨论过 以下问题 没有 X11 DISPLAY 变量 这是什么意思 https stackoverflow com questions 662
  • BODMAS系统的加法和减法

    我一直在构建一个简单的公式计算器 但一直被加法和减法困扰 正如您应该知道的 在计算方程时 您遵循优先级算术规则 即括号 顺序 幂函数 除法 乘法 加法和减法 问题是加法和减法具有相同的优先级 因此您可以从左到右阅读 到目前为止 这是我的代码
  • Apache Camel - 路由中的事务

    我有一个关于 Apache Camel 的一般性问题 我无法找到聚合器是否已进行交易 如果是交易 交易是如何实现的 聚合的速度有多快 将消息发送到聚合器可以在事务中运行 您需要一个带有聚合器的持久存储来让传出消息充当事务 请参阅有关持久性的
  • 错误:类 kotlin.reflect.jvm.internal.FunctionCaller$FieldSetter

    我已尝试一切方法来消除此错误 但它不断出现 Class kotlin reflect jvm internal FunctionCaller FieldSetter can not access a member of class com
  • 使用会话空闲超时进行轮询

    我对 Tomcat 中的所有应用程序使用单点登录 我的要求是 我必须轮询应从后端获取的事务状态 但它也不应该影响会话的空闲超时 有人可以建议是否可以做点什么吗 Thanx 我不知道是否有标准方法可以做到这一点 如果没有 你可以写一个过滤器
  • 尝试用Java实现基于文本的Hangman游戏

    我需要检查用户输入的字母以及他们猜测的空格是否位于隐藏单词的特定位置 变量one等于用户猜测的空间索引 而letterGuess是他们猜测的字母 我的代码怎么错了 示例 秘密词是你好 hidden word is 用户猜测h 0 1 2 3
  • 如何根据受保护的 String doInBackground 方法中 AsyncTask 的结果调用 Toast.makeText() ?

    我从 AsyncTask 中的数据库中获取数据 如果它为空 我想吐司一个警告文本 我在 AsyncTask 中尝试过 但我了解到它不是在工作线程中调用的 这是我的 doInBackground 方法 protected String doI
  • 枚举

    我试图拥有一组扩展通用接口的枚举 例如 interface Fooable void someCommonMethod enum E1 implements Fooable some enumuerations and a definiti
  • Java:易失性足以使类线程安全?

    我有一个关于 Java 中 volatile 语句的问题 请看这个构造的例子 class Master Foo is a class with thread safe methods public volatile Foo foo clas
  • 如何在不下载子项的情况下从 Firebase 获取子项密钥?

    我有一个 Firebase 数据库 其中的节点 items 有很多子项 我想导入子项键的列表 由于每个子项都包含相当多我对此不感兴趣的数据 因此我想仅下载子项密钥 以最大程度地减少传输的数据量 为了便于说明 假设我有以下数据结构 然后我想获
  • 如何读取FTL文件中的JSONArray?

    我在我的 Java 文件中硬编码了以下 JSON 对象 JSONObject notificationInfoJson new JSONObject notificationInfoJson put title Payment Receiv

随机推荐

  • AngularJS 指令不起作用

    请在下面找到我写的指令 angular module netVogue directives directive set First Active function return function scope element attrs a
  • 更快的循环方法(“for”和“foreach”)? [复制]

    这个问题在这里已经有答案了 这个问题源于我问上一个问题的原因foreach循环 我有一个很大的字符串数组 比如说数千个 我想迭代该数组并且还能够根据特定条件进行突破 并且我需要最佳性能 一些示例代码 for int i 0 i lt arr
  • 单击按钮的用户脚本

    我想使用greasemonkey 单击 立即购买 按钮 UserScript name script namespace sc include version 1 require http ajax googleapis com ajax
  • 理解 kubernetes 容器上的“stdin: true tty: true”?

    我已经在网上到处做好了准备 但答案并没有得到彻底的解释 我希望这个问题如果得到解答 可以提供对此事的更新和彻底的解释 为什么有人会使用以下参数定义容器 stdin true tty true Also if docker run it 将执
  • jQuery 将光标向后移动“X”个空格

    我需要它 以便当按下按钮时 光标将 1 找到句子的结尾 2 将光标从句末向后移动 x 多个空格 x为变量 这是一个小提琴 gt jsFiddle http jsfiddle net jcP9q HTML span From the end
  • 时间复杂度单循环与多个顺序循环

    今天 我和我的同事就一个特定的代码片段发生了一场小争论 代码看起来像这样 至少 他想象中是这样的 for int i 0 i lt n i Some operations here for int i 0 i lt m i m is alw
  • 使用 javascript jQuery 突出显示 html 中的文本

    我想以编程方式突出显示 p 标记中的所有关键字 不区分大小写 如果关键字是 var keywords hello thanks goodbye this should be an array p hello world p 你好应该以蓝色突
  • 如何在 C# / winforms 中将图像裁剪为圆形?

    编辑 重复 问题中给出的代码没有为我解决问题 我遇到的主要问题是我不能简单地使用 CSS 和 radius 这很容易 这是在 winforms 页面 项目中加载的图像 我必须尝试将正方形 矩形图像变成圆形 我尝试了以下两种方法 结果将发布在
  • 在 C# 中强制保留两位小数[重复]

    这个问题在这里已经有答案了 我有这个问题 找不到解决方案 这非常简单 我不知道为什么我找不到解决方案 问题 如果一个值返回例如 16 60 在c 中我将读取 16 6 但我也需要0 因为paypal API只接受没有小数的值 或者它必须有小
  • pyproject.toml 没有安装我的包依赖项

    这是我第一次与pyproject toml我的印象是 当你列出包裹时abc作为项目的依赖项之一 该包的依赖项也会被安装 即使它们没有明确列出 这是我目前的pyproject toml build system requires setupt
  • 带有 varchar(255) PRIMARY KEY 的表会造成什么损害吗?

    我知道这不是一个好主意 但我想仔细检查一下这不会造成服务器崩溃等疯狂的事情 CREATE TABLE dbo Items Id nvarchar 255 NOT NULL PRIMARY KEY Value nvarchar max NOT
  • 可可豆荚和 Watchkit 扩展

    我尝试为我的应用程序构建一个 WatchKit 扩展 我将 pods 文件更新为如下所示 platform ios 8 0 use frameworks source https github com CocoaPods Specs git
  • 如何避免在连接 (.) 中使用未初始化的值?在 Perl v5.8.4 中 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions perl e use warning
  • 如何在 Matlab 中运行 java .jar

    我需要在 Matlab 中运行 Java jar 文件 我们将文件命名为 MyJar jar 如果有帮助的话 我正在运行 Java 1 8 0 121 b13 我尝试了不同的解决方案 并收到了这些相应的错误 java jar MyJar j
  • 动态启用/禁用 mvc 服务器端验证

    我有一个 mvc 表单multiple提交按钮 保存草稿 和 发布 目的是在单击 保存草稿 按钮并提交表单时跳过客户端 javascript 无阻碍 验证和服务器端验证 但如果单击 发布 按钮 我确实需要触发这两个验证 我的研究让我找到了一
  • 如何使用CSS的bootstrap删除屏幕底部生成的空白?

    我一直在尝试创建一个简单的 html 页面 我需要将 html 覆盖到整个页面高度 但底部留有小空间 在移动设备上打开时看起来更奇怪 请帮忙检查链接 https lp codes github io Random Quote Generat
  • 如何在 jquery 中的第一个子 div 之后追加元素?

    假设我有以下 div div div 1 div div 2 div div 3 div div 4 div div 我怎样才能在 jquery 或 javascript 中做到这一点 以便我可以在 mydiv 的第一个子元素之后附加一个元
  • 困惑于在 Azure 部署的 Web.config 中存储密码的正确过程是什么

    在将 MVC 5 应用程序放到 Azure 上时 我有过一次非常令人沮丧的经历 我一直在阅读以下页面 http www asp net identity overview features api best practices for de
  • 两列上的唯一键可交换

    请建议我如何比较地在两列上应用唯一键 即假设我们有两列 FK Col1 和 FK Col2 如果我们在两列中插入 2 和 6 那么我们应该无法在两列中再次插入 2 和 6 或 6 和 2 请建议我如何实现这一目标 提前致谢 创建一个计算列及
  • 如何使用箭头键在屏幕上移动图形?

    我正在尝试创建一个简单游戏的开始 我想做的第一件事是将图形导入到我的代码中并将其移动到屏幕上 我能够在屏幕上画一个球并移动它 但是当我从文件导入图形时 我无法移动它 我错过了什么或做错了什么 import javax swing impor