对不起最近一周都没有发帖。
我这几天在游戏系统上磨蹭了很久,主要是因为自己对回合制游戏特有的较慢的战斗节奏开始感到嫌弃,非觉得让玩家体验不上有速度感的战斗是个大缺口,于是逼着自己要一个特殊系统来突破,结果还真的想到了一个方案。
我本来想用传统的 WASD 键或十字键移动,但,这个废除了。移动靠鼠标右键,点击一下就可以让角色往那个方向跳跃,一个回合可以跳三次,不准正常走路和跑步。
跳跃可以在空中进行(这叫空中跳跃?日文叫二段跳跃或 aerial-step),横向跳跃最大距离预计达 5m 左右,机动性非常高。
攻击选择是数字键,或左键按角色打开技能表(能设定 6 个),发动也是左键,往想要发射的方向点击。攻击可以在自己的回合内的任何时候进行一次(也就是说,先移动或后移动都可以)。
新手可以一步一步地按右键达到目的地位置,站稳的情况下左键选择技能/攻击,然后还剩移动次数就再按右键跳回去。
老手可以在跳跃动作中进行攻击,比如还在开场一两回合的时候,一下子连按右键让角色跳的很高,同时按数字键选技能,在自身不稳当的空中强行远距离阻击。这样,即便是直线攻击的魔法,瞄准也要看技术了!
这样看来,我觉得操作感就比以前计划的样式要好多了,而且有更多花样好像可以专研。
WASD+ 鼠标确实是经典的射击动作游戏的操作法,因为操作很稳,动作敏锐,两手又不受空间冲突。
但在我的回合制游戏中,自己的回合里既不会有敌人的子弹出现,也不要求很强的反应能力。所以可以把动作权集中到鼠标上,在回合制游戏中体验有速度感的战斗。
当然,“完全可以用鼠标玩”也是一个重要的优势。
好了,我要该说我的编程的事情了,不然这个帖子要羊头狗肉了。
我设计了怎么去实现界面切换。
好像 JAVA 里面有很多 Library 支持 GUI 所需的很多功能,但我偏偏想要尽量自己做。
界面切换也是其中一个(虽然我不知道有没有存在一种 Class 可以管理界面切换)。
首先,我在我的 Class 里这样写了一下。
int mainEvent; //现在的界面,里边装着界面ID
final int //界面ID定数
OPENING = 1000,
TITLE = 2000,
LOAD = 3000,
SAVE = 4000,
OPTION = 5000,OPTION_SOUND = 5001,OPTION_GRAPHIC = 5002,
PAUSE = 6000,
BATTLE = 7000;
我从以前就喜欢用 int 值的一个特殊用法,就是故意让 int 定数提高位数而增加额外的使用价值。
比如,上面的 OPTION(设定),如果有更多的界面分支,就可以在更小的位数写它们的界面 ID。而当在绘画界面,需判断 mainEvent 的内容时,可以这样写。
switch(mainEvent){
case OPENING:
//这里写游戏启动时的OP动画
break;
case TITLE:
//这里写游戏主界面的内容
break;
case OPTION_SOUND:
case OPTION_GRAPHIC:
//这里写全OPTION界面的共同点,比如背景图像
switch(mainEvent){
case OPTION_SOUND:
//音频设定
break;
case OPTION_GRAPHIC:
//视频设定
break;
}
...
}
之后,就是怎么切换界面。当一个按钮被按时,比如是返回标题的按钮,就写
mainEvent = TITLE;
一行即可。
实际上,上面的 OPTION = 5000 定数没有任何使用场面,只是为了让这个界面定数宣言的地方,同时达成目录的效果。这样,就可以看透游戏中有哪些界面和它的分支,并一查这些定数就可以知道关联的代码在哪里。
我不知道这个写法会不会有什么漏洞,如果有的话希望指点。
1_3 以上为止。
P.S.第一次学 Markdown,感觉挺有意思!
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于