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

Project1

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

ARPG彩虹神剑(涂鸦版本)-大家一起来找碴

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
49
在线时间
83 小时
注册时间
2008-4-19
帖子
420
跳转到指定楼层
1
发表于 2008-4-19 22:32:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
玩个脚本排错哈...
首先说一句,本脚本是在我隔着窗户监督CIS狂人而成。(我两个住对门)
大家一起来找碴...
构思:神话V冰蓝
脚本:(参考柳大的)神话V狂人 神话V冰蓝
  1. # 核心的说明:
  2. # damage_pop 不再附带damage()的功能,这个放到animation里面去了

  3. module RPG
  4.   class Sprite < ::Sprite
  5.     @@_animations = []
  6.     @@_reference_count = {}
  7.     #==========================================
  8.     # 修改说明:
  9.     # @flash_shake用来制作挨打时候跳跃
  10.     # @_damage    用来记录每次打击之后弹出数字
  11.     #==========================================
  12.     def initialize(viewport = nil)
  13.       super(viewport)
  14.       @flash_shake = 0
  15.       @_whiten_duration = 0
  16.       @_appear_duration = 0
  17.       @_escape_duration = 0
  18.       @_collapse_duration = 0
  19.       @_damage_duration = 0
  20.       @_animation_duration = 0
  21.       @_blink = false
  22.       @_damage = [] #~66RPG~#
  23.       @py_y = 0
  24.     end
  25.     def damage(value, critical)
  26.       if value.is_a?(Numeric)
  27.         damage_string = value.abs.to_s
  28.       else
  29.         damage_string = value.to_s
  30.       end
  31.       bitmap = Bitmap.new(160, 48)
  32.       bitmap.font.name = "Arial Black"
  33.       bitmap.font.size = 32
  34.       bitmap.font.color.set(0, 0, 0)
  35.       #bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  36.       #bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  37.       #bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  38.       bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  39.       #=======================================
  40.       # 修改:颜色
  41.       #=======================================
  42.       if value.is_a?(Numeric) and value < 0
  43.         bitmap.font.color.set(176, 255, 144)
  44.       else
  45.         bitmap.font.color.set(255, 55, 55)
  46.       end
  47.       bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  48.       if critical
  49.         bitmap.font.size = 20
  50.         bitmap.font.color.set(0, 0, 0)
  51.         #bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
  52.         #bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
  53.         #bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
  54.         bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
  55.         bitmap.font.color.set(255, 255, 255)
  56.         bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  57.       end
  58.       @_damage_sprite = ::Sprite.new(self.viewport)
  59.       @_damage_sprite.bitmap = bitmap
  60.       @_damage_sprite.ox = 80
  61.       @_damage_sprite.oy = 20
  62.       @_damage_sprite.x = self.x
  63.       @_damage_sprite.y = self.y - self.oy / 2
  64.       @_damage_sprite.z = 3000
  65.       @_damage_duration = 40
  66.       #=======================================
  67.       # 修改:推入新的伤害
  68.       #=======================================
  69.       @_damage.push([@_damage_sprite,@_damage_duration-10,0, rand(30) - 15, rand(3)])
  70.     end
  71.     def animation(animation, hit, battler_damage="", battler_critical=false)
  72.       dispose_animation      
  73.       #=======================================
  74.       # 修改:记录伤害和critical
  75.       #=======================================
  76.       @character.damage = battler_damage
  77.       @character.critical = battler_critical
  78.       @_animation = animation
  79.       return if @_animation == nil
  80.       @_animation_hit = hit
  81.       @_animation_duration = @_animation.frame_max
  82.       animation_name = @_animation.animation_name
  83.       animation_hue = @_animation.animation_hue
  84.       bitmap = RPG::Cache.animation(animation_name, animation_hue)
  85.       #=======================================
  86.       # 修改:计算总闪光权限值
  87.       #=======================================
  88.       for timing in @_animation.timings
  89.         @all_quanzhong += animation_process_timing(timing, @_animation_hit)        
  90.       end      
  91.       if @@_reference_count.include?(bitmap)
  92.         @@_reference_count[bitmap] += 1
  93.       else
  94.         @@_reference_count[bitmap] = 1
  95.       end
  96.       @_animation_sprites = []
  97.       if @_animation.position != 3 or not @@_animations.include?(animation)
  98.         for i in 0..15
  99.           sprite = ::Sprite.new(self.viewport)
  100.           sprite.bitmap = bitmap
  101.           sprite.visible = false
  102.           @_animation_sprites.push(sprite)
  103.         end
  104.         unless @@_animations.include?(animation)
  105.           @@_animations.push(animation)
  106.         end
  107.       end
  108.       update_animation
  109.     end
  110.     #=======================================
  111.     # 修改:更换清除伤害的算法,以防万一
  112.     #       本内容在脚本中没有使用过
  113.     #=======================================
  114.     def dispose_damage
  115.       for damage in @_damage.reverse
  116.         damage[0].bitmap.dispose
  117.         damage[0].dispose
  118.         @_damage.delete(damage)
  119.       end
  120.     end
  121.     def dispose_animation
  122.       #=======================================
  123.       # 修改:清除记录的伤害,清除权重记录
  124.       #=======================================
  125.       #@character.damage = nil
  126.       #@character.critical = false
  127.       @all_quanzhong = 1
  128.       if @_animation_sprites != nil
  129.         sprite = @_animation_sprites[0]
  130.         if sprite != nil
  131.           @@_reference_count[sprite.bitmap] -= 1
  132.           if @@_reference_count[sprite.bitmap] == 0
  133.             sprite.bitmap.dispose
  134.           end
  135.         end
  136.         for sprite in @_animation_sprites
  137.           sprite.dispose
  138.         end
  139.         @_animation_sprites = nil
  140.         @_animation = nil
  141.       end
  142.     end
  143.     def update
  144.       super
  145.       if @_whiten_duration > 0
  146.         @_whiten_duration -= 1
  147.         self.color.alpha = 128 - (16 - @_whiten_duration) * 10
  148.       end
  149.       if @_appear_duration > 0
  150.         @_appear_duration -= 1
  151.         self.opacity = (16 - @_appear_duration) * 16
  152.       end
  153.       if @_escape_duration > 0
  154.         @_escape_duration -= 1
  155.         self.opacity = 256 - (32 - @_escape_duration) * 10
  156.       end
  157.       if @_collapse_duration > 0
  158.         @_collapse_duration -= 1
  159.         self.opacity = 256 - (48 - @_collapse_duration) * 6
  160.       end
  161.       #=======================================
  162.       # 修改:更新算法,更新弹出
  163.       #=======================================
  164.       if @_damage_duration > 0
  165.         @_damage_duration -= 1
  166.         for damage in @_damage
  167.           damage[0].x = self.x + self.viewport.rect.x -
  168.                         self.ox + self.src_rect.width / 2 +
  169.                         (40 - damage[1]) * damage[3] / 10
  170.           damage[0].y -= damage[4]+damage[1]/10
  171.           damage[0].opacity = damage[1]*20
  172.           damage[1] -= 1
  173.           if damage[1]==0
  174.             damage[0].bitmap.dispose
  175.             damage[0].dispose
  176.             @_damage.delete(damage)
  177.             next
  178.           end
  179.         end
  180.       end
  181.       if @_animation != nil and (Graphics.frame_count % 2 == 0)
  182.         @_animation_duration -= 1
  183.         update_animation
  184.       end
  185.       if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
  186.         update_loop_animation
  187.         @_loop_animation_index += 1
  188.         @_loop_animation_index %= @_loop_animation.frame_max
  189.       end
  190.       if @_blink
  191.         @_blink_count = (@_blink_count + 1) % 32
  192.         if @_blink_count < 16
  193.           alpha = (16 - @_blink_count) * 6
  194.         else
  195.           alpha = (@_blink_count - 16) * 6
  196.         end
  197.         self.color.set(255, 255, 255, alpha)
  198.       end
  199.       @@_animations.clear
  200.     end
  201.     def update_animation
  202.       if @_animation_duration > 0
  203.         frame_index = @_animation.frame_max - @_animation_duration
  204.         cell_data = @_animation.frames[frame_index].cell_data
  205.         position = @_animation.position
  206.         animation_set_sprites(@_animation_sprites, cell_data, position)
  207.         #=======================================
  208.         # 修改:弹出伤害,权重计算
  209.         #=======================================
  210.         for timing in @_animation.timings
  211.           if timing.frame == frame_index
  212.             $t = 1.0 * animation_process_timing(timing, @_animation_hit)            
  213.             #p t,"当前权重", @all_quanzhong,"总权重"
  214.             if @character.damage.is_a?(Numeric) and t != 0
  215.               $t *= @character.damage
  216.               $t /= @all_quanzhong
  217.               #p t,"当前伤害",@character.damage,"总伤害"
  218.               $t = $t.to_i
  219.               #p t,@character.damage,@all_quanzhong
  220.               damage($t,@character.critical)
  221.             elsif [email protected]_a?(Numeric)
  222.               damage(@character.damage,@character.critical)
  223.             end
  224.           end
  225.         end
  226.       else
  227.         dispose_animation
  228.       end
  229.     end
  230.     #=======================================
  231.     # 修改:敌人跳跃的功能 + 添加返回数值
  232.     #=======================================
  233.      def animation_process_timing(timing, hit)
  234.        if (timing.condition == 0) or
  235.           (timing.condition == 1 and hit == true) or
  236.           (timing.condition == 2 and hit == false)
  237.          if timing.se.name != ""
  238.            se = timing.se
  239.            Audio.se_play("Audio/SE/" + se.name, se.volume, se.pitch)
  240.          end
  241.          case timing.flash_scope
  242.          when 1
  243.            self.flash(timing.flash_color, timing.flash_duration * 2)
  244.            @flash_shake_switch = true
  245.            @flash_shake = 10
  246.            return timing.flash_color.alpha * timing.flash_duration
  247.          when 2
  248.            if self.viewport != nil
  249.              self.viewport.flash(timing.flash_color, timing.flash_duration * 2)
  250.              return timing.flash_color.alpha * timing.flash_duration
  251.            end
  252.          when 3
  253.            self.flash(nil, timing.flash_duration * 2)
  254.            return timing.flash_color.alpha * timing.flash_duration
  255.          end
  256.        end      
  257.        return 0
  258.      end   
  259.   end
  260. end
  261. #==============================================================================
  262. # ■ Sprite_Battler
  263. #==============================================================================
  264. class Sprite_Battler < RPG::Sprite
  265. #--------------------------------------------------------------------------
  266. # ● 初始化对像
  267. #    添加跳跃记录
  268. #--------------------------------------------------------------------------
  269. def initialize(viewport, battler = nil)
  270.    super(viewport)
  271.    @battler = battler
  272.    @character.visible = false
  273.    @flash_shake_switch = true
  274. end
  275. #--------------------------------------------------------------------------
  276. # ● 刷新画面
  277. #    增添跳跃功能
  278. #--------------------------------------------------------------------------
  279. def update
  280.    super
  281.    # 战斗者为 nil 的情况下
  282.    if @battler == nil
  283.      self.bitmap = nil
  284.      loop_animation(nil)
  285.      return
  286.    end
  287.    # 文件名和色相与当前情况有差异的情况下
  288.    if @battler.battler_name != @character.name or
  289.       @battler.battler_hue != @character.hue
  290.      # 获取、设置位图
  291.      @character.name = @battler.battler_name
  292.      @character.hue = @battler.battler_hue
  293.      self.bitmap = RPG::Cache.battler(@character.name, @character.hue)
  294.      @width = bitmap.width
  295.      @height = bitmap.height
  296.      self.ox = @width / 2
  297.      self.oy = @height
  298.      # 如果是战斗不能或者是隐藏状态就把透明度设置成 0
  299.      if @battler.dead? or @battler.hidden
  300.        self.opacity = 0
  301.      end
  302.    end
  303.    # 动画 ID 与当前的情况有差异的情况下
  304.    if @battler.damage == nil and
  305.       @battler.state_animation_id != @state_animation_id
  306.      @state_animation_id = @battler.state_animation_id
  307.      loop_animation($data_animations[@state_animation_id])
  308.    end
  309.    # 应该被显示的角色的情况下
  310.    if @battler.is_a?(Game_Actor) and @character.visible
  311.      # 不是主状态的时候稍稍降低点透明度
  312.      if $game_temp.battle_main_phase
  313.        self.opacity += 3 if self.opacity < 255
  314.      else
  315.        self.opacity -= 3 if self.opacity > 207
  316.      end
  317.    end
  318.    # 明灭
  319.    if @battler.blink
  320.      blink_on
  321.    else
  322.      blink_off
  323.    end
  324.    # 不可见的情况下
  325.    unless @character.visible
  326.      # 出现
  327.      if not @battler.hidden and not @battler.dead? and
  328.         (@battler.damage == nil or @battler.damage_pop)
  329.        appear
  330.        @character.visible = true
  331.      end
  332.    end
  333.    # 可见的情况下
  334.    if @character.visible
  335.      # 逃跑
  336.      if @battler.hidden
  337.        $game_system.se_play($data_system.escape_se)
  338.        escape
  339.        @character.visible = false
  340.      end
  341.      # 白色闪烁
  342.      if @battler.white_flash
  343.        whiten
  344.        @battler.white_flash = false
  345.      end
  346.      # 动画
  347.      if @battler.animation_id != 0
  348.        animation = $data_animations[@battler.animation_id]
  349.        animation(animation, @battler.animation_hit,@battler.damage, @battler.critical)
  350.        @battler.animation_id = 0
  351.      end
  352.      # 伤害
  353.      if @battler.damage_pop
  354.        @battler.damage = nil
  355.        @battler.critical = false
  356.        @battler.damage_pop = false
  357.      end
  358.      # korapusu
  359.      if @battler.damage == nil and @battler.dead?
  360.        if @battler.is_a?(Game_Enemy)
  361.          $game_system.se_play($data_system.enemy_collapse_se)
  362.        else
  363.          $game_system.se_play($data_system.actor_collapse_se)
  364.        end
  365.        collapse
  366.        @character.visible = false
  367.      end
  368.    end
  369.    # 设置活动块的坐标
  370.    if @flash_shake_switch == true
  371.      self.x = @battler.screen_x
  372.      self.y = @battler.screen_y
  373.      self.z = @battler.screen_z
  374.      @flash_shake_switch = false
  375.    end
  376.    if @flash_shake != 0 and @battler.damage != nil
  377.      case @flash_shake
  378.      when 9..10
  379.        self.x = @battler.screen_x
  380.        self.y -=4
  381.        self.z = @battler.screen_z
  382.      when 6..8
  383.        self.x = @battler.screen_x
  384.        self.y -=2
  385.        self.z = @battler.screen_z
  386.      when 3..5
  387.        self.x = @battler.screen_x
  388.        self.y +=2
  389.        self.z = @battler.screen_z
  390.      when 2
  391.        self.x = @battler.screen_x
  392.        self.y += 4
  393.        self.z = @battler.screen_z
  394.      when 1
  395.        self.x = @battler.screen_x
  396.        self.y = @battler.screen_y
  397.        self.z = @battler.screen_z
  398.      end
  399.      @flash_shake -= 1
  400.    end
  401. end
  402. end

  403. class Sprite_Character < RPG::Sprite
  404.   alias damage_pop_update update
  405.   def update
  406.     damage_pop_update
  407.     if @character.damage_pop and $t != 0
  408.       damage_disp
  409.     end
  410.     if @da != $t and $t != 0
  411.       @da = $t.to_i
  412.       damage_disp
  413.     end
  414.   end
  415.   def damage_disp
  416.     @da = $t.to_i
  417.     damage(da, @character.critical)
  418.     $t = 0
  419.     @character.critical = false
  420.     @character.damage_pop = false
  421.   end
  422. end
  423. class Game_Character
  424.   attr_accessor :damage_pop
  425.   attr_accessor :damage
  426.   attr_accessor :critical
  427.   alias damage_pop_initialize initialize
  428.   def initialize
  429.     @damage_pop = false
  430.     @damage = 0
  431.     @critical = false
  432.     damage_pop_initialize
  433.   end
  434. end
