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

Project1

 找回密码
 注册会员
搜索
楼主: 爆发的妞
打印 上一主题 下一主题

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
帖子
92
21
 楼主| 发表于 2013-5-24 09:26:24 | 只看该作者
小里程碑,移动设备,完美实现,行走地图

device-2013-05-24-092320.png (37.7 KB, 下载次数: 19)

device-2013-05-24-092320.png
rm for android (原生开发)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
帖子
92
22
 楼主| 发表于 2013-6-3 13:23:20 | 只看该作者
当添加其他角色的时候, 当主角行走的时候, 其他角色会有稍微的偏移现象,
查了好久,发现数据显示都是正常的,百思不得其解, 最后发现是Sprite_Character
里面出了问题。
他的update绘制方法:
主要逻辑是这样的,
1.首先super,调用父类的update
2.然后
    # 设置脚本的坐标
    self.x = @character.screen_x
    self.y = @character.screen_y
    self.z = @character.screen_z(@ch)
设置位置等。

这就产生问题了, 当逻辑执行完,要绘制的时候,
第一帧没有进行相应的变化, 而是等下一帧才变化。
有一帧的延迟。
做法是把super放到方法最后执行。
rm没有这个问题,我重写的会有这个问题。

device-2013-06-03-131436.png (46.43 KB, 下载次数: 15)

device-2013-06-03-131436.png
rm for android (原生开发)
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
524
在线时间
329 小时
注册时间
2013-5-16
帖子
740
23
发表于 2013-6-3 18:08:30 | 只看该作者
不懂楼主表达什么意思
承接各类软件制作以及手机APP等...
我来开始为您讲述一个故事。
有一天,小明去了一个恐怖的森林。
他走了三天三夜,竟然发现了一位漂亮的公主。
公主指着遥远的另一边说。
   那里。才是我们的王堡

[零度火花论坛。原创游戏制作新城堡。请点击。期待来临。]
[零度火花论坛。原创游戏制作新城堡。请点击。期待来临。]
[零度火花论坛。原创游戏制作新城堡。请点击。期待来临。]
(温馨提示:我长达一年以及更久的时间内我没有打理也不会打理零度火花,广告机已经逆天,所以大家最好不要戳进去...)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
帖子
92
24
 楼主| 发表于 2013-6-4 09:06:25 | 只看该作者
恶魔般的天使 发表于 2013-6-3 18:08
不懂楼主表达什么意思

呵呵。等你重写一下引擎,你就明白了。
rm for android (原生开发)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
帖子
92
25
 楼主| 发表于 2013-6-20 17:17:04 | 只看该作者
本帖最后由 爆发的妞 于 2013-6-21 17:41 编辑

需要用到数据库中的图块的数据,直接解析生成的文件, 貌似没有那么容易,
结构不太明白,还需要深入学习。所以就简单的在工程中输出了。
需要用到的同学,可以拿去

代码如下:
RUBY 代码复制
  1. #输出Tilesets
  2.     #创建一个可写文件流
  3.     fh = File.new(sprintf("Data/Tilesets.rx"), "w")
  4.     #输出地图数据
  5.     size = $data_tilesets.size - 1
  6.     for i in 1..size
  7.         tileset = $data_tilesets[i]
  8.         tileset_name = tileset.tileset_name
  9.         autotile_names = tileset.autotile_names
  10.         panorama_name = tileset.panorama_name
  11.         panorama_hue = tileset.panorama_hue
  12.         fog_name = tileset.fog_name
  13.         fog_hue = tileset.fog_hue
  14.         fog_opacity = tileset.fog_opacity
  15.         fog_blend_type = tileset.fog_blend_type
  16.         fog_zoom = tileset.fog_zoom
  17.         fog_sx = tileset.fog_sx
  18.         fog_sy = tileset.fog_sy
  19.         battleback_name = tileset.battleback_name
  20.         passages = tileset.passages
  21.         priorities = tileset.priorities
  22.         terrain_tags = tileset.terrain_tags
  23.         fh.puts i
  24.         fh.puts 'tileset_name  %s.png'% [tileset_name]
  25.         fh.print 'autotile_names  '
  26.         for i in 0..autotile_names.size
  27.             if autotile_names[i].nil?
  28.               fh.print ','
  29.             else
  30.               fh.print '%s.png,'% [autotile_names[i]]
  31.             end
  32.         end
  33.         fh.puts ''
  34.         passages_size = passages.xsize
  35.         fh.print 'passages  '
  36.         for i in 0..passages_size
  37.             fh.print '%s,'% [passages[i]]
  38.         end
  39.         fh.puts ''
  40.         priorities_size = priorities.xsize
  41.         fh.print 'priorities  '
  42.         for i in 0..priorities_size
  43.           if i==priorities_size
  44.             fh.print '%s'% [priorities[i]]
  45.           elsif i==0
  46.             fh.print '%s,'% [5]
  47.           else
  48.             fh.print '%s,'% [priorities[i]]
  49.           end
  50.         end
  51.        fh.puts ''
  52.     end
  53.     fh.close #关闭文件流


