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

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

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

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

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

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

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

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

本人有效BLOG:

cping1982

ceponline

音乐:

风姿花传

ドラグ.スレイブ

ヒカルの碁

Believe

世界で一番ヤバイ恋

あんなに一緒だった

精忠报国

谁是大英雄

随遇而安

明天会吹什么风

逍遥游

爱江山更爱美人

最近评论
qingtianzhu:你好,我想购买你的软件,但是一直联系不上你,请告知联系方式,谢谢!
yao_ju_xian:看着挺好的啊,我现在也在学Java,不过我是学oracle那块的,我觉得你做的相当好了,能不能教教我啊?谢谢,我的邮箱是yaojuxian1988@yahoo.com.cn,非常感谢你能赐教!
.net:啥也不说支持楼主B/S小白
原理都不懂就在这里叽叽呀呀的
多回去看几年书吧
真像是在看笑话“呵呵”
如果易语言真有那么“好”没有中国人不支持的
可是(*^__^*) 嘻嘻……
明白的都明白
不明白的自己琢磨去吧
kiki820819:asdasd
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中2.5D游戏(斜45度角)的设计与实现(2)收藏

    新一篇: 百度对“十进制网络”的官方态度 | 旧一篇: Java中Image的水平翻转、缩放与自由旋转操作

    上次我已说过Java实现2.5D的关键在于斜视图坐标的转化,只要“你的美工”或者“你——的美工”技术到位,2D到2.5D的图形就简单实现来说就已经足够了(暂不考虑日照及云雾等特殊效果)。但反过来说,2.5D界面也确实对美工有了一定的要求,如果没有好的原图,2.5D程序实现起来将事倍功半,枉费气力不说,还达不到应有的效果。

    而遗憾的是,对于我这种非游戏开发人员来说,游戏美工简直不可求更不可遇,而我搜遍google,却也找不到多少2.5D地图可供使用(我想找皇家骑士团或最终幻想战略版那种地图,居然没有现成的……准备过两天重下游戏自己抠图……)。于是我怒从胸中起,恶向胆边行,将一种更加极端的方法付诸于实践……

    我所谓更加极端的方法,就是利用看上去向2.5D的2D程序蒙混过关——也就是所谓的“伪2.5D实现”

    举例来说,下为我以前文章中曾构建过的2D地图:



    我们可以看到,在此例中角色及建筑始终由X,Y交织点确定,即采取通常的2D算法实现。

    但我们都知道,3D或2D本质上区别只是视觉上的,反映到屏幕上的无外是分辨率不等的象素罢了。如果我们直接将做好的2D地图放入其中,能否起到想要的作用呢?

    我们来试试看,首先,我载入一个做好的2.5D地图(取材自幻想三国,原图大小2675X930,我以800X600卷帘显示)




    我们可以看到,由于采用了2.5D的视觉图,单就画面而言,通常没有人会怀疑所见到的是“斜45度立体视图”。

    而问题来了,原来我们使用的传统2D地图描绘方式(见文章),要如何应用在这张伪2.5D的视图中呢?这时的难点就在于,我们要如何令原来在2D地图中使用的数组,在此图中发挥作用。

    这时候有两种殊途同归的方式可供选择:一是利用ps等工具,在斜视图上生成镂空图,利用楼空图生成map数组来演算此斜视图。二是直接利用编辑器等工具在斜视图上标注通行区域,以此生成数组。

    我并没有开发专用的编辑器,所以利用ps制作镂空图如下(原图于斜视图大小一致,为演示用缩小):



    其中我将黑色设定为禁行区域,白色为通行区域,而生成一个二维的整形数组,代表map的所有x,y点

    将字符打印成地图如下(部分)



    此时,我们就可以利用地图数组在斜视图上描绘出对应的x,y点。



    于通常的2D地图相同,坐标由左上x,y点开始,到右下x,y点结束,描绘出了整张地图内容(图中红色为不可移动区域,黑色为可移动区域)

    那么我们现在要做的,就是将角色置身于当中了。

    利用构建好的sprite类,我们能轻松的分解角色图,我将一个ro中人物置身其中。



    这时,由于地图+人物俱为斜视图,所以会形成斜45度视角的错觉。

    但新的问题来了,我们如何令角色移动呢?首先,我们显示角色的移动路径出来。



    大家可以看到,如果我们沿用原来2D的寻径方式,那么在移动过程中角色将按照2D路线行走。虽然对平面游戏来说在正常不过,但对于已经是"2.5D"画面的我们来讲,显然是不能够容忍的,这时候就需要我们摒弃原先的寻径方式,将2.5D寻径的A*方法引入其中,具体方式将在下次介绍。

    最后,我们去除辅助线等,运行效果如下:



    由于设定的关系,此时背景画面随角色运动而卷帘移动,但就操作感受上讲,与普通的2.5D游戏是无异的。

    上述操作代码如下:

    package org.loon.framework.game.image;

    import java.awt.Color;
    import java.awt.Frame;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.Panel;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;

    import org.loon.framework.game.script.map.BitmapToMap;
    import org.loon.framework.game.sprite.Configure;
    import org.loon.framework.game.sprite.Event;
    import org.loon.framework.game.sprite.Sprite;
    import org.loon.framework.game.sprite.SpriteGroup;

    /**
     * <p>
     * Title: LoonFramework
     * </p>
     * <p>
     * Description:Java纯2D伪2.5D测试
     * </p>
     * <p>
     * Copyright: Copyright (c) 2007
     * </p>
     * <p>
     * Company: LoonFramework
     * </p>
     * 
     * 
    @author chenpeng
     * @email:ceponline@yahoo.com.cn
     * 
    @version 0.1
     
    */

    public class RpgTest extends Panel implements KeyListener, MouseListener {
        
    /**
         * 
         
    */

        
    private static final long serialVersionUID = 1L;

        BitmapToMap btm 
    = null;

        Sprite[] roleMain 
    = new Sprite[2];

        Configure config 
    = null;

        
    //role图行排列顺序
        final String imgList = "0,1,2,3,4,6,5,7";

        Image img 
    = null;

        
    public RpgTest() {
            setSize(
    800600);
            setBackground(Color.BLACK);
            
            
    //精灵组
            SpriteGroup sgp = new SpriteGroup();

            
    //载入角色图
            Bitmap bit = new Bitmap("./imagerpg/ro.png");
            
    try {
                
    // 重新排列图片行列,超出索引则指定位置无图
                img = bit.getScriptRegroup(70124, imgList);
            }
     catch (Exception e) {
                e.printStackTrace();
            }

            
    //创建精灵,宽70,高124
            roleMain[0= new Sprite(img, 70124);
            
    //定位
            roleMain[0].setXY(45,50);
            roleMain[
    0].setVisible(true);
            roleMain[
    1= new Sprite(img, 70124);
            roleMain[
    1].setXY(31,41);
            roleMain[
    1].setVisible(true);
            
    //变更角色方向
            roleMain[1].setDirection(5);
            
    // 加载原始背景图,背景镂空图(行走区域标注图)
            btm = new BitmapToMap("./imagerpg/map_1.png""./imagerpg/map_1_2.png",800,600);
            
    //镂空色
            btm.setFiltrateColor(new LColor(255255255));
            
    //打印字符地图
            System.out.println(btm.toStringMap());
            
    // 允许显示网格
            btm.setReseau(false);

            
    // 加载角色
            sgp.add(roleMain[0]);
            sgp.add(roleMain[
    1]);

            
    // 追踪指定对象
            
    // roleMain[1].setPursueObject(roleMain[0]);

            
    // 以数组方式注入
            
    // config=new Configure(btm,roleMain);
            
    // 以spriteGroup方式注入Configure统一地图与角色管理
            config = new Configure(btm, sgp);
            
    //使用2.5d视角走法
            config.set25d(true);
            
    //显示移动路径
            config.setMovePath(false);
            
            setFocusable(
    true);
            addKeyListener(
    this);
            addMouseListener(
    this);


        }


        
    public void update(Graphics g) {
            paint(g);
        }


        
    public void paint(Graphics g) {
            
    // g.drawImage(img, 0, 0, this);
            config.draw(g);

            
    // g.drawImage(bit.getFleshKeepOut("./s.jpg"), 0, 0, this);
            
    // g.dispose();
        }


        
    public void keyPressed(KeyEvent e) {
            
    // 控制指定角色移动
            config.go(roleMain[0], Event.select(e.getKeyCode()));
            
    // 刷新
            repaint();
        }


        
    public void keyReleased(KeyEvent e) {
        }


        
    public void keyTyped(KeyEvent e) {
        }



        
    public void mouseClicked(MouseEvent e) {
            config.goMouse(roleMain[
    0], e.getPoint(), getGraphics());
        }


        
    public void mouseEntered(MouseEvent arg0) {

        }


        
    public void mouseExited(MouseEvent arg0) {
        
        }


        
    public void mousePressed(MouseEvent arg0) {
        }


        
    public void mouseReleased(MouseEvent arg0) {

        }


        
    public static void main(String[] args) {

            java.awt.EventQueue.invokeLater(
    new Runnable() {
                
    public void run() {
                    Frame frm 
    = new Frame("Java纯2D伪2.5D测试");
                    frm.add(
    new RpgTest());
                    frm.setResizable(
    false);
                    frm.setSize(
    800600);
                    frm.addWindowListener(
    new WindowAdapter() {
                        
    public void windowClosing(WindowEvent e) {
                            System.exit(
    0);
                        }

                    }
    );
                    frm.setLocationRelativeTo(
    null);
                    frm.setVisible(
    true);
                }

            }
    );
        }


    }

    发表于 @ 2008年02月03日 00:40:00|评论(loading...)|编辑

    新一篇: 百度对“十进制网络”的官方态度 | 旧一篇: Java中Image的水平翻转、缩放与自由旋转操作

    评论

    #liseal 发表于2008-03-04 09:19:08  IP: 222.190.126.*
    什么时候能把寻路的算法讲讲了?
    期待3
    #liseal 发表于2008-03-04 09:20:54  IP: 222.190.126.*
    什么时候能把寻路的算法讲讲了?
    期待3
    #jax 发表于2008-05-03 23:09:07  IP: 220.186.113.*
    真的不错。。这里值得好好学习!!以后一定常来
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 鹏凌三千(cping1982)