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

Project1

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

[已经过期] 战斗画面图片滚动的问题

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
122
在线时间
1740 小时
注册时间
2009-7-12
帖子
443
跳转到指定楼层
1
发表于 2011-11-21 21:25:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 serena718 于 2011-11-27 00:42 编辑


个人已经找出解决方案了!!请看5楼


我翻到了VX有个脚本可以在战斗画面上用图片显示雾的滚动
让画面看起来很有战场奔腾的感觉

我试着将他带入XP并做了些修改后
雾是有显示在画面上啦
但是不会动:'(

可以请各位帮忙看一下这段脚本有什么问题吗?
如果可以解决雾不会动的问题就更好了:loveliness:
  1. #==============================================================================
  2. # RGSS2_バトルミスト
  3. # tomoaky (http://hikimoki.hp.infoseek.co.jp/)
  4. #
  5. # 2010/03/29  ミストの表示サイズ等を少し変更
  6. # 2010/01/04  公開
  7. #
  8. # 戦闘シーンの背景に霧を表示するスクリプト素材です、
  9. # スクリプトエディタで "▼ 素材" の下あたりに挿入してください。
  10. # 動作には mist.拡張子 という画像ファイルが必要になります、
  11. # Graphics/System の中に置いてください。
  12. #==============================================================================

  13. #==============================================================================
  14. # □ 設定項目
  15. #==============================================================================
  16. module BMIST
  17.   SW_NOUSE = 18                           # 功能显示使用开关号码
  18. end

  19. #==============================================================================
  20. # ■ Sprite_Mist
  21. #==============================================================================
  22. class Sprite_Mist < Sprite
  23.   #--------------------------------------------------------------------------
  24.   # ● オブジェクト初期化
  25.   #--------------------------------------------------------------------------
  26.   def initialize(viewport)
  27.     super(viewport)
  28.     self.bitmap = RPG::Cache.picture("mist")
  29.     self.blend_type = 1
  30.     self.ox = 128
  31.     self.oy = 160
  32.     self.y = 480 - 128 - self.oy + rand(240)#32)
  33.     setup
  34.     self.x = rand(640)
  35.     @real_x = self.x << 10
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ● セットアップ
  39.   #--------------------------------------------------------------------------
  40.   def setup
  41.     @vx = rand(512) + 512
  42.     self.zoom_x = (rand(600) + 700) / 1200.0
  43.     if self.zoom_x < 1.0    # バトラーの奥に配置
  44.       self.z = 2
  45.     else                    # バトラーの手前に配置
  46.       self.z = 400
  47.     end
  48.     self.zoom_y = self.zoom_x
  49.     self.x = 640 + (128 * self.zoom_x).to_i
  50.     @real_x = self.x << 10
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ● 解放
  54.   #--------------------------------------------------------------------------
  55.   def dispose
  56.     self.bitmap.dispose
  57.     super
  58.   end
  59.   #--------------------------------------------------------------------------
  60.   # ● 更新
  61.   #--------------------------------------------------------------------------
  62.   def update
  63.     super
  64.     @real_x -= @vx
  65.     self.x = @real_x >> 10
  66.     setup if self.x < (0 - (128 * self.zoom_x).to_i)
  67.   end
  68. end

  69. #==============================================================================
  70. # ■ Spriteset_Battle
  71. #==============================================================================
  72. class Spriteset_Battle
  73.   #--------------------------------------------------------------------------
  74.   # ● バトルバックスプライトの作成
  75.   #--------------------------------------------------------------------------
  76.   alias bmist_spriteset_battle_initialize initialize
  77.   def initialize
  78.     bmist_spriteset_battle_initialize
  79.     @mist_sprites = []
  80.     unless $game_switches[BMIST::SW_NOUSE]
  81.       for i in 0..25 do @mist_sprites.push(Sprite_Mist.new(@viewport1)) end
  82.     end
  83.   end
  84.   #--------------------------------------------------------------------------
  85.   # ● バトルバックスプライトの解放
  86.   #--------------------------------------------------------------------------
  87.   alias bmist_spriteset_battle_dispose dispose
  88.   def dispose
  89.     bmist_spriteset_battle_dispose
  90.     for sprite in @mist_sprites do sprite.dispose end
  91.   end
  92.   #--------------------------------------------------------------------------
  93.   # ● バトルバックの更新
  94.   #--------------------------------------------------------------------------
  95.   alias bmist_spriteset_battle_update update
  96.   def update
  97.     bmist_spriteset_battle_update
  98.     for sprite in @mist_sprites do sprite.update end
  99.   end
  100. end