下面的代码是对应地图图块的数据输出,
代码如下:
RUBY 代码复制
  1. #创建一个可写文件流
  2.     fh = File.new(sprintf("Data/Map%03d.rx", @map_id), "w")
  3.     #输出地图数据
  4.     for i in 0..2
  5.       xsize = @map.data.xsize
  6.       #print xsize
  7.       ysize = @map.data.ysize
  8.       #print ysize
  9.       fh.puts '[w = %s][h = %s]'% [xsize,ysize]
  10.       for line in 0...ysize
  11.         for col in 0...xsize
  12.            tile_id = @map.data[col, line, i]
  13.            if tile_id == nil
  14.               #fh.puts "[%s][%s][%s]=%s" % [col, line,i,'空'] #写入数据
  15.               #print "[%s][%s][0]=%s" % [col, line,'空']
  16.               fh.print "%s," % ['空']
  17.             else
  18.               #fh.puts "[%s][%s][%s]=%s" % [col, line,i,tile_id] #写入数据
  19.               #print "[%s][%s][0]=%s" % [col, line,tile_id]
  20.               if col==xsize-1
  21.                  fh.print "%s" % [tile_id]
  22.               else
  23.                  fh.print "%s," % [tile_id]
  24.               end
  25.             end
  26.           end
  27.           fh.puts ''
  28.         end
  29.         fh.puts ''
  30.      end
  31.     fh.close #关闭文件流


后续还会解析其他的数据,感兴趣的可以,共同研究
rm for android (原生开发)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
帖子
92
26
 楼主| 发表于 2013-6-20 19:23:11 | 只看该作者
本帖最后由 爆发的妞 于 2013-6-20 19:43 编辑

rm for android (原生开发)
地图展示,不过不包含优先级的功能绘制



调了一下fps,和有对话脚本的图

device-2013-06-20-191050.png (218.96 KB, 下载次数: 13)

device-2013-06-20-191050.png

device-2013-06-20-194202.png (170.44 KB, 下载次数: 16)

device-2013-06-20-194202.png
rm for android (原生开发)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
帖子
92
27
 楼主| 发表于 2013-6-21 10:54:06 | 只看该作者
个位高人,小弟在做地图的绘制的时候遇到个问题,
我简单的描述一下吧:
看代码,可以了解到 sprite,plane和window是展示在
对应的viewport视口上面的。
但通篇都没有看到对于viewport和sprite等的绘制部分,
全是update逻辑处理。
我猜想一下他们是不是这样处理的, 每次new新建一个viewport
视口的时候,就在viewportManager(暂定视口管理器)添加一个,
然后 sprite也是如此, 有一个spriteManager来管理他们, 其他同理,
那么就是先根据viewport视口的z轴判断进行绘制, 然后再绘制viewport
视口内的 sprite等等(也是根据z轴来判断绘制), 如果rm内部这样来做的
话,逻辑倒也说的清除, 但是参考help(帮助文档),发现 sprite,plane和window
是继承object(基类的),而不是一个viewport视口能够统一处理的类,例如 baseSprite。
难道绘制的时候还判断了下实例, 这个真的不得而知, 不知道我的猜测有无道理。
如果有哪位同学知道的,可以赐教下。 谢谢啦。
rm for android (原生开发)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

炎发灼眼的讨伐者

梦石
0
星屑
50
在线时间
1707 小时
注册时间
2007-8-4
帖子
904
28
发表于 2013-6-22 11:29:35 | 只看该作者
继承自Object和Viewport是否能够统一处理没有必然联系(

继承自Object,Sprite也可以再Viewport的容器里(~
RMXP&RMVX通用Web化完成- -|||
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
帖子
92
29
 楼主| 发表于 2013-6-22 12:04:25 | 只看该作者
灼眼的夏娜 发表于 2013-6-22 11:29
继承自Object和Viewport是否能够统一处理没有必然联系(

继承自Object,Sprite也可以再Viewport的容器里( ...

谢谢高人指点。 不过我还是没明白他的结构。
sprite只是引用了viewport,就是说在某一个viewport视口里面。
但是viewport并没有对他进行管理啊。 有没有伪代码, 可以
看看。 谢谢啦。
rm for android (原生开发)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

炎发灼眼的讨伐者

梦石
0
星屑
50
在线时间
1707 小时
注册时间
2007-8-4
帖子
904
30
发表于 2013-6-22 12:42:30 | 只看该作者
爆发的妞 发表于 2013-6-22 12:04
谢谢高人指点。 不过我还是没明白他的结构。
sprite只是引用了viewport,就是说在某一个viewport视口里 ...

viewport没对sprite进行属性管理(但管理了 sprite的渲染(根据sprite的各种属性进行渲染
RMXP&RMVX通用Web化完成- -|||
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-27 23:07

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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