`
mmdev
  • 浏览: 13244658 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

开场诗:
不儒不道又不仙,非神非圣也非贤。轻吐心头寻常语,开辟文武一片天。
自表诗:北冥沉渊有鲲鹏,吞噬金乌戮真龙。一日扶摇凌天起,三千世界可横行。

小子“鹏凌三千”,欲将心头事,付与有缘人,列位看官请了。

我们都知道,目前国内游戏引擎开发领域中(请注意,我是在说游戏引擎),大体以C/C++为主导,Delphi次之,其他参差不齐。由于游戏引擎开发耗时耗力,很多人不愿意参与进来,所以一提[引擎]似乎就延伸到所谓[高手][大神]的范围,而不应为我辈凡夫俗子所瞩目。

所以,目前国内的真实情况是,有志于游戏开发的同好们,现状无外分成几类:

<!--[if !supportLists]-->1. <!--[endif]-->无敌悍匪型:有很高的数学与编程基础,加盟某些公司成为技术骨干,主导开发一款热门游戏(目前主要是网游……),终生受用不尽。这类人以游戏开发为本职工作,月收入不菲,平时除了编程就是了解游戏,大多数是偶老师或以上级别(本人并未学习过游戏开发,但是偶在大学时有个代课老师曾经是以前赫赫有名的[前导]骨干,据说他开发过[赤壁]且主导开发过[血狮]……残念……),这批人的工作就是公司项目,当然不会轻易加入到开源的工作中来,不过有时会为提高知名度,而发布一些非开源的游戏。

<!--[if !supportLists]-->2. <!--[endif]-->人中龙凤型:虽然没有很好的基础,但是学历较高,[EQ]较高,能够被领导认为适合担当管理型角色,基本上属于[挑刺]的能手,让这些人当产品测试再合适不过,做个企划,吸引投资也有胜任的可能,让他开发游戏,下辈子吧……

<!--[if !supportLists]-->3. <!--[endif]-->善用工具型:很多朋友现在常用的RMXP等工具一样可以开发同人游戏,而且熟悉Ruby语言的朋友也可以用在其中自定义脚本,利用其扩展现有程序,“本鹏”甚至见过同人版的S.RPG仙剑和同人的斜45°单机大话西游,效果也确实不错。不过是利用日本人的工具,始终刻上RM系列的烙印(别说你用eXeScope等工具修改,RM系列组件的接口标识你有办法抹去?……),而且由于其本身[玩具类]工具的通病,程序不可避免的存在大量冗余数据,一个同人游戏程序的大小,可能是原版程序体积的1-5倍还不止……也实在令人难以忍受……就算脚本作的异常之好,被某些公司当作[范本]进行二次开发,也不过是充当了个[剧本]的作用,当了一次[小编],实在太过鸡肋。

<!--[if !supportLists]-->4. <!--[endif]-->神笔马良型:不错,就是能写会画的剧本和美工们,决定一款游戏好坏的,除非系统算法上极大的突破,否则在大同小异的情况下,100%就是美工的插画和脚本的剧情。在Flash大行其道的今天,如果他们能多学习一些Action Script方面的知识,甚至完全可以自己开发出一款即叫好,又叫做,而且可移植性强的游戏来。如果一个人美工即强,编程又到了[从心所欲,不滞于物]的境界,那就意味着这个人已达[天人]境界,自己一个人几乎可以挑起整个公司了……当然,前提是他不被累死的话……

<!--[if !supportLists]-->5. <!--[endif]-->心大胆小型:[心比天高,命比纸薄]是这类人最真实的写照,大体上都属于[一瓶子不满,半瓶子晃荡]的角色(比如某鹏……||||),偶更经常看到有人在各种论坛上发帖招集美工,脚本等人员进行游戏开发,并且有时会发出一个地图编辑器类的东西作参考(上次看见一个要做《梦幻模拟战》同人的,地图编辑器照搬某平面打飞机游戏……),然后就不了了之,这类人说起来天下无敌,办起来有心无力,是国内号称[游戏开发者]中的绝大多数,也是中国人劣根性的集中体现……

<!--[if !supportLists]-->6. <!--[endif]-->有心无力型:有恒心,有决心,有痴心,就是没能力,同样是主流之一,同样典型,作品大多为真情流露之做,多为画面和程序很粗燥,但游戏性却很强的小游戏作者,比如,以前上学时记得有个VB的《北京飘流记》之类的游戏……

目前除了专业公司的游戏开发人员,和有心进入各大公司或自立门户的[准专业]人员,大体上都属于小打小闹,做同人游戏[自娱自乐]的阶段,而同人游戏的开发者,目前则多以RMXP系列及Flash系列为开发工具,虽然也有部分利用DelphiVB制作的精良游戏,但是通常都以程序代码取代了引擎的作用,很难重用到新的开发中去。

“本鹏”有鉴于此,就想到写几篇文章以起到抛砖引玉的效果,但是用什么语言呢?(虽然偶不反对使用现成的游戏制作工具,但毕竟能否“制造和使用工具”,目前还是区别人与动物的标准之一C/C++虽然效果最好,但是也最难……本人非C/C++程序员,用DelphiVB也是后续计划,目前这一阶段还是以本职工作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界面的构成。

<!--[if !supportLists]-->1. <!--[endif]-->Hello Java (关于Java中图形界面的显示)

“本鹏”此次的RPG开发讲座将重心放置于J2SE架构之上,以Swing为基础架构JFrame之上,利用JPanel进行扩展。现在,我们从最基础的第一步开始讲起,即如何利用Java构建一个Windows窗口。

运行界面如下图:

<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter" /> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0" /> <v:f eqn="sum @0 1 0" /> <v:f eqn="sum 0 0 @1" /> <v:f eqn="prod @2 1 2" /> <v:f eqn="prod @3 21600 pixelWidth" /> <v:f eqn="prod @3 21600 pixelHeight" /> <v:f eqn="sum @0 0 1" /> <v:f eqn="prod @6 1 2" /> <v:f eqn="prod @7 21600 pixelWidth" /> <v:f eqn="sum @8 21600 0" /> <v:f eqn="prod @7 21600 pixelHeight" /> <v:f eqn="sum @10 21600 0" /> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" /> <o:lock v:ext="edit" aspectratio="t" /> </v:shapetype><v:shape id="_x0000_i1027" type="#_x0000_t75" style='width:147pt; height:159pt'> <v:imagedata src="file:///C:/DOCUME~1/ADMINI~1.443/LOCALS~1/Temp/msohtml1/01/clip_image001.png" o:title="cp01" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

文件名: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);

//显示窗体(PS:Java中本有show()方法,但已成为准淘汰方法,

//说不定什么时候便不支持了,强烈不建议使用,虽然Visible内部

//目前还是调用它……

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));

}

/**

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

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

*

*/

public void paintComponent(Graphics g) {

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

super.paintComponent(g);

//MyPanel(20,50)的位置上"""Easy Java"

//如果换成drawImage函数就能在指定位置加载一张图片。

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

}

}

架构关系如下图所示。

<!--[if gte vml 1]><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:300.75pt; height:177.75pt'> <v:imagedata src="file:///C:/DOCUME~1/ADMINI~1.443/LOCALS~1/Temp/msohtml1/01/clip_image003.png" o:title="application0" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

实际Java RPG游戏开发中案例:

如下图,为日本某Java游戏运行画面,即为JFrameJPanel的拼合显示。

<!--[if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75" style='width:396pt;height:314.25pt'> <v:imagedata src="file:///C:/DOCUME~1/ADMINI~1.443/LOCALS~1/Temp/msohtml1/01/clip_image005.png" o:title="jp0" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

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

分享到:
评论

相关推荐

    一种Delphi开发的西门子PLC数据记录分析软件.pdf

    数据采集部分需要与西门子PLC通信,文档提到了一款开源的函数库“蕴陨月晕韵阅粤灾耘”,它是一个德国人开发的项目,可以与西门子PLC进行通信。这个库可能是一个中间件,它提供了能够访问西门子PLC内部存储区(如...

    关于中秋节遐想的作文2篇.doc

    总的来说,尽管这篇文档本身不直接涉及IT知识,但它所涵盖的主题——中秋节的庆祝、文化和传统,都可以与信息技术的多个领域相结合,包括内容创作、数字媒体、用户体验设计、数据可视化以及文化传承的数字化。...

    2020年四年级语文下册第四单元知识盘点新人教版

    - 晕(yùn/yūn):表示头晕时读yūn,表示日晕、月晕时读yùn。 - 屏(píng/bǐng):表示屏幕时读píng,表示屏息时读bǐng。 - 折(zhé/shé):表示折断、打折时读zhé,表示亏损、折本时读shé。 - 闷...

    2021年教师招聘考试题库《言语与思维》必看知识点带答案解析_3.docx

    29. 预测性思维:B选项,由月晕推知将刮风是思维的预测功能。 30/31. 直觉思维:D选项,预先规划到达目的地的最短路径是直觉思维的体现。 32. 初中生思维特征:BC,初中生的思维逐渐由具体形象思维向抽象思维转变...

    看去识天气(第1课时).ppt

    预习部分要求学生掌握相关的生词读音和含义,如“峰峦”、“一霎间”、“点缀”、“月晕”等,并理解“预兆”、“轻盈”、“弥漫”等词语的意义。快速阅读课文后,学生应能找到全文中心句:“云就像是天气的‘招牌’...

    《燕子》优秀教案(4).doc

    《燕子》这篇课文主要描绘了春天里燕子的灵动之美,通过优秀的教案设计,旨在引导学生深入理解和欣赏文本中的语言艺术。以下是该教案中涉及的一些关键知识点: 1. **语言描绘与想象力**:教师强调“小圆晕”这个词...

    初中语文 古诗文赏析 苏洵《辨奸论》原文、注释、翻译及赏析.doc

    例如,自然现象如月晕预示风雨,础润暗示雨至,这些规律是显而易见的。但人事的变化更为复杂,需要更深入的洞察力。王衍和卢杞是苏洵用来讨论识人之难的例子。王衍外表清谈,但实际上并无害人之心,若非晋惠帝的昏庸...

    基于深度学习的电子商务客户数据分析研究.pdf

    数据分析方向近几年,在飞速发展的科技的加持下,深度学习模型逐渐走向成熟,其中,本文研究的悦晕晕尧砸晕晕,还有 阅晕晕尧阅月晕 均已在语音识别、信息处理等领域得到应用,所取得效果也十分显著。在对电商客户...

    七年级语文上册 看云识天气同步训练 苏教版(通用).doc

    《看云识天气》是七年级语文上册的一篇课文,主要讲述了通过观察云彩的形态和颜色来预测天气变化的知识。这篇同步训练文档旨在帮助学生理解和应用文章中的概念。 1. 文字中提到了汉字的注音和字形检查,这是对基础...

    中秋月夜作文800字怎么写(精品资料)..doc

    这篇文档主要是关于如何撰写一篇以“中秋月夜”为主题的800字作文。首先,可以从月夜的描绘入手,如描述中秋夜晚的月亮如何穿过云层,月晕的美丽,以及月色如何给人们带来宁静与和谐的感觉。接着,可以分享个人对...

    学习资料:生活中“俗语”里的物理知识合集[精选].doc

    9. **月晕而风,础润而雨**:月晕和础润分别预示着天气变化,与气象学中水汽凝结和温度变化相关。 10. **水火不相容**:水的吸热能力和蒸发热,以及其阻止物质与空气接触的能力,解释了水可以灭火的原因。 11. **...

    亲密关系读后感.docx

    尼尔森提到的四种偏差行为——引起注意、权力斗争、报复心理和自我放逐,揭示了人们在需求未得到满足时的应对方式。这些行为源自我们内心的痛苦和挫败感,它们阻碍我们处理关系中的问题,实际上是在逃避内心的伤痕。...

    看云识天气 (2).ppt

    《看云识天气》是语文七年级上册的一篇课文,旨在帮助学生通过阅读学习如何通过观察云彩来预测天气变化。这篇课文的核心知识点主要集中在以下几个方面: 1. **云与天气的关系**:云被视为天气的招牌,不同类型的云...

    2021年教师招聘考试题库《言语与思维》考点带答案解析_3.docx

    19. 观察到“月晕”与“础润”并得出相关结论,体现了思维的概括性和间接性,即通过现象推测背后的规律。 20. 利用已有知识和经验从问题中找到最正确答案的思维方式是聚合思维,它倾向于寻找唯一正确答案。 21. ...

    纯CSS3实现地球自转实现代码(图文教程附送源码)

    这个教程将分为四个步骤,逐步教你如何创建一个逼真的地球模型,并让它在网页上进行自转,同时还包括月晕效果和昼夜交替的视觉呈现。 ### 第一步:构建静态地球背景 首先,我们需要准备两张图片,一张是作为宇宙...

    甘肃省岷县_高一语文下学期第一次月考试题.doc

    这篇文档主要介绍了与气象相关的知识点,具体包括虹和晕的形成、颜色变化以及它们与天气预报的关系,还有云的高度、方向、厚薄如何预示天气情况。这些内容出自一篇高一语文试题,属于中学语文教育范畴,同时也涉及到...

    文章Cloud_detection_with_MATLAB

    - **雨层云(Nimbostratus)**:风暴云,颜色较暗,能遮挡阳光,高度较低,约为0至6000英尺。 - **层积云(Stratocumulus)**:灰色或白色的一层云层,带有暗斑,高度约为5000至10000英尺。 - **层云(Stratus)**:...

    河北省唐山十七年级语文上册 第17课 看云识天气学案(无答案) 人教新课标版 学案.doc

    这篇文档是针对河北省唐山十七年级语文课程的学习材料,主要关注的是《看云识天气》这篇科普文章。文章的教学目标旨在让学生理解和体会生动比喻在说明文中的作用,以及培养他们观察自然的兴趣和习惯。 1. **科普...

    《看云识天气》课件.ppt

    《看云识天气》这篇课程主要讲解了通过观察云的形态和光彩来预测天气的方法,适合七年级学生学习。教学目标旨在让学生了解云的变化与天气之间的关系,培养他们观察自然的兴趣和习惯。课程内容分为以下几个部分: 1....

    看云识天气.ppt

    《看云识天气》这篇语文教学课件主要探讨了如何通过观察天空中的云彩来预测天气的变化。在我们的日常生活中,云是天气的直观反映,它们的形态和颜色常常预示着不同的气象条件。课程主要分为以下几个部分: 1. **...

Global site tag (gtag.js) - Google Analytics