Java中如何使图像从左向右移动

2024-03-20

到目前为止,我已经创建了下面的类,但是,现在我想插入一个代码以使图像从左到右和从右到左滑动。我通常会使用滑动平台,但是当我尝试实现它时它不起作用。我还是一个java初学者,所以我很感谢你的帮助。

这是我的 Java 类的代码:

package game;

import city.soi.platform.*;

public class Enemy extends Body implements CollisionListener{

private Game game ;

    public Enemy(Game g){
        super(g.getWorld(), new PolygonShape(-27.0f,25.0f, -27.0f,-24.0f, 25.0f,-24.0f, 26.0f,25.0f, -27.0f,25.0f));
        setImage(new BodyImage("images/enemy.png"));
        g.getWorld().addCollisionListener(this);    
        game = g;
    }

    public void collide(CollisionEvent e) {
        if (e.getOtherBody() == game.getPlayer()){
         game.getPlayer().subtractFromScore(75);
         System.out.println("You have just lossed 75 Points! Current Score =  " + game.getPlayer().getScore());
         this.destroy();
     }
  }
}

需要明确的是,我希望每个人都将此类包含到从左到右移动的平台上。

非常感谢,

Moe


这在很大程度上取决于您的个人要求,但基本概念将保持不变。

Swing 中任何类型的动画都必须以不阻塞事件调度线程的方式执行。 EDT 上的任何阻止操作都将阻止处理任何重绘请求(除其他外)。

这个简单的例子使用了javax.swing.Timer每 40 毫秒左右(约 25 fps)滴答一次并更新小“球”的位置

更复杂的迭代需要专门的Thread。这使得整个过程变得更加复杂

  1. 您永远不应该从除 EDT 之外的任何线程更新/创建/修改/更改任何 UI 组件(或 UI 可能需要执行绘制的属性)
  2. 您无法控制油漆过程。这意味着重新绘制可能随时发生,如果您正在修改绘制过程渲染游戏状态所需的任何属性/对象,则可能会导致不一致。

.

public class SimpleBouncyBall {

    public static void main(String[] args) {
        new SimpleBouncyBall();
    }

    public SimpleBouncyBall() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (Exception ex) {
                }

                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new CourtPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class CourtPane extends JPanel {

        private Ball ball;
        private int speed = 5;

        public CourtPane() {
            Timer timer = new Timer(40, new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    Rectangle bounds = new Rectangle(new Point(0, 0), getSize());
                    if (ball == null) {
                        ball = new Ball(bounds);
                    }
                    speed = ball.move(speed, bounds);
                    repaint();
                }
            });
            timer.setRepeats(true);
            timer.setCoalesce(true);
            timer.start();
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(100, 100);
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g); 
            if (ball != null) {
                Graphics2D g2d = (Graphics2D) g.create();
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                Point p = ball.getPoint();
                g2d.translate(p.x, p.y);
                ball.paint(g2d);
                g2d.dispose();
            }
        }

    }

    public class Ball {

        private Point p;
        private int radius = 12;

        public Ball(Rectangle bounds) {

            p = new Point();
            p.x = 0;
            p.y = bounds.y + (bounds.height - radius) / 2;

        }

        public Point getPoint() {
            return p;
        }

        public int move(int speed, Rectangle bounds) {

            p.x += speed;
            if (p.x + radius >= (bounds.x + bounds.width)) {

                speed *= -1;
                p.x = ((bounds.x + bounds.width) - radius) + speed;

            } else if (p.x <= bounds.x) {

                speed *= -1;
                p.x = bounds.x + speed;

            }

            p.y = bounds.y + (bounds.height - radius) / 2;

            return speed;

        }

        public void paint(Graphics2D g) {
            g.setColor(Color.RED);
            g.fillOval(0, 0, radius, radius);
        }

    }

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

Java中如何使图像从左向右移动 的相关文章

