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

Project1

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

[已经过期] 用公共事件做技能动画 为何先出伤害然后才出动画

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
246 小时
注册时间
2012-7-17
帖子
196
跳转到指定楼层
1
发表于 2013-12-28 22:45:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我用公共事件做了个技能动画   为何先出伤害然后才出动画,如何先出动画再出伤害呢    谢谢
同人武侠游戏 【新侠客英雄传 X 最终版1.3】闪亮发布  请指教!  
用了很多好听的仙剑经典音乐,好看的系统菜单UI(全美化)和很多漂亮的动画视频等!采用45度全动画战斗,战斗精采华丽,菜单界面背景带动画等等.  欢迎提出意见!
https://rpg.blue/thread-369653-1-1.html

注意: 本游戏较特别、胆小勿玩!

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

2
发表于 2013-12-28 23:00:12 | 只看该作者
因为在Scene_Skill里面是技能效果先出来然后再执行公共事件,你把执行公共事件的语句调前就好了

评分

参与人数 1星屑 +90 收起 理由
myownroc + 90 我很赞同

查看全部评分

[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
246 小时
注册时间
2012-7-17
帖子
196
3
 楼主| 发表于 2013-12-29 21:56:34 | 只看该作者
chd114 发表于 2013-12-28 23:00
因为在Scene_Skill里面是技能效果先出来然后再执行公共事件,你把执行公共事件的语句调前就好了 ...

谢谢谢谢
同人武侠游戏 【新侠客英雄传 X 最终版1.3】闪亮发布  请指教!  
用了很多好听的仙剑经典音乐,好看的系统菜单UI(全美化)和很多漂亮的动画视频等!采用45度全动画战斗,战斗精采华丽,菜单界面背景带动画等等.  欢迎提出意见!
https://rpg.blue/thread-369653-1-1.html

注意: 本游戏较特别、胆小勿玩!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
246 小时
注册时间
2012-7-17
帖子
196
4
 楼主| 发表于 2013-12-29 22:04:31 | 只看该作者
chd114 发表于 2013-12-28 23:00
因为在Scene_Skill里面是技能效果先出来然后再执行公共事件,你把执行公共事件的语句调前就好了 ...

怎么调,具体说一 下
同人武侠游戏 【新侠客英雄传 X 最终版1.3】闪亮发布  请指教!  
用了很多好听的仙剑经典音乐,好看的系统菜单UI(全美化)和很多漂亮的动画视频等!采用45度全动画战斗,战斗精采华丽,菜单界面背景带动画等等.  欢迎提出意见!
https://rpg.blue/thread-369653-1-1.html

注意: 本游戏较特别、胆小勿玩!
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

5
发表于 2013-12-30 14:36:56 | 只看该作者
zmz6668 发表于 2013-12-29 22:04
怎么调,具体说一 下

你总不能连执行公共事件的脚本都看不懂吧···把那句调到最上面就是释放技能后先执行事件了
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
13 小时
注册时间
2014-2-7
帖子
5
6
发表于 2014-2-7 23:28:49 | 只看该作者
chd114 发表于 2013-12-30 14:36
你总不能连执行公共事件的脚本都看不懂吧···把那句调到最上面就是释放技能后先执行事件了 ...

我也是新手, 本人對腳本都不太懂, 但我也試調到最上面, 但也不成功. 可否再詳細說明一下嗎 ??

另外, 我也是用圖片代替施法動畫, 但我的技能接近一百種, 寫一百個公共事件的話,  聽說會公共事件太多會導致遊戲運行緩慢, 是真的嗎?? 有沒有方法可解決??

点评

這個我也不懂, 有沒有更簡單的方法 ??  发表于 2014-2-9 23:09
利用一个公共事件即可,先将Scene_Battle里的target_battlers用attr_accessor公开一下,然后就拿技能名分歧。  发表于 2014-2-8 07:50
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
568 小时
注册时间
2012-9-7
帖子
611
7
发表于 2014-2-8 10:23:26 | 只看该作者
对于新手而言,特别是不懂脚本的人,其实你可以换个思路
技能附带公共事件,那么这个技能不设置伤害,而在附带的公共事件里面设置伤害不就简单了
公共事件里面设置伤害敌人全体非常简单,系统选项里就有(你也可以用代入变量的方法做出很多不同的伤害值)
如果是单体,那么先给这个技能设置一个A状态(优先度为0,无法抵抗),然后在公共事件里面判断是否有处于A状态的敌人(就是麻烦点要写8次判断)
有的话则发生伤害再消除该状态
FTM正式版已经发布,点击图片开启传送门
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
13 小时
注册时间
2014-2-7
帖子
5
8
发表于 2014-2-10 22:53:36 | 只看该作者
1        #==============================================================================
2        # ■ Scene_Skill
3        #------------------------------------------------------------------------------
4        #  處理特技畫面的程式。
5        #==============================================================================
6       
7        class Scene_Skill
8          #--------------------------------------------------------------------------
9          # ● 初始化對像
10          #     actor_index : 角色索引
11          #--------------------------------------------------------------------------
12          def initialize(actor_index = 0, equip_index = 0)
13            @actor_index = actor_index
14          end
15          #--------------------------------------------------------------------------
16          # ● 主處理
17          #--------------------------------------------------------------------------
18          def main
19            # 獲取角色
20            @actor = $game_party.actors[@actor_index]
21            # 生成幫助窗口、狀態窗口、特技窗口
22            @help_window = Window_Help.new
23            @status_window = Window_SkillStatus.new(@actor)
24            @skill_window = Window_Skill.new(@actor)
25            # 關聯幫助窗口
26            @skill_window.help_window = @help_window
27            # 生成目標窗口 (設置為不可見?不活動)
28            @target_window = Window_Target.new
29            @target_window.visible = false
30            @target_window.active = false
31            # 執行過渡
32            Graphics.transition
33            # 主循環
34            loop do
35              # 刷新遊戲畫面
36              Graphics.update
37              # 刷新輸入訊息
38              Input.update
39              # 刷新畫面
40              update
41              # 如果畫面切換的話就中斷循環
42              if $scene != self
43                break
44              end
45            end
46            # 準備過渡
47            Graphics.freeze
48            # 釋放窗口
49            @help_window.dispose
50            @status_window.dispose
51            @skill_window.dispose
52            @target_window.dispose
53          end
54          #--------------------------------------------------------------------------
55          # ● 刷新畫面
56          #--------------------------------------------------------------------------
57          def update
58            # 刷新窗口
59            @help_window.update
60            @status_window.update
61            @skill_window.update
62            @target_window.update
63            # 特技窗口被激活的情況下: 調用 update_skill
64            if @skill_window.active
65              update_skill
66              return
67            end
68            # 目標窗口被激活的情況下: 調用 update_target
69            if @target_window.active
70              update_target
71              return
72            end
73          end
74          #--------------------------------------------------------------------------
75          # ● 刷新畫面 (特技窗口被激活的情況下)
76          #--------------------------------------------------------------------------
77          def update_skill
78            # 按下 B 鍵的情況下
79            if Input.trigger?(Input::B)
80              # 演奏取消 SE
81              $game_system.se_play($data_system.cancel_se)
82              # 切換到菜單畫面
83              $scene = Scene_Menu.new(1)
84              return
85            end
86            # 按下 C 鍵的情況下
87            if Input.trigger?(Input::C)
88              # 獲取特技窗口現下選擇的特技的數據
89              @skill = @skill_window.skill
90              # 不能使用的情況下
91              if @skill == nil or not @actor.skill_can_use?(@skill.id)
92                # 演奏凍結 SE
93                $game_system.se_play($data_system.buzzer_se)
94                return
95              end
96              # 演奏確定 SE
97              $game_system.se_play($data_system.decision_se)
98              # 效果範圍是我方的情況下
99              if @skill.scope >= 3
100                # 激活目標窗口
101                @skill_window.active = false
102                @target_window.x = (@skill_window.index + 1) % 2 * 304
103                @target_window.visible = true
104                @target_window.active = true
105                # 設置效果範圍 (單體/全體) 的對應游標位置
106                if @skill.scope == 4 || @skill.scope == 6
107                  @target_window.index = -1
108                elsif @skill.scope == 7
109                  @target_window.index = @actor_index - 10
110                else
111                  @target_window.index = 0
112                end
113              # 效果在我方以外的情況下
114              else
115                # 公共事件 ID 有效的情況下
116                if @skill.common_event_id > 0
117                  # 預約調用公共事件
118                  $game_temp.common_event_id = @skill.common_event_id
119                  # 演奏特技使用時的 SE
120                  $game_system.se_play(@skill.menu_se)
121                  # 消耗 SP
122                  @actor.sp -= @skill.sp_cost
123                  # 再生成各窗口的內容
124                  @status_window.refresh
125                  @skill_window.refresh
126                  @target_window.refresh
127                  # 切換到地圖畫面
128                  $scene = Scene_Map.new
129                  return
130                end
131              end
132              return
133            end
134            # 按下 R 鍵的情況下
135            if Input.trigger?(Input::R)
136              # 演奏游標 SE
137              $game_system.se_play($data_system.cursor_se)
138              # 移至下一位角色
139              @actor_index += 1
140              @actor_index %= $game_party.actors.size
141              # 切換到別的特技畫面
142              $scene = Scene_Skill.new(@actor_index)
143              return
144            end
145            # 按下 L 鍵的情況下
146            if Input.trigger?(Input::L)
147              # 演奏游標 SE
148              $game_system.se_play($data_system.cursor_se)
149              # 移至上一位角色
150              @actor_index += $game_party.actors.size - 1
151              @actor_index %= $game_party.actors.size
152              # 切換到別的特技畫面
153              $scene = Scene_Skill.new(@actor_index)
154              return
155            end
156          end
157          #--------------------------------------------------------------------------
158          # ● 刷新畫面 (目標窗口被激活的情況下)
159          #--------------------------------------------------------------------------
160          def update_target
161            # 按下 B 鍵的情況下
162            if Input.trigger?(Input::B)
163              # 演奏取消 SE
164              $game_system.se_play($data_system.cancel_se)
165              # 刪除目標窗口
166              @skill_window.active = true
167              @target_window.visible = false
168              @target_window.active = false
169              return
170            end
171            # 按下 C 鍵的情況下
172            if Input.trigger?(Input::C)
173              # 因為 SP 不足而無法使用的情況下
174              unless @actor.skill_can_use?(@skill.id)
175                # 演奏凍結 SE
176                $game_system.se_play($data_system.buzzer_se)
177                return
178              end
179              # 目標是全體的情況下
180              if @target_window.index == -1
181                # 對同伴全體應用特技使用效果
182                used = false
183                for i in $game_party.actors
184                  used |= i.skill_effect(@actor, @skill)
185                end
186              end
187              # 目標是使用者的情況下
188              if @target_window.index <= -2
189                # 對目標角色應用特技的使用效果
190                target = $game_party.actors[@target_window.index + 10]
191                used = target.skill_effect(@actor, @skill)
192              end
193              # 目標是單體的情況下
194              if @target_window.index >= 0
195                # 對目標角色應用特技的使用效果
196                target = $game_party.actors[@target_window.index]
197                used = target.skill_effect(@actor, @skill)
198              end
199              # 使用特技的情況下
200              if used
201                # 演奏特技使用時的 SE
202                $game_system.se_play(@skill.menu_se)
203                # 消耗 SP
204                @actor.sp -= @skill.sp_cost
205                # 再生成各窗口內容
206                @status_window.refresh
207                @skill_window.refresh
208                @target_window.refresh
209                # 全滅的情況下
210                if $game_party.all_dead?
211                  # 切換到遊戲結束畫面
212                  $scene = Scene_Gameover.new
213                  return
214                end
215                # 公共事件 ID 有效的情況下
216                if @skill.common_event_id > 0
217                  # 預約調用公共事件
218                  $game_temp.common_event_id = @skill.common_event_id
219                  # 切換到地圖畫面
220                  $scene = Scene_Map.new
221                  return
222                end
223              end
224              # 無法使用特技的情況下
225              unless used
226                # 演奏凍結 SE
227                $game_system.se_play($data_system.buzzer_se)
228              end
229              return
230            end
231          end
232        end

是否將115-131行及215-222行 搬前 ???  搬去那一行才對 ???
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

9
发表于 2014-2-11 03:14:46 | 只看该作者
豬事丁 发表于 2014-2-7 23:28
我也是新手, 本人對腳本都不太懂, 但我也試調到最上面, 但也不成功. 可否再詳細說明一下嗎 ??

另外, 我 ...

你可以在执行公共事件前面加一个变量获取,把变量X定义为正在使用的技能的ID,在公共事件写条件分歧,具体的效果跟魔塔样板是一样的
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-11 14:58

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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