人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[0]――月晕础润


开场诗:
不儒不道又不仙,非神非圣也非贤。轻吐心头寻常语, 开辟文武一片天。

自表诗: 北冥沉渊有鲲鹏, 吞噬金乌戮真龙。一日扶摇凌天起,三千世界可横行。
 
     小子“鹏凌三千”,欲将心头事 ,付与有缘人,列位看官请了。

   我们都知道,目前国内游戏引擎开发领域中(请注意,我是在说游戏引擎),大体以 C/C++ 为主导, Delphi 次之,其他参差不齐。由于游戏引擎开发耗时耗力,很多人不愿意参与进来,所以一提 [ 引擎 ] 似乎就延伸到所谓 [ 高手 ] [ 大神 ] 的范围,而不应为我辈凡夫俗子所瞩目。
   所以,目前国内的真实情况是,有志于游戏开发的同好们,现状无外分成几类:
 
1.       无 敌悍匪型:有很高的数学与编程基础,加盟某些公司成为技术骨干,主导开发一款热门游戏(目前主要是网游……),终生受用不尽。这类人以游戏开发为本职工 作,月收入不菲,平时除了编程就是了解游戏,大多数是偶老师或以上级别(本人并未学习过游戏开发,但是偶在大学时有个代课老师曾经是以前赫赫有名的 [ 前导 ] 骨干,据说他开发过 [ 赤壁 ] 且主导开发过 [ 血狮 ] ……残念……),这批人的工作就是公司项目,当然不会轻易加入到开源的工作中来,不过有时会为提高知名度,而发布一些非开源的游戏。
 
2.       人中龙凤型:虽然没有很好的基础,但是学历较高, [EQ] 较高,能够被领导认为适合担当管理型角色,基本上属于 [ 挑刺 ] 的能手,让这些人当产品测试再合适不过,做个企划,吸引投资也有胜任的可能,让他开发游戏,下辈子吧……
 
3.       善用工具型:很多朋友现在常用的 RMXP 等工具一样可以开发同人游戏,而且熟悉 Ruby 语言的朋友也可以用在其中自定义脚本,利用其扩展现有程序,“本鹏”甚至见过同人版的 S.RPG 仙剑和同人的斜 45 °单机大话西游,效果也确实不错。不过是利用日本人的工具,始终刻上 RM 系列的烙印(别说你用 eXeScope 等工具修改, RM 系列组件的接口标识你有办法抹去?……),而且由于其本身 [ 玩具类 ] 工具的通病,程序不可避免的存在大量冗余数据,一个同人游戏程序的大小,可能是原版程序体积的 1-5 倍还不止……也实在令人难以忍受……就算脚本作的异常之好,被某些公司当作 [ 范本 ] 进行二次开发,也不过是充当了个 [ 剧本 ] 的作用,当了一次 [ 小编 ] ,实在太过鸡肋。
 
4.       神笔马良型:不错,就是能写会画的剧本和美工们,决定一款游戏好坏的,除非系统算法上极大的突破,否则在大同小异的情况下, 100% 就是美工的插画和脚本的剧情。在 Flash 大行其道的今天,如果他们能多学习一些 Action Script 方面的知识,甚至完全可以自己开发出一款即叫好,又叫做,而且可移植性强的游戏来。如果一个人美工即强,编程又到了 [ 从心所欲,不滞于物 ] 的境界,那就意味着这个人已达 [ 天人 ] 境界,自己一个人几乎可以挑起整个公司了……当然,前提是他不被累死的话……
 
5.       心大胆小型: [ 心比天高,命比纸薄 ] 是这类人最真实的写照,大体上都属于 [ 一瓶子不满,半瓶子晃荡 ] 的角色(比如某鹏…… |||| ),偶更经常看到有人在各种论坛上发帖招集美工,脚本等人员进行游戏开发,并且有时会发出一个地图编辑器类的东西作参考(上次看见一个要做《梦幻模拟战》同人的,地图编辑器照搬某平面打飞机游戏……),然后就不了了之,这类人说起来天下无敌,办起来有心无力,是国内号称 [ 游戏开发者 ] 中的绝大多数,也是中国人劣根性的集中体现……
 
