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

Project1

 找回密码
 注册会员
搜索
123
返回列表 发新帖
楼主: 零教授
打印 上一主题 下一主题

[胡扯] 因为总被吐槽回合制落伍所以一嘚劲把回合制做成这样

[复制链接]

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

21
发表于 2018-2-25 21:44:07 | 只看该作者
本帖最后由 guoxiaomi 于 2018-2-25 21:49 编辑

仅供参考,不一定正确。你可以搜索 change 看看

如果你的 status_window.refresh 方法中,调用了 draw_text 方法,那应该是主要被这个东西限制了效率。如果可能的话,使用图片来绘制数字。

RUBY 代码复制
  1. e0 = $game_troop.enemies[0]
  2. 5.times do
  3.   Sprite_Siyecao.new(e0, 12)
  4. end
  5.  
  6. class Sprite_Siyecao < Sprite
  7.   # character :发射者
  8.   # times     :发射子弹数
  9.   def initialize(character,times)
  10.     @viewport = $scene.spriteset.viewport3 #视野为战斗场面viewport3
  11.     super(@viewport)
  12.     @character = character
  13.     @ch = @character
  14.     @times = times
  15.     self.visible = true
  16.     reset
  17.   end
  18.   #--------------------------------------------------------------------------
  19.   # 设置炮弹
  20.   #--------------------------------------------------------------------------
  21.   def reset
  22.     return if $bullet.size >= 4096
  23.     for i in 0...@times
  24.     #检查指针上界
  25.       break if $bullet.size >= 4096 #子弹总数限制4096
  26.       angle = Math::PI / @times * i * 2 #角度为子弹数平分
  27.       sprite = Sprite_Small1.new(@viewport,@ch,angle) #建立小玉
  28.       s1 = Sprite_Heart1.new(@viewport, @ch, 0, sprite) #建立心弹
  29.       s2 = Sprite_Heart1.new(@viewport, @ch, 1, sprite)
  30.       s3 = Sprite_Heart1.new(@viewport, @ch, 2, sprite)
  31.       s4 = Sprite_Heart1.new(@viewport, @ch, 3, sprite)
  32.       $bullet.push(s1)
  33.       s1.z = 100 + $bullet.size
  34.       $bullet.push(s2)
  35.       s2.z = 100 + $bullet.size
  36.       $bullet.push(s3)
  37.       s3.z = 100 + $bullet.size
  38.       $bullet.push(s4)
  39.       s4.z = 100 + $bullet.size
  40.       $bullet.push(sprite)
  41.       sprite.z = 100 + $bullet.size
  42.     end
  43.     Audio.thndj_se_play("Audio/SE/bullet_2",80,100)
  44.     dispose
  45.   end
  46.   #--------------------------------------------------------------------------
  47.   # ● 释放
  48.   #--------------------------------------------------------------------------
  49.   def dispose
  50.     if self.bitmap != nil
  51.       self.bitmap.dispose
  52.       self.visible = false
  53.     end
  54.     super
  55.   end
  56.   #--------------------------------------------------------------------------
  57.   # ● 更新画面
  58.   #--------------------------------------------------------------------------
  59.   def update
  60.     super
  61.     dispose
  62.   end
  63. end
  64.  
  65. #--------------------------------------------------------------------------
  66. # Small
  67. #--------------------------------------------------------------------------
  68. class Sprite_Small1 < Sprite
  69.   attr_accessor :available
  70.   attr_accessor :vx #x 速度
  71.   attr_accessor :vy #y 速度
  72.   attr_accessor :ax #x 加速度
  73.   attr_accessor :ay #y 加速度
  74.   attr_accessor :vx0 #x 初速度
  75.   attr_accessor :vy0 #y 初速度
  76.   attr_accessor :an #角度
  77.   attr_accessor :an0 #初速度角度
  78.   attr_accessor :omiga #角速度
  79.   attr_accessor :aomiga #角速度加速度
  80.   attr_accessor :rr #向心运动半径
  81.  
  82.   attr_accessor :lifespan # 存活时间
  83.   attr_accessor :lifetime # 已存活时间
  84.   #attr_accessor :event_list # change behaviors according to time
  85.   # [eventtime,new_vx,new_vy,new_ax,new_ay,sound_effect]
  86.   # e.g. eventlist.push([300,5,5,1,1,""])
  87.   attr_accessor :actor_or_enemy #敌我识别,0为我,1为敌
  88.   attr_accessor :row_flag #旋转标志
  89.   #--------------------------------------------------------------------------
  90.   # ● 初始化对像
  91.   #     viewport : 显示端口
  92.   #     character: 发射者
  93.   #     angle    : 弧度
  94.   #--------------------------------------------------------------------------
  95.  
  96.   def initialize(viewport,character,angle)
  97.     super(viewport)
  98.     @character = character
  99.     if @character.is_a?(Game_Actor)
  100.       @actor_or_enemy = 0
  101.     else
  102.       @actor_or_enemy = 1
  103.     end
  104.     self.blend_type = 0
  105.     @chox = @character.screen_x + 10
  106.     @choy = @character.screen_y - 100
  107.     @x = @chox #发射点X
  108.     @y = @choy #发射点Y
  109.     @an = angle #角度
  110.     @an0 = angle #初速度角度
  111.     @mathx = (Math.cos(@an))*18
  112.     @mathy = (Math.sin(@an))*18
  113.     reset
  114.     self.bitmap = RPG::Cache.picture("bullet/小玉-黄")
  115.     self.available = true
  116.     self.visible = true
  117.     update
  118.   end
  119.   #--------------------------------------------------------------------------
  120.   # ● 设置对像
  121.   #--------------------------------------------------------------------------
  122.   def reset
  123.     return if self.disposed?
  124.     self.ox = 8 #图片半径8
  125.     self.oy = 8
  126.     self.x = @x
  127.     self.y = @y
  128.     @vx0 = @mathx #初速x
  129.     @vy0 = @mathy #初速y
  130.     self.vx = @vx0 #速度x
  131.     self.vy = @vy0 #速度y
  132.     self.omiga = 0 #角速度 应该是 'omega'
  133.     self.aomiga = 0 #角速度加速度
  134.     @an = self.get_angle #角度
  135.     self.rr = 130 #旋转半径
  136.     self.ax = 0 #@rv**2/rr*(Math.cos(@an))
  137.     self.ay = 0 #@rv**2/rr*(Math.sin(@an))
  138.  
  139.     self.lifespan = 1024 #存活时间
  140.     self.lifetime = 0
  141.  
  142.     self.available = false
  143.     self.visible = false
  144.   end
  145.  
  146.   # def can_be_seen?(recal = true)
  147.   #   if self.x>-640 and self.x<$width+640 and self.y>-480 and self.y<$height+480
  148.   #     return true
  149.   #   else
  150.   #     return false
  151.   #   end
  152.   # end
  153.  
  154.   # change 1, use && instead and
  155.   def can_be_seen?(recal = true)
  156.     return self.x > -640 && self.x < $width + 640 && self.y > -480 && self.y < $height + 480
  157.   end
  158.  
  159.   # def get_angle #角度获取:以发射点为圆心,极坐标判定角度
  160.   #   sign = (self.x - @chox) > 0 ? 0 : Math::PI
  161.   #   return Math.atan((self.y - @choy) / ((self.x - @chox) == 0 ? 1 : (self.x - @chox))) + sign
  162.   # end
  163.  
  164.   # change 2 * 重要 *
  165.   # 如果是获取角度,这个函数才是正确的,返回值在 -PI ~ +PI 之间
  166.   def get_angle
  167.     dx = self.x - @chox
  168.     dy = self.y - @choy
  169.     return Math.atan2(dy, dx)
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ● 释放
  173.   #--------------------------------------------------------------------------
  174.   def dispose
  175.     if self.bitmap != nil
  176.       self.visible = false
  177.     end
  178.     super
  179.   end
  180.  
  181.   # change 3
  182.   def move
  183.     # return false if self.visible == false
  184.     return false if !self.visible # 3.1
  185.  
  186.     if self.available
  187.       if self.lifetime < self.lifespan
  188.  
  189.         case self.lifetime
  190.         when 1..26 #减速运动,每t速度衰减1.13
  191.           # if @vx0.abs > 0
  192.           if @vx0 != 0 # 3.2
  193.             if @vx.abs <= 1
  194.               @vx0 = 0
  195.               self.vx = 0
  196.             else
  197.               @vx0 /= 1.13
  198.               self.vx /= 1.13
  199.             end
  200.           end
  201.  
  202.           # if @vy0.abs > 0 # 3.3
  203.           if @vy0 != 0
  204.             if @vy.abs <= 1
  205.               @vy0 = 0
  206.               self.vy = 0
  207.             else
  208.               @vy0 /= 1.13
  209.               self.vy /= 1.13
  210.             end
  211.           end #速度为0时开始旋转
  212.  
  213.           if @vx0 == 0 and @vy0 == 0 and @row_flag != true
  214.             self.x = @chox + @rr * Math.cos(@an0) #X定点为初方向对应的圆周
  215.             self.y = @choy + @rr * Math.sin(@an0) #Y定点为初方向对应的圆周
  216.             @row_flag = true
  217.           end
  218.  
  219.         when 27 #旋转的角速度加速度为0.3
  220.           if @row_flag != true
  221.             self.x = @chox + @rr * Math.cos(@an0)
  222.             self.y = @choy + @rr * Math.sin(@an0)
  223.             @row_flag = true
  224.           end
  225.           self.aomiga = 0.3
  226.         when 28..37 #转动半径-1
  227.           @rr -= 1
  228.         when 38..48 #转动半径-3
  229.           @rr -= 3
  230.         when 49..50 #转动半径-2
  231.           @rr -= 2
  232.         when 51..60 #转动半径-1
  233.           @rr -= 1
  234.         when 70..79 #转动半径+1
  235.           @rr += 1
  236.         when 80..89 #转动半径+2
  237.           @rr += 2
  238.         when 90 #加速63t,角速度达到18.9
  239.           # self.aomiga = -1+0.01*rand(100) #角速度代入随机负值
  240.           self.aomiga = -1 + rand # 3.4
  241.           @randr = rand(11) #转动半径增加值代入随机值
  242.         when 91..102 #转动半径+4*0.1*随机值
  243.           @rr += 4 + 0.1 * @randr
  244.         when 103..113 #转动半径+随机值
  245.           @rr += @randr
  246.         when 114 #关闭转动,将当前的速度变为X速度和Y速度,置一初速度VX0,
  247.           @row_flag = false #将四叶草甩出去
  248.           # v = self.omiga * Math::PI/180 * ((self.y-@choy) * (self.y-@choy) + (self.x-@chox) * (self.x-@chox)) ** 0.5
  249.           # an = self.get_angle
  250.           # self.vx = v * Math.cos(an)
  251.           # self.vy = v * Math.sin(an)
  252.           # @vx0 = self.vx
  253.  
  254.           # 3.5
  255.           _x, _y = self.x - @chox, self.y - @choy
  256.           _r = Math.sqrt(_x * _x + _y * _y)
  257.           v = self.omiga * Math::PI / 180 * _r
  258.           self.vx = v * _x / _r
  259.           self.vy = v * _y / _r
  260.           @vx0 = self.vx
  261.           # -- 3.5 不知道这样算对不对,因为 get_angle 和普通的 arctan 还是有区别
  262.  
  263.         when 114..139 #减速运动,速度衰减1.11
  264.           if @vx0.abs > 1
  265.             @vx0 /= 1.11
  266.             self.vx /= 1.11
  267.             self.vy /= 1.11
  268.             if @vx0.abs <= 1
  269.               @vx0 = 0
  270.               self.vx = 0
  271.               self.vy = 0
  272.             end
  273.           end
  274.         when 140 #速度归零
  275.           self.vx = 0
  276.           self.vy = 0
  277.         when 240 #小玉代入随机加速度,匀加速离开场景
  278.           # an = rand(360) * Math::PI/180
  279.           # v = rand(5)
  280.           # self.ax = (0.1 + 0.05 * v) * Math.cos(an)
  281.           # self.ay = (0.1 + 0.05 * v) * Math.sin(an)
  282.           # 3.6
  283.           self.ax = (0.2 + rand * 0.4) * (rand(2) - 0.5)
  284.           self.ay = (0.2 + rand * 0.4) * (rand(2) - 0.5)
  285.           # -- 3.6 这里不一定必须使速度均匀分布在一个环面内
  286.         end
  287.  
  288.         if @row_flag #转动模式,x和y直接由角速度和转动半径决定
  289.           @an = self.get_angle
  290.           @an += self.omiga * Math::PI / 180
  291.           self.omiga += self.aomiga
  292.           self.x = @chox + @rr * Math.cos(@an)
  293.           self.y = @choy + @rr * Math.sin(@an)
  294.         else #加速模式,x和y由正常的加速减速运动
  295.           self.x += self.vx
  296.           self.y += self.vy
  297.           self.vx += self.ax
  298.           self.vy += self.ay
  299.         end
  300.  
  301.         if self.can_be_seen?(false)
  302.           self.visible = true unless self.visible
  303.         else
  304.           self.visible = false if self.visible
  305.         end
  306.         self.lifetime += 1
  307.       else
  308.         self.visible = false if self.visible
  309.         self.available = false if self.available
  310.       end
  311.     else
  312.       # if self.visible
  313.       #   self.visible = false
  314.       # end
  315.       self.visible &&= false # 3.7 上面也可以这样改,未必能提升效率但是很酷
  316.     end
  317.     check
  318.   end
  319.  
  320.   #--------------------------------------------------------------------------
  321.   # ● 更新画面
  322.   #--------------------------------------------------------------------------
  323.   def update
  324.     super
  325.     #p self.visible
  326.     return if self.visible == false
  327.     if move == false
  328.       return "delete"
  329.     end
  330.   end
  331.  
  332.   # change 4
  333.   def check
  334.     return unless $scene.is_a?(Scene_Battle)
  335.     dx = self.x#+self.bitmap.width*0.5*0.75
  336.     dy = self.y#+self.bitmap.height*0.5*0.75
  337.     ra = 64 #子弹判定半径7,判定点半径1,合计8
  338.     # 4.1
  339.     ra_sq = 8 * 1.42
  340.     # -- 4.1
  341.     if self.actor_or_enemy == 1 #敌军
  342.       for i in 0...$game_party.actors.size
  343.         actor = $game_party.actors[i]
  344.         sprite = $scene.spriteset.actor_sprites[$game_party.actors.size-1-i]
  345.         tx = actor.screen_x - sprite.cw*0.05 #根据位图大小取判定点位置X
  346.         ty = actor.screen_y - sprite.ch*0.445 #根据位图大小取判定点位置Y
  347.         # if (dx-tx)*(dx-tx) + (dy-ty)*(dy-ty) <= ra #圆函数判定
  348.         # 4.2
  349.         _x, _y = (dx - tx).abs, (dy - ty).abs
  350.         if _x + _y < ra_sq && (_x*_x + _y*_y) <= ra
  351.         # -- 4.2 先做一个粗略的判断
  352.           value = 1 + rand(5)
  353.           value /= 2 if actor.guarding?
  354.           actor.hp -= value
  355.           actor.damage["event"] = value
  356.           actor.damage_pop["event"] = true
  357.           actor.animation.push([807+rand(3),true]) #击中动画
  358.           # 4.3 *重要*
  359.           # $scene.status_window.refresh
  360.           $battle_status_need_refresh = true
  361.           # --4.3 阻止多次刷新窗口,请在 Scene_Battle 的 update 方法中判断 $battle_status_need_refresh 再刷新窗口
  362.           # 因为通常在 status_window.refresh 中调用了 draw_text 方法,这是耗时极高的方法
  363.           # see change 5
  364.           self.visible = false
  365.         end
  366.  
  367.         if $game_party.all_dead?
  368.             # 切换到游戏结束画面
  369.             $scene = Scene_Gameover.new
  370.             return
  371.         end
  372.       end#for
  373.     else #我军弹幕
  374.       for i in 0...$game_troop.enemies.size
  375.         actor = $game_troop.enemies[i]
  376.         sprite = $scene.spriteset.enemy_sprites[$game_troop.enemies.size-1-i]
  377.         tx = actor.screen_x+sprite.cw*0.1 #根据位图大小取判定点位置X
  378.         ty = actor.screen_y-sprite.ch*0.445 #根据位图大小取判定点位置Y
  379.         # see change 4.2 and 4.3
  380.         if (dx-tx)*(dx-tx) + (dy-ty)*(dy-ty) <= ra #圆函数判定
  381.           value = 1 + rand(5)
  382.           value /= 2 if actor.guarding?
  383.           actor.hp -= value
  384.           actor.damage["event"] = value
  385.           actor.damage_pop["event"] = true
  386.           actor.animation.push([807+rand(3),true]) #击中动画
  387.           $scene.status_window.refresh
  388.           self.visible = false
  389.         end
  390.       end #for
  391.     end #if
  392.   end #def
  393. end
  394.  
  395. # change 5
  396. class Scene_Battle
  397.   alias _balabala_update update
  398.   def update
  399.     if $battle_status_need_refresh
  400.       @status_window.refresh
  401.     end
  402.     _balabala_update
  403.   end
  404. end
  405.  
  406. #--------------------------------------------------------------------------
  407. # Heart
  408. #--------------------------------------------------------------------------
  409. class Sprite_Heart1 < Sprite
  410.   attr_accessor :available
  411.   attr_accessor :vx #x 速度
  412.   attr_accessor :vy #y 速度
  413.   attr_accessor :ax #x 加速度
  414.   attr_accessor :ay #y 加速度
  415.   attr_accessor :an0 #最初的角度
  416.   attr_accessor :lifespan # 存活时间
  417.   attr_accessor :lifetime # 已存活时间
  418.   #attr_accessor :event_list # change behaviors according to time
  419.   # [eventtime,new_vx,new_vy,new_ax,new_ay,sound_effect]
  420.   # e.g. eventlist.push([300,5,5,1,1,""])
  421.   attr_accessor :actor_or_enemy #敌我识别,0为我,1为敌
  422.   attr_accessor :relese_flag #释放标志
  423.  
  424.   #--------------------------------------------------------------------------
  425.   # ● 初始化对像
  426.   #     viewport : 显示端口
  427.   #     angle    : 弧度 0=0 1=90 2=180 3=270
  428.   #--------------------------------------------------------------------------
  429.  
  430.   def initialize(viewport,character,angle,target)
  431.     super(viewport)
  432.     @character = character
  433.     if @character.is_a?(Game_Actor)
  434.       @actor_or_enemy = 0
  435.     else
  436.       @actor_or_enemy = 1
  437.     end
  438.     self.blend_type = 0
  439.     self.lifetime = 0
  440.     @target = target
  441.     @chox = @target.x
  442.     @choy = @target.y
  443.     @an = angle * Math::PI/2
  444.     @an0 = angle * 90
  445.  
  446.     @x = @chox + 16*Math.cos(@an)
  447.     @y = @choy + 16*Math.sin(@an)
  448.  
  449.     reset
  450.  
  451.     self.bitmap = RPG::Cache.picture("bullet/心弹-绿")
  452.     self.available = true
  453.     self.visible = true
  454.     @release_flag = false
  455.  
  456.     update
  457.   end
  458.   #--------------------------------------------------------------------------
  459.   # ● 设置对像
  460.   #--------------------------------------------------------------------------
  461.   def reset
  462.     return if self.disposed?
  463.     self.ox = 16 #子弹半径16
  464.     self.oy = 16
  465.     self.x = @x
  466.     self.y = @y
  467.     self.vx = 0 #速度X
  468.     self.vy = 0 #速度Y
  469.     @an = self.get_angle #角度
  470.     self.ax = 0#@rv**2/rr*(Math.cos(@an))
  471.     self.ay = 0#@rv**2/rr*(Math.sin(@an))
  472.  
  473.     self.lifespan = 1024
  474.     self.lifetime = 0
  475.  
  476.     self.available = false
  477.     self.visible = false
  478.   end
  479.  
  480.   def can_be_seen?(recal = true)
  481.     if self.x >-640 and self.x< $width + 640 and self.y > -480 and self.y < $height + 480
  482.       return true
  483.     else
  484.       return false
  485.     end
  486.   end  # see change 1
  487.  
  488.   def get_angle #角度获取:以小玉为圆心,初位置+转动相位作为角度
  489.     @chox = @target.x #小玉X
  490.     @choy = @target.y #小玉Y
  491.     an = (self.lifetime % 360 * 8 + @an0) * Math::PI / 180 #每t转动8度
  492.     #心弹自身的角度为相位负值+90度+初相位方向修正
  493.     self.angle = -self.lifetime % 360 * 8 + 90 + (@an0 % 180 == 0 ? @an0 : @an0 + 180)
  494.     return an
  495.   end  # see change 2
  496.   #--------------------------------------------------------------------------
  497.   # ● 释放
  498.   #--------------------------------------------------------------------------
  499.   def dispose
  500.     if self.bitmap != nil
  501.       self.visible = false
  502.     end
  503.     super
  504.   end
  505.  
  506.   # change 6
  507.   def move
  508.     return false if self.visible == false
  509.     ########################
  510.     if self.available
  511.       if self.lifetime < self.lifespan
  512.         if self.lifetime == 140 #第140t时释放
  513.           get_angle #获取角度,置对应角度加速度
  514.           ang = (self.angle+(@an0%180 == 0 ? 180 : 0))*Math::PI/180
  515.           self.vx = 0
  516.           self.vy = 0
  517.           self.ax = Math.cos(ang)*0.2
  518.           self.ay = Math.sin(ang)*0.2
  519.           @release_flag = true
  520.         end
  521.  
  522.         if @release_flag == true #释放后
  523.           self.x += self.vx
  524.           self.y += self.vy
  525.           self.vx += self.ax
  526.           self.vy += self.ay
  527.  
  528.           # if (self.vx*self.vx+self.vy*self.vy)**0.5 >= 20 #速度大于20变为匀速
  529.           if self.vx.abs + self.vy.abs > 20 && (self.vx*self.vx+self.vy*self.vy) >= 400 # 6.1
  530.             self.ay = 0
  531.             self.ax = 0
  532.           end
  533.         else #释放前
  534.           @an = self.get_angle #获取角度
  535.           self.x = @chox + 16 * Math.cos(@an) #X定位为小玉圆周
  536.           self.y = @choy + 16 * Math.sin(@an) #Y定位为小玉圆周
  537.         end
  538.         if self.can_be_seen?(false)
  539.           self.visible = true unless self.visible
  540.         else
  541.           self.visible = false if self.visible
  542.         end
  543.         self.lifetime += 1
  544.       else
  545.         self.visible = false if self.visible
  546.         self.available = false if self.available
  547.       end
  548.     else
  549.       if self.visible
  550.         self.visible = false
  551.       end
  552.     end
  553.  
  554.     check
  555.   end
  556.  
  557.   #--------------------------------------------------------------------------
  558.   # ● 更新画面
  559.   #--------------------------------------------------------------------------
  560.   def update
  561.     super
  562.     #p self.visible
  563.     return if self.visible == false
  564.     if move == false
  565.       return "delete"
  566.     end
  567.   end
  568.  
  569.   # see change 4
  570.   def check
  571.     return unless $scene.is_a?(Scene_Battle)
  572.     dx = self.x#+self.bitmap.width*0.5*0.75
  573.     dy = self.y#+self.bitmap.height*0.5*0.75
  574.     ra = 256 #图形判定区15,判定点1,合计16
  575.     if self.actor_or_enemy == 1 #敌军
  576.       for i in 0...$game_party.actors.size
  577.         actor = $game_party.actors[i]
  578.         sprite = $scene.spriteset.actor_sprites[$game_party.actors.size-1-i]
  579.         tx = actor.screen_x-sprite.cw*0.05 #根据位图尺寸决定判定点
  580.         ty = actor.screen_y-sprite.ch*0.445
  581.         if (dx-tx)*(dx-tx) + (dy-ty)*(dy-ty) <= ra
  582.           value = 1 + rand(5)
  583.           value /= 2 if actor.guarding?
  584.           actor.hp -= value
  585.           actor.damage["event"] = value
  586.           actor.damage_pop["event"] = true
  587.           actor.animation.push([807+rand(3),true]) #命中动画
  588.           $scene.status_window.refresh
  589.           self.visible = false
  590.         end
  591.         if $game_party.all_dead?
  592.             # 切换到游戏结束画面
  593.             $scene = Scene_Gameover.new
  594.             return
  595.         end
  596.       end#for
  597.     else #我军弹幕
  598.       for i in 0...$game_troop.enemies.size
  599.         actor = $game_troop.enemies[i]
  600.         sprite = $scene.spriteset.enemy_sprites[$game_troop.enemies.size-1-i]
  601.         tx = actor.screen_x+sprite.cw*0.1 #根据位图尺寸决定判定点
  602.         ty = actor.screen_y-sprite.ch*0.445
  603.         if (dx-tx)*(dx-tx) + (dy-ty)*(dy-ty) <= ra
  604.           value = 1 + rand(5)
  605.           value /= 2 if actor.guarding?
  606.           actor.hp -= value
  607.           actor.damage["event"] = value
  608.           actor.damage_pop["event"] = true
  609.           actor.animation.push([807+rand(3),true]) #命中动画
  610.           $scene.status_window.refresh
  611.           self.visible = false
  612.         end
  613.       end #for
  614.     end #if
  615.   end #def
  616. end