复制代码

那啥…我以為用戶名只是通行碼…
所以我暱稱不是serena718哈,是月見斐夜

Lv1.梦旅人

梦石
0
星屑
122
在线时间
1740 小时
注册时间
2009-7-12
帖子
443
2
 楼主| 发表于 2011-11-23 18:15:08 | 只看该作者
自顶下,等待高手解决
个人怀疑是update出了问题
问题是我完全看不出update哪里有问题了:'(

那啥…我以為用戶名只是通行碼…
所以我暱稱不是serena718哈,是月見斐夜
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
122
在线时间
1740 小时
注册时间
2009-7-12
帖子
443
3
 楼主| 发表于 2011-11-24 20:48:15 | 只看该作者
似乎是因为外来脚本插件有动到Spriteset_Battle 的部分
所以该脚本若放在外来脚本下
会发生sprite未被赋值的状况而出错
一开始我以为是for..i那边的问题
所以把initialize那边多定义了picture
可是还是出错
到底是该脚本的问题还是VX和XP的写法在这部分本身就有很大的差别?
可是不是同样是Ruby吗?不是应该一法通,万法通吗?
我已经风中凌乱了我……
个人是真的很想加这个效果在游戏里
如果可以希望有高手帮个忙看看……就算不能整合也点出我的盲点
拜托了……

点评

可是在Spriteset_Battle这块除了统整方法外差别应该是不大的……难道本身Sprite的写法根本就不同吗……?  发表于 2011-11-26 04:53
原则上RGSS和RGSS2脚本就不具备通用性(API除外……那真的是一通百通)  发表于 2011-11-24 21:33

那啥…我以為用戶名只是通行碼…
所以我暱稱不是serena718哈,是月見斐夜
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
122
在线时间
1740 小时
注册时间
2009-7-12
帖子
443
4
 楼主| 发表于 2011-11-26 04:54:47 | 只看该作者
这问题被我自己解决一半了
在插入部份的问题我改在Scene_Battle执行更新动作了
正常显示以及滚动效果都出来了,卡的问题也是还好……感觉fps并没有被拉很多……(可能因为才25个sprite吧……
但是剩下的问题就是在执行使用特技与物品时会停止update
我以为是loop do那边的关系可是看起又似乎没有……
往下找好像也找不到对于执行特技与物品时会停止循环的地方……
才刚解决完问题又出现一个问题,果真一波未平一波又起呀……

那啥…我以為用戶名只是通行碼…
所以我暱稱不是serena718哈,是月見斐夜
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
122
在线时间
1740 小时
注册时间
2009-7-12
帖子
443
5
 楼主| 发表于 2011-11-27 00:40:25 | 只看该作者
嗯……似乎真的被自己解决的差不多了(汗
楼上所说的问题也OK了,原因为外来脚本的写法不太一样
所以还是Loop do的问题,找一下他定义update的地方再做修改即可

这里说明一下我解决的方式
主要是将该脚本定义Spriteset_Battle的地方通通去掉,只留下上面的Sprite_Mist
然后在Scene_Battle的地方新增一个sprite即可

在Scene_Battle里def main找到生成其它窗口的部分加入
  1.     unless $game_switches[BMIST::SW_NOUSE]
  2.       @mist = []
  3.       for i in 0...25
  4.         @mist[i] = Sprite_Mist.new(@viewport1)
  5.       end
  6.     end
复制代码
然后在下面dispose的地方插入
  1.     for i in 0...25
  2.     @mist[i].dispose
  3.     end
复制代码
然后update的部分,为了能时刻更新窗口
所以直接在def main里找到刷新画面的部分
那里会有一个loop do的循环
在循环里插入
  1.       for i in 0...25
  2.       @mist[i].update
  3.       end
复制代码
执行刷新动作

至于下面的update类那边就不要再定义了
这样会变成重复刷新,很耗内存

这是我的解决方案,希望能给不懂的人一些帮助:loveliness:

那啥…我以為用戶名只是通行碼…
所以我暱稱不是serena718哈,是月見斐夜
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-24 03:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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