6.       有心无力型:有恒心,有决心,有痴心,就是没能力,同样是主流之一,同样典型,作品大多为真情流露之做,多为画面和程序很粗燥,但游戏性却很强的小游戏作者,比如,以前上学时记得有个 VB 的《北京飘流记》之类的游戏……
  
   目前除了专业公司的游戏开发人员,和有心进入各大公司或自立门户的 [ 准专业 ] 人员,大体上都属于小打小闹,做同人游戏 [ 自娱自乐 ] 的阶段,而同人游戏的开发者,目前则多以 RMXP 系列及 Flash 系列为开发工具,虽然也有部分利用 Delphi VB 制作的精良游戏,但是通常都以程序代码取代了引擎的作用,很难重用到新的开发中去。
  “本鹏”有鉴于此,就想到写几篇文章以起到抛砖引玉的效果,但是用什么语言呢?(虽然偶不反对使用现成的游戏制作工具,但毕竟能否“制造和使用工具”,目前还是区别人与动物的标准之一 C/C++ 虽然效果最好,但是也最难……本人非 C/C++ 程序员,用 Delphi VB 也是后续计划,目前这一阶段还是以本职工作 Java 为主作为 RPG 类游戏 ( 包括 A.RPG,S.RPG ) 开发语言较好(虽然偶压根不是做游戏开发的……)。
  PS :很奇怪,国内的 Java 游戏大体上集中在嵌入式开发的领域中,多以手机为主,虽然 J2ME(Java 微型版 , 用于嵌入式开发 ) 确实适合手机游戏开发( 默认提供 Sprite 类,且支持很多的游戏算法 ),但是在 Web 和桌面程序的领域中,却很少有人用 J2SE 进行开发(或者说,没有……),请不要提 Java 的效率问题, Java 代码经过优化后效率并不慢。所以我更要使用 Java 开发,这样写坏了也没人知道,嘿嘿。
 
从游戏运行效果上看,Java 开发游戏的优点Flash 几乎都有(Flash 几乎就是为做界面而生的……),缺点却几乎都没有。但是从开发效率上将,Java 游戏可以很轻易的实现复杂引擎并完成快速开发,而Flash 游戏越大则开发效率将越低,就好比华山[ 气宗] [ 剑宗] 的关系(当然了,随着Action Script 的增强,这个屏蔽始终是会被打破的,但是打几年却不知道……)。另外,Java 是支持真3D 的。
天下武学,殊途同归,招无强弱,人有优劣。
 
下面,我们进入讲座开始前的预备内容, Java 界面的构成。
 
1.       Hello Java ( 关于 Java 中图形界面的显示 )
 
“本鹏”此次的RPG 开发讲座将重心放置于J2SE 架构之上,以Swing 为基础架构JFrame 之上,利用JPanel 进行扩展。 现在,我们从最基础的第一步开始讲起,即如何利用 Java 构建一个 Windows 窗口。



文件名: Example0.java

package org.loon.chair.example0;

import java.awt.Container;

import javax.swing.JFrame;


/**

*

* Java RPG开发讲座之0

*

* @author chenpeng

*

*

*/



//在Java开发中,[子类]可以通过[extends]关键字继承[父类]


public class Example0 extends JFrame{

         public Example0() {

                         //设置窗体标题,也可写作 super("Hello Java"); 的形式

                        setTitle( "Hello Java");


                         //实例化自定义面板

                        MyPanel panel = new MyPanel();

                         //获得当前窗体[容器]的实例,实际上可以直接设定,此处为演示

                         //故应用后设定。

                        Container contentPane = getContentPane();

                         //加载自定义的面板[MyPanel]到窗体中,就好比在底板上再帖一层画面。

                         //也就是说显示什么内容,是由我们加载那个[面板]来决定的,可以轻松 的实现游戏中不同画面间的切换.

                        contentPane.add(panel);

                        pack();

                }

    
         public static void main(String[]args){

           
             Example0 e0= new Example0();

                            
              //令窗体接受关闭[事件]

                                        e0.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                    
                  e0.setVisible( true);


        }



}

运行界面如下图:


据此为基础,我们可以扩充一个面板,作为显示画面的背景之用。

文件名: MyPanel.java

package org.loon.chair.example0;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Graphics;

import javax.swing.JPanel;

/**

* 自定义面板,用以扩展原有JPanel类功能.

*

* @author chenpeng

*

* Loon Framework in Game

*

*/

public class MyPanel extends JPanel{

    

         //定义全局常量,为默认的[面板]宽与高

         private static final int WIDTH = 300;

         private static final int HEIGHT = 300;



         public MyPanel() {

    

             //设置背景颜色R,G,B参数,个人喜欢用白色做底

        setBackground( new Color(255,255,255));

             //设置Panel默认大小

                setPreferredSize( new Dimension(WIDTH, HEIGHT));        

        }

    

         /**

         *     Graphics为java.awt下所有类,用以[描绘]图形界面

         * 大多数Java下的图形界面开发时,都是以此类为基础的。

         *

         */

         public void paintComponent(Graphics g) {

         //这里我们没有自定义Graphics,而是直接调用[父类]的同名方法实现。

                 super.paintComponent(g);

                 //在MyPanel(20,50)的位置上"画"出"Easy Java"如果换成drawImage函数就能在指定位置加载一张图片。

                g.drawString( "Easy Java", 40, 40);

            
        }



}

在本例中,各层级对象架构关系如下图所示。



现在,我们已清楚了Java桌面游戏开发的入门要素,下回就可以步入正题了。

――――――――――――――――――――

我找到的日本同人Java游戏图:


下图为“本鹏”开发中Java S.RPG 引擎地图( 等loonframework-game项目完成后开源) 运行画面,原理相同:

你可能感兴趣的:(java,RPG,source,game,ARPG)