点评

测试一下,直接把 @status_window 的refresh方法替换成空的方法,或者是注释掉draw_text的调用,如果帧率变化不大就无所谓了  发表于 2018-2-26 01:15
刷新状态栏只有在被击中的那一刻才会刷新,所以和效率其实关系不大,弹型速度的Update中如果只有单帧变动也就是一个瞬间的计算力吃紧也不算大头  发表于 2018-2-26 00:18
非常感谢指导;导致效率低大概就是这个判定区域的判断是吃效率的核心,其他的都是添头,不过其他的修改掉以后现在确实能稳定30FPS以上了  发表于 2018-2-26 00:16

评分

参与人数 1+1 收起 理由
零教授 + 1 塞糖

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 1 反对 0

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
83
在线时间
18 小时
注册时间
2018-2-21
帖子
13
22
发表于 2018-2-28 23:22:48 | 只看该作者
余音·魔眼 发表于 2018-2-24 10:46
说回合制落后的人都是因为他根本就不知道回合制是什么,回合制千万不能用默认的那种(因为那才是真正的落后 ...

这确实回合制被诟病的原因!
但是回合制不仅仅可以讲策略,还可以结合剧情道具事件起到增强游戏的可玩性!
比如说结合剧情可以选择剧情多线发展,创造多结局!
结合道具可以让敌人变强或变弱增加乐趣!
结合事件可以多收人,多捡道具,增加额外剧情都是可以的!
工作,游戏?都是坑爹的货啊!
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
367
在线时间
41 小时
注册时间
2011-12-16
帖子
8
23
发表于 2022-5-10 11:49:15 | 只看该作者
没看到脚本呀
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-3 20:52

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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