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

Project1

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

[已经过期] 怎么获取敌人的战斗图像??

[复制链接]

Lv2.观梦者

梦石
0
星屑
380
在线时间
602 小时
注册时间
2014-5-8
帖子
699
跳转到指定楼层
1
发表于 2014-10-25 13:42:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 布罗利 于 2014-10-25 13:44 编辑

我正在弄一个赏金系统(就是打死怪物后不能直接获得金钱,得到相应的地方领取)
金钱数值的处理已经完成了,我想让画面华丽一点,把已经打败的怪物全部都显示出来,然后在获得金钱
如图:
大概就是这样的效果
只是敌人的战斗图,金钱的数值我都弄好了
求给个思路,范例什么的
先谢谢了
@美丽晨露
@RyanBern
@芯☆淡茹水

Lv4.逐梦者

「Pemercyia」


Urhurrenna

梦石
0
星屑
9397
在线时间
2748 小时
注册时间
2008-9-5
帖子
3543

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

2
发表于 2014-10-25 13:52:30 | 只看该作者
思路就是选一个全局变量($game_party,$game_system什么的都可以),新建一个数组a,
之后在Scene_Battle里建一个数组b,战斗开始的时候把所有敌人复制一份塞进这个数组,
战斗结束,胜利的场合,把数组b的内容一个个push进数组a,
在交付界面的时候数组a里面就是已经打败的敌人集合了~
之后要怎么处理楼下来接上吗?
反正交付完成后数组a是要清空一下~

点评

然后上面的思路是用脚本来执行的,但牵扯的范围较多,也还有一些不舒服的地方,比如把数组里相同的敌人整理到一起……只是提供一下思路哈~  发表于 2014-10-25 14:13
我记得用战斗事件的话,胜利结束战斗的判定会优先于以【敌人全灭】为条件执行的战斗事件,所以用战斗事件做不来这个~  发表于 2014-10-25 14:11
能给出个范例吗,实在是不太懂,怎么复制敌人?复制ID??  发表于 2014-10-25 14:03
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
帖子
11485

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

3
发表于 2014-10-25 18:11:14 | 只看该作者
魔女的VX工程也有类似的悬赏事件。
主要是用脚本太麻烦了。
魔女的做法是:
1.将通缉令用PS事先做好
2.在游戏工程中,NPC(墙角照片)事件显示图片——通缉令(未击破)
3.打败该通缉者打开某开关
4.在NPC(墙角照片)事件显示图片——通缉令(已击破)
5.以上用到的是明雷遇怪效果哟。
当然,2楼前辈的做法可能比魔女要好得多。
你参考一下她的说明试试看也会不错的说。

点评

↓ 不清楚,这边倒是准备仿制一些重装1的内容到工程中。@沙漠点灰,他做过重装的同人游戏。  发表于 2014-10-25 21:02
既然玩过mm1了,问个问题,mm1的系统如果用rMXP制作,难度会有多大?  发表于 2014-10-25 21:00
↓ 没有碰过重装2的飞过······  发表于 2014-10-25 20:59
MM2R 最好,MM1 最经典。  发表于 2014-10-25 20:37
↓ MM1 大爱,以前读初中时最爱玩这个。  发表于 2014-10-25 20:36
大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33424
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

4
发表于 2014-10-25 19:04:38 | 只看该作者
每个小怪都有!那就需要额外储存,在战斗胜利时记数。
并且还要显示,弄起来有点麻烦。

点评

哦哦,那等抽出空帮我看一眼吧  发表于 2014-10-25 19:43
汗~!本人的巨坑还在填,魔女的委托还没头绪,到论坛逛的时间都少了。时间啊~~~~  发表于 2014-10-25 19:21
其实目的就是为了得到赏金,目的已经达到了,想让画面有所提升,所以才这样 可不可以帮弄弄?  发表于 2014-10-25 19:13
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

5
发表于 2014-10-25 19:44:59 | 只看该作者
本帖最后由 RyanBern 于 2014-10-25 21:03 编辑

2L已经说明,必须要记录打败敌人的数量,这点可以在$game_system里面开一个Hash表(和2L不同,这里用的是Hash表而不是数组,这是模仿游戏存储道具的数据结构设定)。然后就是在每次战斗结束后对此Hash表进行操作即可。然后就是敌人战斗图的显示,可以利用$data_enemies[id].batter_name来获取战斗图名字。下面是一个简易的窗口,由于战斗图大小各异,所以请保证战斗图大小一致,否则会引起排版错乱。这里默认战斗图是100*100。