复制代码

差不多了吧...闪人。88。
好吧这是II让我贴的- -

Lv1.梦旅人

梦石
0
星屑
49
在线时间
83 小时
注册时间
2008-4-19
帖子
420
2
 楼主| 发表于 2008-4-19 22:35:06 | 只看该作者
另外感谢一下Iselia雪同学...批了狂人一顿...使他猛下苦工夫学习...今天上午他一直在写作业...都是我给他挂着来着...(希望他数学不要再打75了!)
好吧这是II让我贴的- -
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3299
在线时间
3619 小时
注册时间
2006-9-6
帖子
37400

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

3
发表于 2008-4-19 23:17:35 | 只看该作者
介绍也没有……

什么东西啊……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
1 小时
注册时间
2006-10-2
帖子
693
4
发表于 2008-4-20 01:27:12 | 只看该作者
给个范例吧……这样什么人都不清楚……= =
在6R混,你必须学会无视,不然吃亏的是你自己..
回复 支持 反对

使用道具 举报

Lv1.梦旅人

B

梦石
0
星屑
50
在线时间
26 小时
注册时间
2007-8-26
帖子
3693
5
发表于 2008-4-20 20:56:17 | 只看该作者
BUG
回复 支持 反对

使用道具 举报

Lv5.捕梦者

