repaint能多次调用吗,如果能,那为什么我不能实现好多球的效果。大神请点击标题

问题描述

主类GameFrame[/u]我做的这是一个台球反弹的动画,我目的很简单,我就是想使窗口内实现好多球有起点出发然后碰壁反弹,现在我只实现了4个球的效果,每增加一个球就要多些好多行代码,请大神帮我解决这个问题,问题点请往下看packagecn.bdqn.lastGame;importjava.awt.Color;importjava.awt.Font;importjava.awt.Frame;importjava.awt.Graphics;importjava.awt.Image;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjava.util.Random;/***游戏窗口类*@authordell**/publicclassGameFrameextendsFrame{//GUI编程:AWT,swing等Imagemoon_img=GameUtil.getImage("images/moon.png");Randomrd=newRandom();/***加载窗口*/publicvoidlaunchFrame(){setSize(600,600);setLocation(0,100);setVisible(true);setIconImage(moon_img);newPaintThread().start();//启动线程addWindowListener(newWindowAdapter(){@OverridepublicvoidwindowClosing(WindowEventarg0){//TODOAuto-generatedmethodstubSystem.exit(0);}});}privatedoublexyz=30;privatedoublex0=xyz,y0=xyz;privatedoubledegree0=Math.PI/3;//[0,2pi]privatedoublex1=600-xyz,y1=xyz;privatedoubledegree1=Math.PI/3;//[0,2pi]privatedoublex2=xyz,y2=600-xyz;privatedoubledegree2=Math.PI/3;//[0,2pi]privatedoublex3=600-xyz,y3=600-xyz;privatedoubledegree3=Math.PI/3;//[0,2pi]@Overridepublicvoidpaint(Graphicsg){Colorc=g.getColor();//g.drawLine(100,100,200,200);//g.drawRect(100,100,200,200);//g.drawOval(100,100,200,200);Fontf=newFont("宋体",Font.BOLD,30);g.setFont(f);g.fillRect(0,0,600,600);g.setColor(Color.blue);g.drawString("制作人:北京企鹅",150,60);//g.drawImage(moon_img,(int)x0,(int)y0,null);g.setColor(Color.green);g.fillOval((int)x0,(int)y0,20,20);g.setColor(Color.red);g.fillOval((int)x1,(int)y1,20,20);g.setColor(Color.BLUE);g.fillOval((int)x2,(int)y2,20,20);g.setColor(Color.orange);g.fillOval((int)x3,(int)y3,20,20);g.setColor(c);//x+=3;//y+=3;x0=GamePath.linePath(x0,y0,degree0)[0];y0=GamePath.linePath(x0,y0,degree0)[1];degree0=GamePath.linePath(x0,y0,degree0)[2];x1=GamePath.linePath(x1,y1,degree1)[0];y1=GamePath.linePath(x1,y1,degree1)[1];degree1=GamePath.linePath(x1,y1,degree1)[2];x2=GamePath.linePath(x2,y2,degree2)[0];y2=GamePath.linePath(x2,y2,degree2)[1];degree2=GamePath.linePath(x2,y2,degree2)[2];x3=GamePath.linePath(x3,y3,degree3)[0];y3=GamePath.linePath(x3,y3,degree3)[1];degree3=GamePath.linePath(x3,y3,degree3)[2];}/***定义一个重画窗口的线程类,是一个内部类*@author昭**/classPaintThreadextendsThread{publicvoidrun(){while(true){xyz=30;repaint();xyz=100;repaint();xyz=250;repaint();try{Thread.sleep(1000);}catch(InterruptedExceptione){e.printStackTrace();}}}}publicstaticvoidmain(String[]aar){GameFramegf=newGameFrame();gf.launchFrame();}}

在内部类里我想改一次xyz的值球的初始位置就改变了因此航线也变了,然后调用一次repaint方法就有4个球再跳;再改一次xyz的值然后再调用一次repaint方法,依次类推,这样按道理就可以出现好多球,然后没循环一次球就跑一步,然后就是好多球乱跳,结果并不是我想的那样,求解?其他两个工具类如下想看可以看下:GamePath类packagecn.bdqn.lastGame;publicclassGamePath{publicstaticdouble[]linePath(doublex,doubley,doubledegree){x+=3*Math.cos(degree);y+=3*Math.sin(degree);if(y>600-20||y<30){degree=-degree;}if(x<0||x>600-30){degree=Math.PI-degree;}returnnewdouble[]{x,y,degree};}}

GameUtil类packagecn.bdqn.lastGame;importjava.awt.Image;importjava.awt.image.BufferedImage;importjava.io.IOException;importjava.net.URL;importjavax.imageio.ImageIO;/***游戏开发中常用的工具类(比如:加载图片等方法)*@author昭**/publicclassGameUtil{publicstaticImagegetImage(Stringpath){URLu=GameUtil.class.getClassLoader().getResource(path);BufferedImageimg=null;try{img=ImageIO.read(u);}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}returnimg;}}