不知道你用的什么办法计算最终得到金钱的数量的,只能做到这一步了。战斗结束时自动记录敌人,打开这个界面后,按Esc退出金钱自动会增加。
我这里没有闪退的问题,不知道你改了哪里。
RUBY 代码复制
  1. #===============================================================================
  2. # ■ Scene_赏金系统
  3. #-------------------------------------------------------------------------------
  4. #  处理赏金画面的类
  5. #===============================================================================
  6. class Scene_赏金系统
  7.   #--------------------------------------------------------------------------
  8.   # ● 主处理
  9.   #--------------------------------------------------------------------------
  10.  
  11.   def main
  12.     @sprite=Sprite.new
  13.     @sprite.bitmap=RPG::Cache.picture("赏金背景")
  14.     @enemy_window = Window_Enemy.new
  15.     Graphics.transition
  16.     loop do
  17.       Graphics.update
  18.       Input.update
  19.       # 如果切换画面就中断循环
  20.       update
  21.       if $scene != self
  22.         break
  23.       end
  24.     end
  25.     # 准备过渡
  26.     Graphics.freeze
  27.     @sprite.dispose
  28.     @enemy_window.dispose
  29.   end
  30.   def update
  31.     if Input.trigger?(Input::B)
  32.       $game_system.clear_defeated
  33.       $game_party.gain_gold($kklt)
  34.       $kklt = 0
  35.       $scene = Scene_Map.new
  36.       return
  37.     end
  38.   end
  39. end
  40. #==============================================================================
  41. class Game_System
  42.   alias rb_initialize_20141025 initialize
  43.   def initialize
  44.     @defeated_enemies = {}
  45.     rb_initialize_20141025
  46.   end
  47.   def defeated_enemy_number(enemy_id)
  48.     return @defeated_enemies[enemy_id] == nil ? 0 : @defeated_enemies[enemy_id]
  49.   end
  50.   def defeated_enemy_number_add(enemy_id, n)
  51.     @defeated_enemies[enemy_id] = [defeated_enemy_number(enemy_id) + n, 0].max
  52.   end
  53.   def clear_defeated
  54.     @defeated_enemies = {}
  55.   end
  56. end
  57. #==============================================================================
  58. class Window_Enemy < Window_Base
  59.   def initialize
  60.     super(0, 0, 480, 480)
  61.     self.contents = Bitmap.new(width - 32, height - 32)
  62.     self.opacity = 0
  63.     refresh
  64.   end
  65.   def refresh
  66.     self.contents.clear
  67.     @data = []
  68.     (1...$data_enemies.size).each do |i|
  69.       if $game_system.defeated_enemy_number(i) > 0
  70.         @data.push($data_enemies[i])
  71.       end
  72.     end
  73.     self.contents.font.size = 36
  74.     @data.each_with_index do |enemy, i|
  75.       x = 4 +  i % 2 * 240
  76.       y = i / 2 * 100
  77.       bitmap = RPG::Cache.battler(enemy.battler_name, enemy.battler_hue)
  78.       self.contents.blt(x, y, bitmap, Rect.new(0,0,100,100))
  79.       self.contents.draw_text(x + 104, y, 100, 100, "×" + $game_system.defeated_enemy_number(enemy.id).to_s, 2)
  80.     end
  81.     self.contents.draw_text(0, 400, 400-32, 64, $kklt.to_s + "G", 2)
  82.   end
  83. end
  84. class Scene_Battle
  85.   alias rb_battle_end battle_end
  86.   def battle_end(result)
  87.     if result == 0
  88.       $game_troop.enemies.each do |enemy|
  89.         $game_system.defeated_enemy_number_add(enemy.id, 1)
  90.       end
  91.     end
  92.     rb_battle_end(result)
  93.   end
  94. end

点评

