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

Project1

 找回密码
 注册会员
搜索
楼主: 流川枫
打印 上一主题 下一主题

一款VX制作的游戏暴风书店,FPS就7帧!?事件执行拖慢

 关闭 [复制链接]

Lv1.梦旅人

B

梦石
0
星屑
50
在线时间
26 小时
注册时间
2007-8-26
帖子
3693
11
发表于 2008-10-19 21:26:09 | 只看该作者
标签用错了 - -
帖子错区了 - -
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
485
在线时间
177 小时
注册时间
2006-10-3
帖子
618
12
 楼主| 发表于 2008-10-19 21:31:40 | 只看该作者
以下引用ONEWateR于2008-10-19 13:26:09的发言:

标签用错了 - -
帖子错区了 - -

火星人都知道····{/pz}
在我初学RM的时候觉得脚本是高手的工具,等我学会了编程技术后才发现脚本原来是小孩子的玩具。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

风之塞尔达

梦石
0
星屑
50
在线时间
57 小时
注册时间
2005-10-22
帖子
2492

贵宾

13
发表于 2008-10-20 01:23:59 | 只看该作者
以下引用流川枫于2008-10-19 13:15:39的发言:
发现在解释指令的时候 用了几十个when来判断。也就是说,每执行一个指令就需要做N个判断后才能执行对应的函数


你想太多了  逐个判断, 那是 if elsif  才是
switch做的是内存地址的偏移, 然后得到正确的函数代码段, 效率比if elsif 高 (C++中... ...
                                                                                                    ruby未完全了解诶)
其实RM默认的很多脚本效率都不行...  
比如角色和NPC的passable?函数(完全可以在每一帧建立一个passable的图缓存,就不要每个事件都要遍历全部事件), 地图事件的更新函数(基本上, 很多事件当前或长久更本不需要执行)..
说道函数指针  RM可以使用Proc...
比如
EVENT_1   = 0, EVENT_2 = 1, ... ..., EVENT_N = n-1;
EVENT_FUNC = [
    Proc.new{
      // EVENT_1 函数
    },
    Proc.new{
    },
    ... ...
]

到时直接 EVENT_FUNC[index].call
当然了  如果事件的类型不是很多的话 proc.call 反而降低性能... ...
在程序里延续塞尔达的传说, 在画板上勾勒塞尔达的轮廓!!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

辉瑞中国首席研究员<

梦石
0
星屑
50
在线时间
142 小时
注册时间
2008-1-18
帖子
2129
14
发表于 2008-10-20 01:29:18 | 只看该作者
以下引用八云紫于2008-10-19 13:25:18的发言:

记得 Ruby 没有 指针 这个数据类型吧。

有 指针 该多好.


个人认为指针不好,提高编程复杂度(54我吧,平时不喜欢上机,数据结构一个半吊子) = =


来6r就是等某位仁兄的巨坑

褴褛着身行无端,囊中羞涩空心酸。
平生几无得意事,倒塔泡面宅寝室。
惟羡隔壁高帅富,雨露春风月夜声。
青丝无处觅其踪,只有硬盘苍井空。
莫云男儿空悲愁,鸿鹄岂不天际游。
坐断天下执鹿首,千百金帛万兜鍪。
夜深忽梦某年月,再见女神欲语迟。
吊丝终有逆袭日,木耳再无回粉时。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

风之塞尔达

梦石
0
星屑
50
在线时间
57 小时
注册时间
2005-10-22
帖子
2492

贵宾

15
发表于 2008-10-20 01:34:02 | 只看该作者
指针   ruby全部都是指针!!!
Ruby绑定C\C++数据用指针, ruby类的函数绑定也是用指针
ruby对象的操作是指针...
所以ruby没有类型, 应为全部是内存地址的交换...  较小的整型值就不是了
在程序里延续塞尔达的传说, 在画板上勾勒塞尔达的轮廓!!
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
299
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

