设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 6754|回复: 31
打印 上一主题 下一主题

[讨论] 以一个程序设计的角度来看这个RPG引擎

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
帖子
92
跳转到指定楼层
1
发表于 2013-5-9 13:07:51 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 爆发的妞 于 2013-6-21 10:55 编辑

小弟在学习这个rpg marker 引擎, 感觉有好多值得学习的地方。
问的也都是一些基础简单的问题。
小弟有个想法, 有好多高手经验都比较丰富。 对于引擎里面的脚本
都比较熟悉。 能否写出来让更多的学习引擎设计和开发的朋友学习。
无论你是搞 ruby or lua or java or c# or object-c 各种语言的同学,
或是 xp or vx or ae ,
或是 搞 工具 or 引擎 or 策划 or美术 , 有想法都可以写出来。

我也会不定期写一些自己的理解, 望大家指正。

朋友们, 别客气, 自己的心得什么的都可以提出来。。。

讨论问题列表:
1.在事件里面添加脚本合适吗?  2# ~ 4#
2. xp 脚本引擎 整体结构类图分析,只有地图场景的分析。 战斗场景类似。 5# ~ 7#
3.在移动设备上,fps之痛?  9# ~ 16#
4.地图的tile_id数值是怎么使用的, 分自动元件? 26#
5.问一下,Input里面的代码是怎么个实现的,有没有伪代码之类的可以参考?  未解决
6.小里程碑,移动设备,完美实现,行走地图
7.主角移动, 其他角色有略微的偏移的问题。
8.解析数据库的图块数据和地图中对应的图块数据  25#
9.viewport视口,sprite等绘制问题 27# 未解决

小弟创建了一个 6R移动交流群, 旨在对移动游戏制作有兴趣的同学加入,
群号:323876830 没有验证,可直接加入
群公告: 请发6R帖子地址寻求帮助或讨论, 禁止灌水, 共同学习
所以嘛, 请爱灌水的同学绕路了。。

评分

参与人数 1星屑 +60 收起 理由
Raiku + 60 态度良好~不过我不是触手只能看看了.

查看全部评分

rm for android (原生开发)

Lv1.梦旅人

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
帖子
92
2
 楼主| 发表于 2013-5-10 10:50:05 | 只看该作者
1.在事件里面添加脚本合适吗?
大家都知道在事件选项里面有可以插入脚本的选项。
觉得这个方法好神奇啊。 居然可以解释代码。
看了一下代码是 使用result = eval(script) 这个方法。
搜了一下帖子,这里提到了他 http://rpg.blue/forum.php?mod=viewthread&tid=277033
不知道ruby怎么处理的, 应该会编译一下吧。 其他语言要是处理应该会这样。
亲们 , 插入脚本的硬霸功能, 虽然功能强大, 但是感觉破坏了代码的结构和封装性,
你们觉得呢?
rm for android (原生开发)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
270 小时
注册时间
2010-2-4
帖子
1305
3
发表于 2013-5-10 22:08:37 | 只看该作者
爆发的妞 发表于 2013-5-10 10:50
1.在事件里面添加脚本合适吗?
大家都知道在事件选项里面有可以插入脚本的选项。
觉得这个方法好神奇啊。  ...

- -b事实上对于动态语言eval很常见...话说事件脚本的标准用法应当是
  1. class Interpreter
  2. def xxx
  3.   xxx
  4. end
  5. end
复制代码
来着,作为事件指令的一个扩展接口...
好歹当年也当过大魔王过,orz
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
帖子
92
4
 楼主| 发表于 2013-5-11 09:30:05 | 只看该作者
zhangbanxian 发表于 2013-5-10 22:08
- -b事实上对于动态语言eval很常见...话说事件脚本的标准用法应当是来着,作为事件指令的一个扩展接口... ...

恩。谢谢你的回复。
算是见识了吧。 不过我所遇到的其他引擎, 都没有这种功能。



rm for android (原生开发)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
帖子
92
5
 楼主| 发表于 2013-5-11 11:08:15 | 只看该作者
2. xp 脚本引擎 整体结构类图分析,只有地图场景的分析。 战斗场景类似。
可以给像我这样的新人, 更好的理解这个程序。
大家感觉有什么问题, 可以多多指正。

整体结构类图.png (17.43 KB, 下载次数: 12)

整体结构类图.png
rm for android (原生开发)
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9275
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

6
发表于 2013-5-12 14:25:01 | 只看该作者
ruby or lua or java or c# or object-c 我居然看成了 ruby or lu a lu rjava or c# or object-c ·······感觉RMXP很强大只是脚本复杂到新手完全只能被束缚在框架中,RMAV的话系统很多东西都有成品(比如装备提高角色生命的,RMXP就没有),但是脚本能做的东西就有点少
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
帖子
92
7
 楼主| 发表于 2013-5-12 16:50:09 | 只看该作者
chd114 发表于 2013-5-12 14:25
ruby or lua or java or c# or object-c 我居然看成了 ruby or lu a lu rjava or c# or object-c ···· ...

哈哈。 你太敏感了。   
谢谢你的回复。
RMAV的脚本还没有看。 主要看了xp的。
xp 和 vx 的脚本架构差不多。
其实这个引擎还是蛮强大的, 支持插入脚本,
感觉哪里不合适都可以改。 就是数据库是依照RPG
设计的, 做其他类型的游戏,改脚本较多。  
还有一个该引擎是基于格子判断的系统。
碰撞检测可能没那么精确, 还有攻击动画没有
关键帧和攻击区域的概念。 改arpg比较麻烦。
rm for android (原生开发)
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9275
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

