开场诗:不儒不道又不仙,非神非圣也非贤。轻吐心头寻常语,开辟文武一片天。
我们都知道,目前国内游戏引擎开发领域中(请注意,我是在说游戏引擎),大体以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的《北京飘流记》之类的游戏……
从游戏运行效果上看,Java开发游戏的优点Flash几乎都有(Flash几乎就是为做界面而生的……),缺点却几乎都没有。但是从开发效率上将,Java游戏可以很轻易的实现复杂引擎并完成快速开发,而Flash游戏越大则开发效率将越低,就好比华山[气宗]和[剑宗]的关系(当然了,随着Action script的增强,这个屏蔽始终是会被打破的,但是打几年却不知道……)。另外,Java是支持真3D的。
天下武学,殊途同归,招无强弱,人有优劣。
下面,我们进入讲座开始前的预备内容,Java界面的构成。
1. Hello Java (关于Java中图形界面的显示)
package org.loon.chair.example0;
import java.awt.Container;
import javax.swing.Jframe;
//在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);
//显示窗体(PS:在Java中本有show()方法,但已成为准淘汰方法,
//说不定什么时候便不支持了,强烈不建议使用,虽然Visible内部
//目前还是调用它……
e0.setVisible(true);
}
package org.loon.chair.example0;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JPanel;
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));
}
public void paintComponent(Graphics g) {
//这里我们没有自定义Graphics,而是直接调用[父类]的同名方法实现。
super.paintComponent(g);
//在MyPanel(20,50)的位置上"画"出"Easy Java"
//如果换成drawImage函数就能在指定位置加载一张图片。
g.drawString("Easy Java", 40, 40);
}
实际Java RPG游戏开发中案例:
如下图,为日本某Java游戏运行画面,即为Jframe和JPanel的拼合显示。