16
发表于 2008-10-20 01:34:51 | 只看该作者
以下引用link006007于2008-10-19 17:34:02的发言:

指针   ruby全部都是指针!!!
Ruby绑定C\C++数据用指针, ruby类的函数绑定也是用指针
ruby对象的操作是指针...
所以ruby没有类型, 应为全部是内存地址的交换...  较小的整型值就不是了


但是不能显示的调用指针。

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-9-12
帖子
953
17
发表于 2008-10-20 01:36:50 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
485
在线时间
177 小时
注册时间
2006-10-3
帖子
618
18
 楼主| 发表于 2008-10-20 03:55:32 | 只看该作者
以下引用link006007于2008-10-19 17:23:59的发言:


以下引用流川枫于2008-10-19 13:15:39的发言:
发现在解释指令的时候 用了几十个when来判断。也就是说,每执行一个指令就需要做N个判断后才能执行对应的函数



你想太多了  逐个判断, 那是 if elsif  才是
switch做的是内存地址的偏移, 然后得到正确的函数代码段, 效率比if elsif 高 (C++中... ...
                                                                                                   ruby未完全了解诶)
其实RM默认的很多脚本效率都不行...  
比如角色和NPC的passable?函数(完全可以在每一帧建立一个passable的图缓存,就不要每个事件都要遍历全部事件), 地图事件的更新函数(基本上, 很多事件当前或长久更本不需要执行)..
说道函数指针  RM可以使用Proc...
比如
EVENT_1   = 0, EVENT_2 = 1, ... ..., EVENT_N = n-1;
EVENT_FUNC = [
   Proc.new{
     // EVENT_1 函数
   },
   Proc.new{
   },
   ... ...
]

到时直接 EVENT_FUNC[index].call
当然了  如果事件的类型不是很多的话 proc.call 反而降低性能... ...


"switch做的是内存地址的偏移" 不会吧?
我反汇编C的switch,结果却是:

or ax,ax //case 0:
je  XXX
cmp ax,3 //case 3:
je  XXX
jmp XXX //default:

C++的我没测试过···

但是也不可能偏移吧?偏移的话要求index是一个有序的value饿,
但是比如 case 0 case 3 case 15 的话,要怎么偏移?
在我初学RM的时候觉得脚本是高手的工具,等我学会了编程技术后才发现脚本原来是小孩子的玩具。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
485
在线时间
177 小时
注册时间
2006-10-3
帖子
618
19
 楼主| 发表于 2008-10-20 03:57:58 | 只看该作者
以下引用地龙于2008-10-19 17:36:50的发言:

你把事件删了被
然后再玩

那相当于在玩一个没有 系统 的游戏了。。。根本玩不来滴
在我初学RM的时候觉得脚本是高手的工具,等我学会了编程技术后才发现脚本原来是小孩子的玩具。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

风之塞尔达

梦石
0
星屑
50
在线时间
57 小时
注册时间
2005-10-22
帖子
2492

贵宾

20
发表于 2008-10-20 04:36:57 | 只看该作者
一定要有序的才能偏移吗?  在编译阶段 switch的case内容被编译成一段地址的跳转表,
然后在执行时,更具当前的值直接跳转到对应的代码段中, 也就是说  不管你case的内容有几条
在switch语句中, 都只有执行一次跳转(这可能也是switch要自己break的原因).  而if elsif 则是根据当前逻辑逐个判断...   
我不知道你是在什么环境下编译的, 不同的编译器, 在解释上是有一些差距的
case 0, 3, 5 直接就被编译成一张跳转表  和case值的有序,连续没太大关系

以上  我也不敢确定= =
不过Ruby的switch可能和C的不一样... C的只能是数值, 而RM可以case字符串= =
应该实现上不一样{/gg}
在程序里延续塞尔达的传说, 在画板上勾勒塞尔达的轮廓!!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-6 18:36

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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