解决方案

本帖最后由 sinat_23447647 于 2014-12-30 17:12:06 编辑

时间: 2024-10-26 13:34:22

repaint能多次调用吗,如果能,那为什么我不能实现好多球的效果。大神请点击标题的相关文章

qt-Qt中调用windowsAPI实现关机功能时出现了这种错误,哪位大神可以教一下,万分感谢。

问题描述 Qt中调用windowsAPI实现关机功能时出现了这种错误,哪位大神可以教一下,万分感谢. 解决方案 http://www.cnblogs.com/Romi/archive/2012/05/24/2516996.html 添加库:LIBS +=User32.LIB http://blog.csdn.net/ys_073/article/details/7770693 这里需要Qt Creator安装目录下的mingwinclude的windows.h 解决方案二: include wi

repaint()方法为什么不能调用?

调用display()时打印出GamePanel's display! 但不显示GamePanel's PrintComponent,也就是System.out.println("GamePanel's PrintComponent")这条语句没有执行,repaint()方法为什么不能调用方法 printComponent(Graphics g) RepaintDemo import java.awt.Graphics; import javax.swing.JPanel; publi

代码-请问大神们Java里的JPanel.repaint和JFrame.repaint的区别是什么?

问题描述 请问大神们Java里的JPanel.repaint和JFrame.repaint的区别是什么? Java小白一个,在看headfirst JAVA,书上有一个小的动画代码,是每个几秒画一个圆 然后圆的位置不断变化,书上故意用了JPanel.repaint这个方法,结果产生了运动痕迹, 然后书上提出的解决方法是repaint的时候先画一个大的白色的正方形把原来的圆盖住, 然后才画下一个圆.我实践的时候突发奇想用了JFrame.repaint来代替这个 JPanel.repaint,结果发

线程-java调用sqlplus下载数据库文件到本地后,如果用java关闭此进程,大神戳进来

问题描述 java调用sqlplus下载数据库文件到本地后,如果用java关闭此进程,大神戳进来 1.用java调用sqlplus,将指定的存储过程下载到本地作为文本文件2.在java读取此本地文件做处理,处理后写1个新的文本文件在本地我将上面2个步骤用2个进程thread1,thread2因为步骤2必须等步骤1结束才能执行,所以我调用thread1.start()thread1.join()以及thread2.start().但是运行结果是每次都只执行出了步骤1,步骤2执行不出来.考虑是否在步

jsp-JSP中编写JS代码过程中,调用了一个JSP表达式,发现一个问题,麻烦各位大神解答

问题描述 JSP中编写JS代码过程中,调用了一个JSP表达式,发现一个问题,麻烦各位大神解答 背景: 楼主使用Myelipse新建了一个Web项目,在编写一个JSP文件的时候遇到一个问题,首先是使用了img,并且写了一个事件,代码如下: <imgclass="poke" src="poke/back.jpg" title="hit" id="play_id_3" onClick="change_pic()&qu

java 调用wsdl接口 大神帮忙讲解一下

问题描述 java 调用wsdl接口 大神帮忙讲解一下 现有一接口是c++写的 java调用他如何调用这个接口?在浏览器上显示为 解决方案 参考下:http://yang-min.iteye.com/blog/600172

系统调用-请大神推荐书籍:关于C++调用外部程序的书籍

问题描述 请大神推荐书籍:关于C++调用外部程序的书籍 现在我想用C++调用外部函数,应用程序,和系统程序 本人看的书不多,求有系统详细讲解这方面相关知识的书籍推荐,最好是基于Linux环境的,比如:调用系统安装的其它程序,我想系统地学习这方面的知识,求推荐书籍 请大神指教,谢谢啦 解决方案 本质上你说的其实是linux下常见的命令行.不同的linux发行版不同.比如rs系,一般通过yum安装,Ubuntu用apt-get.你可以看对应的Linux手册.<鸟哥的Linux私房菜>是一本比较经典

求大神,请问如何在matlab里调用wordnet?

问题描述 求大神,请问如何在matlab里调用wordnet? 1如题,请问如何在matlab里调用wordnet?在网上又看到用C++.java.python调用的,但是没看到如何用matlab调用的,求大神帮助,最好能有示范的代码,谢谢! 解决方案 http://www.cnblogs.com/KingKou/p/4121373.html

求大神给一套 ibm 总线 调用webservice接口 实现流程 以及ibm总线产品

问题描述 求大神给一套 ibm 总线 调用webservice接口 实现流程 以及ibm总线产品 需求是 自己的业务系统提供多个webservice服务,有另外其它若干个业务系统去调用这些服务.公司现在买了ibm的总线产品,希望把这些webservice服务放在ibm总线上,而其他业务系统直接调用ibm总线即可!求指点.求详解.以前没接触过.