御灵的宠物

梦石
12
星屑
8438
在线时间
88 小时
注册时间
2006-12-11
帖子
3148

第2届TG大赛亚军

6
发表于 2008-4-22 02:45:57 | 只看该作者
脚本419行发现NameError
其实我一直觉得这个脚本背后要一个完善系统……orz
我的Lofter:http://nightoye.lofter.com/

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-8-23
帖子
539
7
发表于 2008-4-26 02:51:41 | 只看该作者
匹夫世界啊..(发牢骚中,别管)
其实想出这个点子的就有我一个人而已..
横版卷轴ARPG制作中... 系统80% 素材95% 剧情1%.... 有脚本问题随时吼我- -(被T出)
回复 支持 反对

使用道具 举报

Lv5.捕梦者

御灵的宠物

梦石
12
星屑
8438
在线时间
88 小时
注册时间
2006-12-11
帖子
3148

第2届TG大赛亚军

8
发表于 2008-4-26 02:53:01 | 只看该作者
其实LZ是LS的MJ吧。
这年头都流行披着MJ自言自语么?
我的Lofter:http://nightoye.lofter.com/

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-8-23
帖子
539
9
发表于 2008-4-26 05:21:02 | 只看该作者
是好主义..但是其实是错误的......这个点子就是我想出来的..盗窃LZ的号发出来..(不要怪我.他竟然密码用跟我一样)我打错了名字以后..
横版卷轴ARPG制作中... 系统80% 素材95% 剧情1%.... 有脚本问题随时吼我- -(被T出)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-8-23
帖子
539
10
发表于 2008-4-26 05:22:39 | 只看该作者
难道没有看到我两个的IP那么近么?
横版卷轴ARPG制作中... 系统80% 素材95% 剧情1%.... 有脚本问题随时吼我- -(被T出)
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 17:27

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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