8
发表于 2013-5-12 16:59:41 | 只看该作者
爆发的妞 发表于 2013-5-12 16:50
哈哈。 你太敏感了。   
谢谢你的回复。
RMAV的脚本还没有看。 主要看了xp的。

我个人是希望做一种类似《上古2》的游戏啦~~~感觉RMAV和VX出来都晚一些,所以觉得XP在时间上优势极端大···
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
帖子
92
9
 楼主| 发表于 2013-5-14 15:46:30 | 只看该作者
小弟模仿xp脚本在android平台实现了地图绘制的功能。
遇到的问题是 如果是2层地图的话,fps 只能达到20多帧,
1层的话, 40多帧。 3层的话真不敢想象。。。
本人机器配置:
型号:sumsung i9000
处理器:1G
分辨率:800*480
以我的机器为例:
每次绘制的格子数是
1层 (800/32=25)*(480/32=15) = 375
2层 375*2 = 750
也就是需要750次的循环了。 时间都耗在这里了。

帖子上我也看到了对于RMXP for android 模拟器的讨论。
http://blog.csdn.net/cxy1238/article/details/6954422
作者本人也说在他的G10也只是20左右。可见直接使用
模拟器是不太现实的。
我使用过的其他引擎,也基本上是一层的,对于移动设备来说。
2层估计扛不住了。

有谁有好的办法,或者解决方案,可以奉献出来啊, 小弟在此谢过。。

device-2013-05-14-154536.png (31.36 KB, 下载次数: 7)

device-2013-05-14-154536.png

点评

android做这些是需要优化的算法 和 优化的图像刷新方法  发表于 2013-8-1 12:06
rm for android (原生开发)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
20 小时
注册时间
2013-5-8
帖子
8
10
发表于 2013-5-14 20:17:30 | 只看该作者
爆发的妞 发表于 2013-5-14 15:46
小弟模仿xp脚本在android平台实现了地图绘制的功能。
遇到的问题是 如果是2层地图的话,fps 只能达到20多帧 ...

首先声明,我没有用过RPGMaker,所以对脚本不是很了解。
2D游戏开发,已经涉及了。不过最近要找工作的,因为要作品程序,只好做了简单的引擎。这两天正在考虑地图绘制问题。因此一直在66上DOWN资源,看到lz的帖子,
特来看一下。
不能提出什么建设性意见,权当笑料罢了。
以现代的cpu和gpu技术来说,如果2d绘图的掉帧,99%都是程序没有优化好,或者是设计的失误。手机也一样。如果是用android的话,估计是用opengl。这点,我大学的时候
看过一段时间opengl。现在忘记了。

首先先说下我的引擎绘制方案吧。2d游戏地图,经典的格子层,这是共识的无可多说。关键是怎么加快格子绘制进度。我设计引擎的时候,仿造<传奇>,建立三层,一层地板,
一层物品,中间根据角色位置来判断遮挡。最上一层,每单元2字节,来判断碰撞。
在地图绘制过程中,如类似传奇类的大型rpg,本身图元利用率就很低。所以,类似比奇,大多资源都是放在硬盘文件中,需要时候才能读取,但即使读取这些文件,本身也是很要花时间的。即便是 文件映射到内存。事先,我把传奇所有的图片压缩为png格式,因此不能直接写屏幕。这是我的引擎和传奇使用的D7最重要的区别。这点来,图片解压缩就需要花费时间。而且在基数长宽下会轻度失真。

在这个图中,绘制20*20单元格。每一个格子图元都是由即时加载生成。映射两个硬盘文件一个是地图数据,一个是图片集和。
总地图资源在40X40时一帧耗费0.265f秒,在2048X2048时耗费0.886秒。Alienware表示压力很大,在另外一台旧笔记本上彻底跑不动。原因在哪里?
解决方案
其实在绘制地图时候,第一帧总是要画很长时间,但是第二帧呢,如果不移动,第一帧和第二帧绘图就是相等。就算是移动只要不是用了随机传送卷,第一帧和第二帧也不会变化太大幅度。所以要充分利用这些。而且玩家在意的是角色而不是背景。 还记得 暗黑3 里,选项设置中有前景和背景之分吗。

所以我把第一帧绘制过的图形,存放在一个池子里,然后每次加载前,要先确认池中是否有存在的元素,这些元素可以重复利用。而对于手机rpgmaker之类,本身地图单元格就有很大的重复率。而且减少读写文件的次数。这次,在新引擎下绘制28X28 3层格子耗时几乎可以忽略。实测在0.0016波动。

其实最主要的,还是本身语言的痛处。android是Java,忽略了指针,就失去了自由控制变量生命周期和内存的自由。如同当需要不停依靠一个循环数组来检测是否重复资源的时候,使用指针和一个队列,就可以解决问题。
还有就是GPU的问题。
如果是android,理论上是可以操作gpu的。opengl情况我不清楚。但和dx大抵有类似的地方。首先你加载单元格时候,禁止cpu访问,而且使用writediscard,可以略微加快速度。还有就是合理使用内存和显存,在两者之间相互替换。因为我自己搞了1年左右的d9,本来想做游戏程序的,但硬生生被老师拿去做微分了。因为d9在图片操作的时候,释放速度一直不尽人意,所以我临时决定用d10绘制,d10不支持vista以下系统。
希望对你有帮助。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-29 03:25

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表