http://download.csdn.net/source/2086425
俄罗斯方块,已经完成
移动和旋转时有声音,可是当我定定按住不放时,久了声音会变得卡卡的,而且内存上涨,CPU使用率也上涨
播放声音在GameCanvas的keyPressed里

解决方案 »

  1.   

    估计是你用List容器装东西之后,没用施放用完的东西,造成每次从List里面取东西的时候都要循环很多次,当然玩得越久运行效率就越低了
      

  2.   

    我所说的内存上涨和CPU上涨并不是图形方块的问题,而是播放那个音频文件导致的,如果不播放那个文件根本没见有内存上涨的现象,因为图形方块消行后我都会检查并消除这个对象
      

  3.   

    定定按住不放时,keyPressed事件不停触发,因此一直在if (moveMusic != null){
    moveMusic.stop();
    System.gc();
    }
    moveMusic = new Music(System.getProperty("user.dir") + "/sound/move.wav");
    moveMusic.start();一直新建Music对象,因此声音卡卡,而且占用内存
    建议你在GameCanvas中设置boolean变量up_pressed,down_pressed等等
    然后在keyPressed事件中设置其为true,keyReleased事件中设置其为false;
    播放时以up_pressed等变量的值作为判断条件,若为false则不新建Music
      

  4.   


    恩,说的好,感觉是这个问题。
    用一个static变量吧,然后用的时候改就行了,毕竟同一时间播放两个不同声音的情况比较少吧。
      

  5.   

    你的意思是若为true就新建Music吗?这样不是和我现在的代码一样的吗?按住不放,变量肯定为true,那不就一直新建了吗
      

  6.   

    为true只是条件之一,另外的条件是Music.isAlive()
    你的music不是继承了Thread么?
    这样判断一下,播放音效的线程是否跑完了,保证每一个音效能够完整播放完,再由下一个按钮事件触发播放
      

  7.   


    我的代码是music不等于空就会终止,只是不能马上释放内存,也不可能控制得了吧,线程终止,声音就不会被播放了,可是不知道为什么会出现声音卡卡的
      

  8.   

    ......原来你希望声音卡卡的......
    但是new Music要有限度,至少也要在Music = new Music之前写个movemusic = null;
    我以前写的时候,一共就4种音效,因此都写成了静态对象,作为GamePanel的4个变量,
    就是用上面定的标志位决定是否播放
    你如果不想卡卡的,就事先建好,数量固定,不要每次都new,这样也不要用alive做判定了
      

  9.   

    不知道让moveMusice=null;有什么用