随机推荐

  • Powershell替换存储在多个文件夹中的多个文件中的文本

    我想替换多个文件和文件夹中的文本 文件夹名称发生变化 但文件名始终为 config xml fileName Get ChildItem C config app config xml Recurse Get Content fileNam
  • 如何通过 Cloud DNS api 将自定义域映射到应用程序引擎应用?

    是否有任何文档解释如何仅通过 Cloud DNS API 或任何其他 Google Cloud API 将自定义域映射到 App Engine 上托管的应用 我已经为 www my domain com 添加了 CNAME 记录 指向 gh
  • 如何在asp.net中删除.aspx .asmx后缀

    我们的大部分应用程序都是基于asp net 所以所有的 url 都会有后缀 如 aspx 或 asmx 我想知道是否有什么想法可以删除它们 查看以下教程之一 URL路由 ASP Net 4 0 及更高版本 使用 ASP NET 4 Web
  • 使用java下载zip文件?

    我正在使用 Java 从 Web 服务器下载 zip 文件 但不知何故我在每个文件中丢失了大约 2kb 我不知道为什么 因为相同的代码可以很好地处理其他格式 例如文本 mp3 等 任何帮助表示赞赏 这是我的代码 public void do
  • 如何折叠区域中的空白?

    假设我有这个列表文本文件 field1 variable length field variable length field aaaaaa aaaa aaaaaaaaa bbbbbb bbbbbbbbbbbbbbbbbbbb bbbb 我
  • 如何按顺序执行多个方法?

    强制方法按顺序执行的最佳方法是什么 我有三个方法 但我希望方法1在方法2之前完成 然后当方法2完成时 执行方法3 Example void Method1 void Method2 void Method3 self Method1 sel
  • 通话中状态栏如何影响 ViewController 视图大小?

    我试图理解如何view关联到一个UITabBarController UINavigationController or UIViewController当通话状态栏切换时做出反应 我的问题是它们的行为似乎不同 这会给我带来副作用 我制作了
  • 错误:无法启动新线程

    我有一个使用以下配置运行的网站 Django mod wsgi 阿帕奇 在一个用户的请求中 我向另一个服务发送另一个HTTP请求 并通过python的httplib库解决了这个问题 但有时此服务得不到答复的时间太长 并且 httplib 的
  • 通过 URL 自动登录用户

    我每周向网站的注册会员发送一封邮件 其中包含该网站上私人页面的 URL 出于可用性目的 我不希望用户在单击 URL 后必须提供凭据 我正在使用 ASP NET 会员提供程序模型 Question 我如何实现这一点 以便用户可以通过单击专门的
  • 使用传递的参数附加方法后分离事件处理程序

    我需要将参数 在 C 中 传递给事件处理程序 然后能够分离事件处理程序 我附加事件处理程序并传递参数 map MouseLeftButtonUp sender e gt map MouseLeftButtonUp2 sender e sho
  • Python 导入机制

    我有两个相关的 Python 导入 问题 它们很容易测试 但我想要语言定义的答案而不是特定于实现的答案 而且我也对样式 约定感兴趣 所以我在这里问 1 如果模块 A 导入模块 B 模块 B 导入模块 C 模块 A 中的代码是否可以在不显式导
  • 如何获取 Binder 事务缓冲区的内容以进行故障排除

    有没有办法以编程方式或通过调试工具来了解 Binder 事务缓冲区中保存的当前事务 有时 通常在运行数小时 数天后 我的应用程序会崩溃并出现如下错误跟踪 08 30 09 49 57 459 1879 1904 E JavaBinder F
  • 具有行为奇怪的多值参数的存储过程

    我在 SQL Server 中创建了一个存储过程来为 SSRS 提供数据 以使其能够接受多个值 我已经创建了它 当我在报告中使用它或在 SQL Server 中执行它时 我收到以下错误消息 消息 207 第 16 层 状态 1 第 35 行
  • 如何避免电子邮件自动化的 Outlook 安全警告?

    我正在尝试使用 VBA 从 Excel 2010 发送 Outlook 电子邮件 Stack Overflow 上的大多数答案似乎都没有使用 VBA 来避免 Outlook 安全警告的方法 对于 Outlook Excel 2010 也没有
  • Swift - 从地图注释执行 Segue

    我的地图上有 1 个图钉 我需要将注释标题传递给另一个 UIView 在这种情况下是 ikinci Ekran swift 但我无法这样做 这是我的代码的segue部分 我不知道如何segue所选注释的标题 我只粘贴了相关部分的代码 cla
  • 从数据库中检索mp3文件

    我有一个关于如何从数据库中检索存储为 byte 数组的 mp3 文件并将其显示在表单中并让用户下载 播放的问题 唔 这确实可以做到 但如果它是 RDBMS 您确实应该重新考虑解决方案 通常 数据库不是为使用大型二进制对象而设计或优化的 并且
  • 首次打开时 Colorbox 无法以正确的高度打开

    所以我正在使用colorbox http colorpowered com colorbox 联系表单插件 我只是默认的 colorbox 属性 所以它应该自动调整到它包含的 div 对吗 首次加载时 此颜色框内容上有一个小的垂直滚动条 我
  • Android 虚拟键盘监听器

    虽然我之前问过这个问题 但没有得到任何正确的答案 当编辑文本聚焦时 我有一个 EditText android 虚拟键盘弹出 我已使用属性窗口中的 ime 选项将 完成 按钮添加到键盘 现在我想通过按 完成 按钮来执行一些操作 这个怎么做
  • 使用 Html 链接将 PHP GET 数据发送到服务器

    我有一段时间没有写 PHP GET 请求了 所以我有点生锈了 但是如何使用 Html 链接发送 GET 数据 如果我使用 jQuery 的 get 方法 我知道该怎么做 但我只是想知道是否有更简单的方法使用 Html 中的 href 或类似
  • Java中如何使图像从左向右移动

    到目前为止 我已经创建了下面的类 但是 现在我想插入一个代码以使图像从左到右和从右到左滑动 我通常会使用滑动平台 但是当我尝试实现它时它不起作用 我还是一个java初学者 所以我很感谢你的帮助 这是我的 Java 类的代码 package