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

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: 一箭烂YiJL
打印 上一主题 下一主题

[原创发布] 【更新】提高游戏运行速度_v1.01

[复制链接]

Lv4.逐梦者

梦石
0
星屑
6545
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

11
发表于 2011-4-23 11:18:28 | 只看该作者
本帖最后由 后知后觉 于 2011-4-23 11:19 编辑

回复 一箭烂YiJL 的帖子

主要就要看 谁来适应谁 了.

点评

回帖:适应的话,1.01可适应两种。但两种都不好= =  发表于 2011-4-23 18:01
回点评:脚本一贴见效,没什么人想在草原奔跑= =(下载次数:0),VX区那帖比这里水多了。(防水严?or这里没人认识我?)  发表于 2011-4-23 18:01
另外就是.如果你不想此帖被水掉的话.最好把回帖可见去掉.我不反对此帖设置回帖可见.  发表于 2011-4-23 11:24











你知道得太多了

回复 支持 反对

使用道具 举报

Lv3.寻梦者

弓箭手?剑兰

梦石
0
星屑
4834
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
12
 楼主| 发表于 2011-4-23 17:49:09 | 只看该作者
回复 苏小脉 的帖子

也就是要在函数中赋值。 alias放上,原版更上?但原版是函数外赋值的话,就麻烦了。
如果能对method、alias、alias_method......下做method_defined?、unless...的话能解决?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
13
发表于 2011-4-24 01:53:00 | 只看该作者
一箭烂YiJL 发表于 2011-4-23 17:49
回复 苏小脉 的帖子

也就是要在函数中赋值。 alias放上,原版更上?但原版是函数外赋值的话,就麻烦了。

什么“函数中赋值”?不解。

我在那篇文章中写道把 callcc 放在 Main 脚本开头是因为考虑到 Main 脚本之前都有可能发生 alias 的问题,如果你确信某段脚本没有 alias 的问题,然后希望 F12 后重新执行,就把 callcc 的调用提前到该脚本执行前就行了。如果有不连贯的情况,比如前一段需要重新执行,而后一段又会有 alias 的问题,那可以连续设两个 Continuation 跳转点。

判断 method_defined? 可以解决问题,但不是所有写脚本的人都有这个习惯,要是需要去兼容没有这个判断的,同时又使用了大量 alias 的脚本,就要大费周章了。
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

Lv3.寻梦者

弓箭手?剑兰

梦石
0
星屑
4834
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
14
 楼主| 发表于 2011-4-24 10:56:38 | 只看该作者
回复 苏小脉 的帖子

“函数中赋值”意思是要在函数中定义变量的值:
  1. @a = 50 if @a.nil?
  2. @b = Sprite.new if @b.nil? or @b.disposed?
复制代码
但是在常用的update中会耗用逻辑运算时间。
(尤其在没有initialize的模块类,除非另外开一个函数定义变量。)

还要自设跳转点啊...那么alias那些就要跟函数外定义变量的模块都要拆开?

我指的"下手"是在method、alias、alias_method......这些函数内部下手,
让method_defined?为false的时候才工作。(但是这似乎是不可能的)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
15
发表于 2011-4-24 11:49:35 | 只看该作者
回复 一箭烂YiJL 的帖子
“函数中赋值”意思是要在函数中定义变量的值
抱歉,我还是没跟上,这个和我们之前讨论的有什么联系?

还要自设跳转点啊...那么alias那些就要跟函数外定义变量的模块都要拆开?

不用啊,为什么?那篇文章里面给的例子就是在 Main 的开头设立了一个跳转点,我的意思是需要的话可以在不同的地方设立多个,这样可以控制 F12 之后哪段执行,哪段跳过。

我指的"下手"是在method、alias、alias_method......这些函数内部下手,
让method_defined?为false的时候才工作。(但是这似乎是不可能的)

只要是 Ruby 的方法就可以钩住,但是语法糖 alias 不行,因为它直接调用底层的 alias 实现了。当然,可以扩展 Ruby。
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
432
在线时间
4175 小时
注册时间
2010-6-26
帖子
6474
16
发表于 2011-4-24 13:49:01 | 只看该作者

那个分辨率扩展卡屏不简单

本帖最后由 eve592370698 于 2011-4-24 20:24 编辑

是吗?http://rpg.blue/thread-162509-1-1.html这个是用分辨率扩展会卡屏的缺陷能解决吗?
图片是一方面,还有就是事件超过30个会卡屏,如果设置了远景图和雾,事件超过50个,那FPS就是个位数了。

ZTBS战旗系统86.rar

1.16 MB, 下载次数: 60

点评

