当前位置: 首页 > 知识库问答 >
问题:

Java动画

袁泰平
2023-03-14

我正在用Java编写一个游戏,我开始使用drawRect()方法来表示玩家、敌人和射击。一切都很好。然后我决定试着装腔作势。我发现自己在创造。每个对象的png图像,并使用Graphics2D drawImage()方法。一切开始放缓。有没有其他方法可以加快这一进程

我的动画基于摆动计时器

    public void paint(Graphics g){
    super.paint(g);
    Graphics2D g2d = (Graphics2D)g;
    player1.paintShips(g);
    g2d.drawImage(bGround, 14, 14, this);
    try{
        for(Shot s: liveRounds){ //liveRounds is an ArrayList of Shots
            if(!inBounds.contains(s.getRect()) || villains.collision(s)){
                if(villains.collision(s)){
                    villains.collided(s, this);
                }
                liveRounds.remove(s);
                roundCount--;
            }
            else{
                s.paintShot(g, this);                   
            }
        }
    }catch(ConcurrentModificationException e){};
    villains.paintEnemyGrid(g, this);
    g2d.setColor(Color.cyan);
    g2d.draw(hitZone1);
    g2d.setColor(Color.red);
    g.drawString("X: " + player1.getX(1) + "  Y: " + player1.getY(1), 370, 150);
    g2d.draw(inBounds);
    g.drawString(score + "", 440, 40);
    g.dispose();
} 

有关于动画的提示或教程吗?谢谢

共有1个答案

锺离刚洁
2023-03-14

10毫秒延迟为每秒100帧。这几乎肯定太快了。

此外,如果您想在迭代时从Collection中删除对象,则需要这样做:

Iterator<T> itr = collection.iterator();
while(itr.hasNext()) {
    T obj = itr.next();
    if(removeObj) {
        itr.remove();
    }
}

ContoptModificationExceptions导致非确定性行为。您需要避免它们,而不是忽略它们。

 类似资料:
  • 我一直在使用Swing编写一个简单的动画,其中有一个JFrame,只要JFrame收到鼠标点击,就会开始一个涟漪动画。我使用一个内部动画类,该类为每个动画扩展JPanel,以防同时播放多个动画(我不知道这是否是最好的方式)。当我单击时,我向JFrame添加一个新动画,并将单击的坐标传递给动画。但是,动画重绘/绘制组件方法不起作用。在我的理解中,repaint应该调用paint/paintCompo

  • 因此,我正在创建一个基本的应用程序,我希望在屏幕底部有一个JLabel,从左下角开始,在设定的时间内移动到右下角,动画风格,并在中心有一个静态图像。为此,我使用BorderLayout创建了一个带有JPanel的JFrame。在BorderLayout.Center中添加了一个带有ImageIcon的JLabel,在BorderLayout.South中添加了一个JPanel。我的代码虽然编写得很

  • 问题内容: 我是新手,并且使用Java swing设计接口。我希望抽屉在单击按钮时以滑动动画拉出。首先,是否可以这样做,如果可以,我该怎么做。谢谢。对于某些特定的方法信息,我将不胜感激。 问题答案: 根据要实现的目标,您可以采用多种可能的方法。 基本方法是简单地绘制图形和摆动 这样您就可以简单地更新一个变量,该变量将作为绘制大小的基础,例如… 这真的很基础,并且没有考虑到概念变慢/变慢等问题。对于

  • 问题内容: 我从来没有能够使Java 6启动屏幕正常工作。 我已经尝试了所有我能想到的。我的manifest.mf包含: 我将文件“ 放在源代码树的根目录中,并验证它是否已放入生成的.jar文件的根目录中。我还在不同的地方尝试过,再次确认其在jar中的位置,并将路径放入SplashScreen-Image中。 它永远不会出现。 尝试在运行时获取启动屏幕失败: 飞溅对我而言始终为空。 关于我在这里缺

  • 问题内容: 我想在应用程序中显示GIF动画图像。我发现,Android本身并不支持动画GIF的困难方式。 但是,它可以使用AnimationDrawable显示动画: 开发>指南>图像和图形> Drawables概述 该示例使用在应用程序资源中另存为帧的动画,但是我需要直接显示动画gif。 我的计划是将动画GIF分解为帧,并将每个帧作为可绘制对象添加到AnimationDrawable中。 有谁知

  • 所以我在谷歌上搜索了这个,但我能在上面找到任何东西:我在代码中调用了这个方法 然后,我添加了一个JProgressBar,称为进度条,并在单击GUI上的按钮时调用此代码: Progresslabel只是一个显示进度的标签。现在,当我这样做时,进度条显示如下: http://i.imgur.com/gXp5ByH.png 与其他应用程序上的情况不同: http://i.imgur.com/M61Cd