Java究竟怎么玩?http://blog.csdn.net/cping1982

菩提本无树,明镜亦非台,本来无一物,何处惹尘埃

用户操作
[即时聊天] [发私信] [加为好友]
鹏凌三千(cping1982)ID:cping1982
150208次访问,排名520好友15人,关注者28
机密……
cping1982的文章
原创 138 篇
翻译 0 篇
转载 39 篇
评论 303 篇
鹏凌三千(cping1982)的公告
本博评论删除规则如下:

1、辱骂性发言,无视其辱骂对象,一律删。

2、登录发表的评论,不违背第一条者一律不删。非登录发表的评论,过激者删。

3、若发生例外情况,则为CSDN博客系统自动删除。

声援SOFF|声援珊瑚虫:如果你是珊瑚虫用户,请坚决力挺声援珊瑚虫!

平生进退如飙风,一睨人才天下空。独向苍天横冷剑,何必生我惭英雄。

本人有效BLOG:

cping1982

ceponline

音乐:

风姿花传

ドラグ.スレイブ

ヒカルの碁

Believe

世界で一番ヤバイ恋

あんなに一緒だった

精忠报国

谁是大英雄

随遇而安

明天会吹什么风

逍遥游

爱江山更爱美人

最近评论
刘:很佩服大哥你,真的太NB了。小弟我现在在自学java,觉得困难重重,看了像你们这些牛人的Blog后真的不敢相信我的前途... ...
哎,真的很羡慕大哥你,不知道能写点东西指导交流下吗,说点自己的java学习心路也行。
望赐教!小弟叩首拜上~
liuxf2006@163.com
qingtianzhu:你好,我想购买你的软件,但是一直联系不上你,请告知联系方式,谢谢!
yao_ju_xian:看着挺好的啊,我现在也在学Java,不过我是学oracle那块的,我觉得你做的相当好了,能不能教教我啊?谢谢,我的邮箱是yaojuxian1988@yahoo.com.cn,非常感谢你能赐教!
.net:啥也不说支持楼主B/S小白
原理都不懂就在这里叽叽呀呀的
多回去看几年书吧
真像是在看笑话“呵呵”
如果易语言真有那么“好”没有中国人不支持的
可是(*^__^*) 嘻嘻……
明白的都明白
不明白的自己琢磨去吧
kiki820819:asdasd
文章分类
收藏
    相册
    Java的PC游戏开发
    Java中的A*(A star)寻径实现
    Java仿雷电及其源代码
    Java制作的类祖码游戏-数字祖码
    Java实现窗体中角色逐渐风化效果
    Java版吃豆游戏
    人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[2]——踏破红尘
    Java[伪]寻径追踪实现
    JAVA中[人工无脑]系统(chatbot)的实现
    Java中2.5D游戏(斜45度角)的设计与实现(1)
    Java中2.5D游戏(斜45度角)的设计与实现(2)
    Java仿太阁立志传5
    JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)
    JAVA实现拼图游戏
    Java来做马里奥[0]—让精灵再次舞动
    Java来做马里奥[1]—木叶传承
    Java来做马里奥[2]—食不厌精
    Java来做马里奥[3]—杂兵登场
    Java模拟桌球打击处理及绘制
    Java汉诺塔测试
    Java炸弹人实现及源码
    人生如梦游戏间,JAVA游戏开源开发讲座[番外篇]之AVG开发——皮影
    人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[0]——月晕础润
    人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[1]——风云初现
    人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[3]——邯郸学步
    人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[4]——一步莲华
    人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[5]——一树双花
    人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[6]——走马观花
    史上最扯Java图形绘制(J2SE)之一JAVA动画效果
    沉寂的国人开源项目
    bo-blog(blog系统,php项目)
    DockPanel Suite [Microsoft .NET Framework Winform UI]
    Hocate web framework[web框架]
    Loonframework-DAO[持久层框架]
    Loonframework-GAME[游戏框架,尚未发布]
    Loonframework-WEB[web框架,尚未发布]
    Luntbuild(软件管理工具)
    magike(php博客)
    myseelite(p2p流媒体系统,c++项目)
    newxy(新坐标)[web框架]
    opencrx(crm系统)
    redlion(web框架)
    x2blog(asp.net博客系统)
    YOYOPlayer(音乐播放器)
    袋鼠egg(服务器)
    经典Blog
    # gzfqh的专栏 →底层代码研究(病毒及汇编)(RSS)
    # java 3D 游戏编程(RSS)
    ApoGames(德国某人的Java游戏作品展示)
    Struts框架应用
    Struts框架应用~
    千里冰封[JAVA 浓香四溢]
    网络安全圈子
    经典站点
    Google
    IBM中国站
    JavaGame开发论坛
    JAVA开源大全
    Java爱好者
    Struts标签文档
    SUN 中国社区
    中国IT实验室
    数据库专区
    偶的其它应用实例
    C#将图像文件压缩为AVI文件播放
    Java&.Net虚拟机精简(GreenJVM&GreenDotNet发布)
    Java图形程序水纹倒映效果
    Java输出竖排古典文字
    .NET在线漫画下载程序
    C#转换AVI文件为BMP文件
    ClassLoader调用外部jar包
    ExtJS2.0开发与实践笔记[0]——初识ExtJS
    ExtJS2.0开发与实践笔记[1]——ExtJS中的Dialog与Form
    ExtJS2.0开发与实践笔记[2]——Ext中的Layout
    ExtJS2.0开发与实践笔记[3]——Ext中的Menu
    ExtJS2.0开发与实践笔记[4]——Ext中的动画处理
    JavaFx实现(1)-渐变效果
    JavaFx实现(2)-随机图形绘制
    Java中DAO的实现
    Java中Image翻转操作
    Java中将byte[]转为Blob对象
    Java中的A*(A star)寻径实现
    Java制作绿色软件(GreenJVM_0.1.0发布)
    JAVA图形操作类
    Java图形程序中的对话逐字显示实现
    Java实现任意文件在bmp中的隐藏与导出
    JAVA实现可设置背景的MDI窗口
    Java实现嵌入式数据库(文本数据库)代码实例
    Java实现类Windows导航栏
    Java正则表达式入门
    JAVA版JAVA IDE环境(源码)
    JAVA线程池的简单实现及优先级设置
    Java自定义JSlider UI
    Java获得系统环境变量
    Java音乐播放类
    ResultSet转为实体对象
    SWT行,AWT/Swing也行系列(1)-实现半透明及不规则窗体
    在JTable中加载进度条及进行操作
    在Swing中使用Html标签
    在SWT中使用ChartDirector
    浅谈java.util.concurrent包的并发处理
    浅谈Java集合中Array(数组)的应用
    精简JRE体积
    通过exe启动class
    偶的文章
    《三国以后有几国》
    中国本土化编程(汉语编程)之我见
    从珊瑚虫事件,看为什么中国出不了比尔.盖茨
    佛与专家
    叹今人无气节而作歌
    国产开源项目的七宗罪
    对Hibernate使用之愚见
    对Java(J2SE PC)开发之怪现象之我见
    浅谈命名规范[纯属强辩]
    灭了珊瑚虫,下一个是谁?
    率性而作无题歌一首
    百度对“十进制网络”的官方态度
    耻民
    论番茄花园的倒掉
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 JAVA图形操作中FPS的计算(附带随机生成乱数球体用例)收藏

    新一篇: JAVA中[人工无脑]系统(chatbot)的实现 | 旧一篇: JAVA实现拼图游戏

     FPS:即帧 /秒(frames per second)的缩写,也称为帧速率。是指1秒钟时间里刷新的图片的帧数,也可以理解为图形处理器每秒钟能够刷新几次。如果具体到手机上就是指每秒钟能够 播放(或者录制)多少格画面。同时越高的帧速率可以得到更流畅、更逼真的动画。每秒钟帧数(fps)越多,所显示的动作就会越流畅。

    在绝大多数图形程序中(以游戏类为典型),执行效率都以FPS作为评估标准。

    由于目前JAVA方面缺少相关用例,故完成功能如下图(在本机测试中,最大fps设定为500,实际达到FPS效率在IDE中280左右,单独运行380左右,受系统配置等因素影响):

    代码如下:(请变更文件后缀为jar)



    FPS相关操作代码如下:
    package org.test;

    import java.text.DecimalFormat;

    /**
     * <p>Title: LoonFramework</p>
     * <p>Description:</p>
     * <p>Copyright: Copyright (c) 2007</p>
     * <p>Company: LoonFramework</p>
     * 
    @author chenpeng  
     * @email:ceponline@yahoo.com.cn 
     * 
    @version 0.1
     
    */

    public class FPSListen {
        
    //设定动画的FPS桢数,此数值越高,动画速度越快。
        public static final int FPS = 500;  

        
    // 换算为运行周期
        public static final long PERIOD = (long) (1.0 / FPS * 1000000000); // 单位: ns(纳秒)

        
    // FPS最大间隔时间,换算为1s = 10^9ns
        public static long FPS_MAX_INTERVAL = 1000000000L// 单位: ns
        
        
    // 实际的FPS数值
        private double nowFPS = 0.0;
        
        
    // FPS累计用间距时间
        private long interval = 0L// in ns
        private long time;

        
    //运行桢累计
        private long frameCount = 0;
        
        
    //格式化小数位数
        private DecimalFormat df = new DecimalFormat("0.0");
     
        
    //开启opengl
        public void opengl(){
            System.setProperty(
    "sun.java2d.opengl""True");
            System.setProperty(
    "sun.java2d.translaccel""True");
        }

        

        
        
    /**
         * 制造FPS数据
         * 
         
    */

        
    public void makeFPS() {
            frameCount
    ++;
            interval 
    += PERIOD;

            
    //当实际间隔符合时间时。
            if (interval >= FPS_MAX_INTERVAL) {
                
    //nanoTime()返回最准确的可用系统计时器的当前值,以毫微秒为单位
                long timeNow = System.nanoTime();
                
    // 获得到目前为止的时间距离
                long realTime = timeNow - time; // 单位: ns

                
    //换算为实际的fps数值
                nowFPS = ((double) frameCount / realTime) * FPS_MAX_INTERVAL;
                
    //变更数值
                frameCount = 0L;
                interval 
    = 0L;
                time 
    = timeNow;
            }

        }

        
    public long getFrameCount() {
            
    return frameCount;
        }

        
    public void setFrameCount(long frameCount) {
            
    this.frameCount = frameCount;
        }

        
    public long getInterval() {
            
    return interval;
        }

        
    public void setInterval(long interval) {
            
    this.interval = interval;
        }

        
    public double getNowFPS() {
            
    return nowFPS;
        }

        
    public void setNowFPS(double nowFPS) {
            
    this.nowFPS = nowFPS;
        }

        
    public long getTime() {
            
    return time;
        }

        
    public void setTime(long time) {
            
    this.time = time;
        }

        
    public String getFPS(){
            
    return df.format(nowFPS);
        }


    }




    球体类代码如下:
    package org.test;

    import java.awt.Color;
    import java.awt.Graphics;

    /**
     * <p>Title: LoonFramework</p>
     * <p>Description:</p>
     * <p>Copyright: Copyright (c) 2007</p>
     * <p>Company: LoonFramework</p>
     * 
    @author chenpeng  
     * @email:ceponline@yahoo.com.cn 
     * 
    @version 0.1
     
    */

    public class Ball {
            
    private static final int SIZE = 10;
            
    private int x, y;
            
    protected int vx, vy;

            
    public Ball(int x, int y, int vx, int vy) {
                
    this.x = x;
                
    this.y = y;
                
    this.vx = vx;
                
    this.vy = vy;
            }


            
    public void move() {
                x 
    += vx;
                y 
    += vy;
                
    if (x < 0 || x > BallPanel.WIDTH - SIZE) {
                    vx 
    = -vx;
                }

                
    if (y < 0 || y > BallPanel.HEIGHT - SIZE) {
                    vy 
    = -vy;
                }

            }


            
    public void draw(Graphics g) {
                g.setColor(Color.RED);
                g.fillOval(x, y, SIZE, SIZE);
            }

        

    }





    FPS及球体处理用代码如下:
    package org.test;

    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Frame;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.Panel;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.awt.image.BufferedImage;
    import java.util.Random;


    /**
     * <p>
     * Title: LoonFramework
     * </p>
     * <p>
     * Description:以JAVA获取FPS用演示程序及随机生成乱数球体。(更优化代码内置于loonframework-game框架中)
     * </p>
     * <p>
     * Copyright: Copyright (c) 2007
     * </p>
     * <p>
     * Company: LoonFramework
     * </p>
     * 
     * 
    @author chenpeng
     * @email:ceponline@yahoo.com.cn
     * 
    @version 0.1
     
    */

    public class BallPanel extends Panel implements Runnable {

        
    /**
         * 
         
    */

        
    private static final long serialVersionUID = 1L;

        
    public static final int WIDTH = 360;

        
    public static final int HEIGHT = 360;

        
    // 设定最大球体数量
        private static final int NUM_BALLS = 50;

        
    // 定义球体数组
        private Ball[] ball;

        
    // 运行状态
        private volatile boolean running = false;

        
    private Thread gameLoop;

        
    // 缓存用图形
        private Graphics bg;

        
    private Image screen = null;

        
    // 生成随机数
        private Random rand;

        
    // fps监听
        private FPSListen fps = null;

        
    public BallPanel() {
            setPreferredSize(
    new Dimension(WIDTH, HEIGHT));
            screen 
    = new BufferedImage(WIDTH, HEIGHT, 1);
            bg 
    = screen.getGraphics();
            fps 
    = new FPSListen();
            
    //fps.opengl();
            
    // 以当前毫秒生成随机数
            rand = new Random(System.currentTimeMillis());
            ball 
    = new Ball[NUM_BALLS];
            
    // 初始化球体参数
            for (int i = 0; i < NUM_BALLS; i++{
                
    int x = rand.nextInt(WIDTH);
                
    int y = rand.nextInt(HEIGHT);
                
    int vx = rand.nextInt(10);
                
    int vy = rand.nextInt(10);
                ball[i] 
    = new Ball(x, y, vx, vy);
            }

        }


        
    // 加入Notify
        public void addNotify() {
            
    super.addNotify();
            
    // 判断循环条件是否成立
            if (gameLoop == null || !running) {
                gameLoop 
    = new Thread(this);
                gameLoop.start();
            }

        }


        
    /**
         * 进行线程运作。
         
    */

        
    public void run() {
            
    long beforeTime, afterTime, timeDiff, sleepTime;
            
    long overSleepTime = 0L;
            
    int noDelays = 0;