脚本不是这么写的,再好好理解一下默认脚本吧。你可以试试把所有的场景类的main改成initialize,体会一下、  发表于 2014-10-25 23:06
我在用main的时候才会出现各种奇葩啊,那个字体的颜色没定义?默认是白色?  发表于 2014-10-25 21:32
我在用main的时候才会出现各种奇葩啊  发表于 2014-10-25 21:29
还是那句话,如果不是特殊要求,场景刷新要定义在main中。可能是你还在使用你原来的Scene_赏金系统配上我增加的两个类。这是有问题的。  发表于 2014-10-25 21:18
用我帖子里面的这个。你从哪里学的Scene类的场景刷新要定义在initialize里的?如果用initialize肯定会出现各种奇葩事情啊……  发表于 2014-10-25 21:15

评分

参与人数 1星屑 +20 收起 理由
布罗利 + 20

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
380
在线时间
602 小时
注册时间
2014-5-8
帖子
699
6
 楼主| 发表于 2014-10-25 20:08:27 | 只看该作者
本帖最后由 RyanBern 于 2014-10-25 20:27 编辑
RyanBern 发表于 2014-10-25 19:44
2L已经说明,必须要记录打败敌人的数量,这点可以在$game_system里面开一个Hash表(和2L不同,这里用的是Ha ...


完全看不懂,把你的脚本复制到我目前写的里,但是没有任何效果.帮看一下
RUBY 代码复制
  1. #===============================================================================
  2. # ■ Scene_赏金系统
  3. #-------------------------------------------------------------------------------
  4. #  处理赏金画面的类
  5. #===============================================================================
  6. class Scene_赏金系统
  7.   #--------------------------------------------------------------------------
  8.   # ● 主处理
  9.   #--------------------------------------------------------------------------
  10.  
  11.   def main
  12.     @sprite=Sprite.new
  13.     @sprite.bitmap=RPG::Cache.picture("Graphics/Pictures/赏金系统.png")
  14.     @enemy_window = Window_Enemy.new
  15.     $game_party.gain_gold($kklt)
  16.     $kklt = 0
  17.     loop do
  18.       Graphics.update
  19.       Input.update
  20.       # 如果切换画面就中断循环
  21.       update
  22.       if $scene != self
  23.         break
  24.       end
  25.     end
  26.     # 准备过渡
  27.     Graphics.freeze
  28.     @sprite.dispose
  29.     @enemy_window.dispose
  30.   end
  31.   def update
  32.     if Input.trigger?(Input::B)
  33.       $scene = Scene_Map.new
  34.       return
  35.     end
  36.   end
  37. end
  38. #==============================================================================
  39. class Game_System
  40.   alias rb_initialize_20141025 initialize
  41.   def initialize
  42.     @defeated_enemies = {}
  43.     rb_initialize_20141025
  44.   end
  45.   def defeated_enemy_number(enemy_id)
  46.     return @defeated_enemies[enemy_id] == nil ? 0 : @defeated_enemies[enemy_id]
  47.   end
  48.   def defeated_enemy_number_add(enemy_id, n)
  49.     @defeated_enemies[enemy_id] = [defeated_enemy_number(enemy_id) + n, 0].max
  50.   end
  51. end
  52. #==============================================================================
  53. class Window_Enemy < Window_Base
  54.   def initialize
  55.     super(0, 0, 480, 480)
  56.     self.contents = Bitmap.new(width - 32, height - 32)
  57.     refresh
  58.   end
  59.   def refresh
  60.     self.contents.clear
  61.     @data = []
  62.     (1...$data_enemies.size).each do |i|
  63.       if $game_system.defeated_enemy_number(i) > 0
  64.         @data.push($data_enemies[i])
  65.       end
  66.     end
  67.     self.contents.font.size = 36
  68.     @data.each do |enemy|
  69.       x = 4 +  i % 2 * 240
  70.       y = i / 2 * 100
  71.       bitmap = RPG::Cache.batter(enemy.battler_name, enemy.battler_hue)
  72.       self.contents.blt(x, y, bitmap, Rect.new(0,0,100,100))
  73.       self.contents.draw_text(x + 104, y, 100, 100, "×" + $game_system.defeated_enemy_number(enemy.id).to_s, 2)
  74.     end
  75.   end
  76. end

点评

这回呢?在这个帖里面  发表于 2014-10-25 20:27
我从来没说脚本放进去就能用啊喂,我还以为你能意会到怎么用呢……我直接在你这个帖上编辑了。而且,你Scene类写得不太对劲。这回再看看吧  发表于 2014-10-25 20:18
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-11 20:55

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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