如果卡屏是因为图案的话,可以在Sprite给Viewport类这个参数。  发表于 2011-4-24 13:53
潜水,专心忙活三次元工作了……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

PIG·KIN

梦石
0
星屑
45
在线时间
442 小时
注册时间
2009-1-26
帖子
3298

贵宾

17
发表于 2011-4-24 14:08:58 | 只看该作者
哦?并行变量运行太多能有帮助么……研究研究

点评

原理是跳帧,应该是无助的,重申"速度不代表效率"= =  发表于 2011-4-24 14:14
我是一个风一般的————外卖佬。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

弓箭手?剑兰

梦石
0
星屑
4834
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
18
 楼主| 发表于 2011-4-24 21:45:37 | 只看该作者
回复 苏小脉 的帖子
抱歉,我还是没跟上,这个和我们之前讨论的有什么联系?

之前不是说过用您的办法后函数外给变量定义会出错么?(沉影dll鼠标会出现Sprite disposed)
但是函数内给变量定义且没问题。看一下两个例子:
  1. # 函数外赋值(F12杯具)
  2. $__f12_no_reeval.call if $__f12_no_reeval
  3. module AAA
  4.   @a = Sprite.new
  5.   def self.a
  6.     @a.x = 100
  7.     p @a.x
  8.   end
  9. end
  10. callcc { |$__f12_no_reeval| }
  11. AAA.a     # 代表Scene_Base的update
复制代码

如果是函数内赋值:
  1. # 函数内赋值(F12无问题, 但耗费逻辑时间)
  2. $__f12_no_reeval.call if $__f12_no_reeval
  3. module AAA
  4.   def self.a
  5.     @a = Sprite.new if @a.nil? or @a.disposed?
  6.     @a.x = 100
  7.     p @a.x
  8.   end
  9. end
  10. callcc { |$__f12_no_reeval| }
  11. AAA.a     # 代表Scene_Base的update
复制代码

不用啊,为什么?那篇文章里面给的例子就是在 Main 的开头设立了一个跳转点,我的意思是需要的话可以在不同的地方设立多个,这样可以控制 F12 之后哪段执行,哪段跳过。

如果跳一次的话,就要将alias和函数外定义变量分开= =但是跳来跳去也挺乱的。
但是这样(即有alias和函数外定义变量):
  1. #~ $__f12_no_reeval.call if $__f12_no_reeval
  2. module Graphics
  3.   @speed_update = method("update")
  4.   @speed_lv = Sprite.new
  5.   @speed_lv.x = 50
  6.   def self.update
  7.     a = @speed_lv.x
  8.     @speed_update.call
  9.   end
  10. end
  11. #~ callcc { |$__f12_no_reeval| }
  12. Graphics.update      # 代表后置的场景操作
  13. # 用callcc的时候会发生Sprite disposed
  14. # 不用的时候会发生stack level too deep
复制代码

而我说的将两者分开的做法是这样:
  1. $__f12_no_reeval.call if $__f12_no_reeval
  2. # alias/函数 堆
  3. module Graphics
  4.   @speed_update = method("update")
  5.   def self.update
  6.     a = @speed_lv.x
  7.     @speed_update.call
  8.   end
  9. end

  10. callcc { |$__f12_no_reeval| }  # callcc

  11. # 函数外赋值 堆
  12. module Graphics
  13.   @speed_lv = Sprite.new
  14.   @speed_lv.x = 50
  15. end

  16. Graphics.update      # 代表后置的场景操作
复制代码

我想您说的办法应该是这样:

  1. $__f12_no_reeval.call if $__f12_no_reeval
  2. module Graphics
  3.   @speed_update = method("update")
  4.   callcc { |$__f12_no_reeval| }    # callcc
  5.   @speed_lv = Sprite.new
  6.   @speed_lv.x = 50
  7.   def self.update
  8.     a = @speed_lv.x
  9.     @speed_update.call
  10.   end
  11. end
  12. Graphics.update      # 代表后置的场景操作
复制代码

嗯~相信您会清楚我在说啥...
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
19
发表于 2011-4-25 02:50:23 | 只看该作者
一箭烂YiJL 发表于 2011-4-24 21:45
回复 苏小脉 的帖子

哈,劣兄愚钝,压根没想到。一箭老弟果然思绪缜密~

点评

不~苏比咱厉害多了, 以后还有不少问题要请教呢 !  发表于 2011-4-25 12:01
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
201 小时
注册时间
2011-1-9
帖子
142
20
发表于 2011-4-25 11:22:02 | 只看该作者
我要范例啊!!!!!!!
哎,我又回来了,66rpg。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-29 18:08

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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