作者mimjy (米其)
看板GameDesign
标题[转录][心得] 关於夏夜攻防战 - 其二
时间Wed Jun 14 16:17:17 2006
有了游戏的基本方向,接下来就是规划了
我给自己总共一个月的时间, 每天花一至两个小时在这上面, 其余时间乖乖写我的论文
毕竟在现在这个节骨眼还会拿时间来写这玩意的...应该没几个人吧 囧>
我将时间细分为 构思&设计, 实作, 测试 三个主要的部分
构思/设计 & 实作各占40%的时间, 也就是各约一个半星期
最後的一个星期为实测与後置处理
构思占掉跟实作一样的时间,从这不难看出其重要性。
动手之前,完整的把想达成的效果列举出来。
详细的列出要做什麽,该做什麽,怎麽做,尽可能的把要做的事全部规划好
才不会写到一半发现漏了某些设计而导致程式大修特修。
为了事半功倍,花费多一点时间在前置的设计实在重要。
好,现在我想做一个弹幕游戏。
於是我需要一个Player,玩家可操作的角色
再来我要一个发射子弹的东西, 在设计上,我希望他不只能够单纯的"生出子弹"
我希望他可以跑,会寻找,会因为生气或其他因素改变行动模式。
於是Shooter变成一个Seeker。
那,武器怎办呢? 我希望Seeker可以有不同的武器可供其替换。
让同时间萤幕上出现的子弹是来自不同的武器所发射出来的。
但是最好每个武器可以共享一定程度的函式,例如这样
1. Seeker 拿起 武器B 发射B-type子弹 , B-type子弹在空中飞 , 飞出萤幕
2. Seeker 拿起 武器C 发射C-type子弹 , C-type子弹在空中飞 , 打到Player
其中的拿起,在Seeker看来是同样的动作。
而不同的type子弹则依据各自的行为模式运动、撞击
所以我要一个weaponMode(武器控管),以及一个武器的Class原形,
其中包含必须的Move(), isHit()函式
每把武器继承原形Class,然後登记在weaponMode里。
这样每次我要用,只要从武器库里面捡出来,然後运算它的Move() , isHit等即可
游戏,总要有些特效啊,譬如Player被打挂了,我希望他能边墬落边散出烟花。
或者如果我的游戏有黑洞炮,那我需要一个黑色粒子沿着黑洞外围随机方向被吸入的特效
如果单纯依靠Flash的逐格动画来做,绝对受不了。
於是我决定通通用Particle System(分子系统)来做。
若不计复杂的效果,分子系统可以藉由计算简单的分子运行方式,
来模拟出大部分的特效。
最好我的程式有这样的功能 :
"在 T毫秒 的时候, 在(X,Y)地点 叫出 A分子"
A分子可能是一小搓烟雾、可能是中弹後的火花、可能是发射武器时的光波
之後,只要我依着时间的进行,逐次给定参数T, 地点(X,Y), 我就能模拟出许多的效果
於是我的程式又多了一个Effect(特效控管器),负责处理各种特效的需求
最後是介面部分。
萤幕上该有些什麽要传递给玩家的讯息? 先考虑最基本的HP,Score,LV好了。
这些讯息无时无刻需要更新。否则玩家只能在被打趴在地上哭的时候,
才发现他的HP早就所剩无几了
好,最後一个必备物件BackGround(场景控制器)就这样出现了
主角们都差不多到齐了,接下来讨论游戏的结构部份。
游戏中会出现的物件 : Seeker(搜寻者), Player(玩家), 各类子弹与武器(Weapon)
Effect(特效物件), Background(分数、介面物件), 还有一些有的没的全域变数
游戏,讲高级一点就是一种互动式动画,动画由一张张的Frame所组成
意味着游戏程式的基本架构也不脱此限
於是,最外层的游戏主程式就是这样
///一堆有的没的初始化///
Player.init();
Seeker.init();
Weapon.init();
Effect.init();
background.init();
///主程式///////
main {
Seeker.loop(); //负责计算Seeker的行为模式
Player.loop(); //负责接收玩家的操控
Weapon.loop(); //负责所有武器的行为模式与子弹移动
bg.loop(); //介面相关的更新
}
透过一秒执行30次main loop, 宛如赋予这个游戏重要的脉搏般,程式的运作由此展开.
(续)
文章转自暨大霞蔚山城 ★ HenryBBS (henry.twbbs.org)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.22.21.89