用java做个游戏,一个球在面板中移动时,我是不断在timer中改变球的坐标再刷新屏幕。
这样的效果总感觉有点停滞,一顿一顿,有时有点 闪烁。我想知道如何实现像flash动画里那么流畅的移动效果???双缓存可以减少闪烁,怎末在面板里用双缓冲???还有什么其他的方法可以保证移动的流畅性???

解决方案 »

  1.   

    移动物体应该都是变坐标吧。双缓存是默认的,在JPanel构造器里的重载版本里有选项。
      

  2.   

    一般如果是paintComponent都不会不流畅啊 只要代码编排没有偏差
    在哪使用双缓存没有区别 只要有图形上下文接口的引用g.drawImage(memoryImage, 0, 0, this);缓存中的绘制通过获得memoryImage的Graphics来进行
      

  3.   

    重写 paintComponent(Graphics g);在组件 调用repaint()后会跳进paintComponent方法执行,重绘工作可以在这写,没怎么出现 闪烁的现象 !以前也出现过类似的现象,现在觉得,应该是代码写的有问题的!
      

  4.   

    我实现了一个类似UML的工具,一些组件 在容器里拖动,都是通过修改坐标来实现的,闪烁似乎不明显!
      

  5.   

    那我再问两个问题,解决了我会再加分,谢谢帮助。1.用键盘的上下左右键控制物体移动时,我在keypressed里根据键值改变物体坐标,然后再repaint();
    但是我运行起来,总觉得键盘操作有点响应慢,比如按了一个键,换一个的时候,物体总有个间隔时间。不流畅。
    网络上有些游戏,用上下左右控制时就很流畅,相信大家都玩过。2.让物体自由移动,我使用了timer,timer里改变物体坐标,比如增加一个小距离LEN,然后把timer设置延迟为
    DELAY。
    我想物体移动的很快,我就把DELAY都设置到10了,但是我为了让物体移动连续性,LEN就设置的很小,比如5
    这样一来,移动就慢了。
    怎样可以做到平衡,让物体移动的快又连续?
      

  6.   

    2 可以将LEN设为小数,计算完移动距离后,将距离转换成整数,这样可以增加移动的连续性。速度方面只要改变DELAY就可以了,不要改变LEN,最好让LEN使用常量
      

  7.   

    2的个问题有点意思楼主是说delay == 10了还是慢吗?
    那按楼上的说法就不行了,小数来增加距离,那么一次移动就太不明显,也会导致慢
      

  8.   

    可以使用双缓冲机制,在内存里放一个MemoryImage,每次在后台将新的内容画到这个里面,然后drawImage(MemoryImage),这样就不会闪了。不过会多吃点内存。
      

  9.   

    Image offScreenImage = null;
    /**
     * 重写父类Frame的update方法用于实现双缓冲
     * 用update来截住paint
     */
    public void update(Graphics g) {
    if(offScreenImage == null) {
    offScreenImage = this.createImage(GAME_WIDTH, GAME_HEIGHT);//创建背景图片
    }
    Graphics gOffScreen = offScreenImage.getGraphics();//获得背后图片的画笔
    Color c = gOffScreen.getColor();//获取背景色
    gOffScreen.setColor(Color.green);//
    gOffScreen.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT);
    gOffScreen.setColor(c);//重刷新背景色
    paint(gOffScreen);
    g.drawImage(offScreenImage, 0, 0, null);
    }