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

Project1

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

[已经解决] 指针的问题

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2180
在线时间
1011 小时
注册时间
2015-10-17
帖子
1285
跳转到指定楼层
1
发表于 2017-4-26 15:07:45 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 fjm 于 2017-4-26 20:16 编辑

怎样使指针下面出现角色的名字,还有就是使用物品之类的东西时,指针能指向己方角色,知道的告诉下,谢谢



RUBY 代码复制
  1. #==============================================================================
  2. # ■ Sprite_BattleArrow
  3. #==============================================================================
  4.  
  5. class Sprite_BattleArrow < Sprite
  6.   #--------------------------------------------------------------------------
  7.   # ● 定义实例变量
  8.   #--------------------------------------------------------------------------
  9.   attr_reader   :index
  10.   attr_accessor :select_all
  11.   attr_accessor :can_select_all
  12.   attr_accessor :members
  13.   attr_accessor :add_x
  14.   attr_accessor :on_ok_method
  15.   attr_accessor :on_cancel_method
  16.   #--------------------------------------------------------------------------
  17.   # ● 初始化对像
  18.   #--------------------------------------------------------------------------
  19.   def initialize(type, viewport, can_select_all = false)
  20.     super(viewport)
  21.     self.bitmap = Cache.system("BattleArrow")
  22.     @type = type
  23.     case @type
  24.     when :enemy
  25.       self.ox = 0
  26.       src_rect.set(32, 30-35, 32, 32+50)
  27.       @members = $game_troop.members
  28.       @add_x = 30-10
  29.     when :actor
  30.       self.ox = 32
  31.       src_rect.set(0, 20-35, 32, 32+50)
  32.       @members = $game_party.battle_members
  33.       @add_x = -30
  34.     else
  35.       self.ox = 16
  36.       src_rect.set(0, 0, 32, 32)
  37.       @members = []
  38.       @add_x = 0
  39.     end
  40.     self.oy = 32
  41.     self.z = 2500
  42.     self.visible = false
  43.     @index = 0
  44.     @old_index = @index
  45.     @select_all = false
  46.     @can_select_all = can_select_all
  47.     update
  48.   end
  49.   #--------------------------------------------------------------------------
  50.   # ● 设置
  51.   #--------------------------------------------------------------------------
  52.   def setup(can_select_all)
  53.     @can_select_all = can_select_all
  54.     @select_all = false
  55.     @index = @old_index
  56.     case @type
  57.     when :actor
  58.       @members = $game_party.battle_members
  59.     when :enemy
  60.       @members = $game_troop.members
  61.     else
  62.       @members = []
  63.     end
  64.     self.visible = true
  65.     update
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● 获取光标指向的战斗者
  69.   #--------------------------------------------------------------------------
  70.   def battler
  71.     return members[index]
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ● 设置光标位置
  75.   #--------------------------------------------------------------------------
  76.   def index=(index)
  77.     @index = index
  78.     update
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   # ● 刷新画面
  82.   #--------------------------------------------------------------------------
  83.   def update
  84.     super
  85.     return unless visible
  86.     if Input.trigger?(13)
  87.       Sound.play_ok
  88.       on_ok_method.call if on_ok_method
  89.       return
  90.     end
  91.     if Input.trigger?(12)
  92.       Sound.play_cancel
  93.       on_cancel_method.call if on_cancel_method
  94.       return
  95.     end
  96.     if Input.trigger?(4) or Input.trigger?(6)
  97.       if @select_all
  98.         @select_all = false
  99.         @index = @old_index
  100.       else
  101.         if @can_select_all
  102.           @select_all = true
  103.           @old_index = @index
  104.         end
  105.       end
  106.     end
  107.     case @type
  108.     when :actor
  109.       update_actor
  110.     when :enemy
  111.       update_enemy
  112.     end
  113.   end
  114.   #--------------------------------------------------------------------------
  115.   # ● 刷新选择角色
  116.   #--------------------------------------------------------------------------
  117.   def update_actor
  118.     if @select_all
  119.       @index += 1
  120.       @index %= members.size
  121.     else
  122.       old_index = @index
  123.       for i in 0..members.size
  124.         @index = i
  125.         if @index == members.size
  126.           @index = old_index
  127.           break
  128.         end
  129.         next unless battler
  130.         self_x = battler.fscreen_x + add_x
  131.         self_y = battler.fscreen_y
  132.       end
  133.       if Input.repeat?(2)
  134.         Sound.play_cursor
  135.         @index += 1
  136.         @index %= members.size
  137.       end
  138.       if Input.repeat?(8)
  139.         Sound.play_cursor
  140.         @index += members.size - 1
  141.         @index %= members.size
  142.       end
  143.     end
  144.     if battler
  145.       self.x = battler.fscreen_x + add_x
  146.       self.y = battler.fscreen_y
  147.     end
  148.   end
  149.   #--------------------------------------------------------------------------
  150.   # ● 刷新选择敌人
  151.   #--------------------------------------------------------------------------
  152.   def update_enemy
  153.     if @select_all
  154.       members.size.times do
  155.         @index += 1
  156.         @index %= members.size
  157.         break if not battler.hidden?
  158.       end
  159.     else
  160.       members.size.times do
  161.         break if not battler.hidden?
  162.         @index += 1
  163.         @index %= members.size
  164.       end
  165.       old_index = @index
  166.       for i in 0..members.size
  167.         @index = i
  168.         if @index == members.size
  169.           @index = old_index
  170.           break
  171.         end
  172.         next if battler.hidden?
  173.         self_x = battler.screen_x + add_x
  174.         self_y = battler.screen_y
  175.       end
  176.       if Input.repeat?(2)
  177.         Sound.play_cursor
  178.         members.size.times do
  179.           @index += 1
  180.           @index %= members.size
  181.           break if not battler.hidden?
  182.         end
  183.       end
  184.       if Input.repeat?(8)
  185.         Sound.play_cursor
  186.         members.size.times do
  187.           @index += members.size - 1
  188.           @index %= members.size
  189.           break if not battler.hidden?
  190.         end
  191.       end
  192.     end
  193.     if battler != nil
  194.       self.x = battler.screen_x + add_x
  195.       self.y = battler.screen_y
  196.     end
  197.   end
  198. end
  199. #==============================================================================
  200. # ■ Scene_Battle
  201. #==============================================================================
  202.  
  203. class Scene_Battle < Scene_Base
  204.   #--------------------------------------------------------------------------
  205.   # ● 结束处理
  206.   #--------------------------------------------------------------------------
  207.   alias hzhj_terminate_battle_arrow terminate
  208.   def terminate
  209.     @actor_arrow.dispose
  210.     @enemy_arrow.dispose
  211.     hzhj_terminate_battle_arrow
  212.   end
  213.   #--------------------------------------------------------------------------
  214.   # ● 刷新所有窗口
  215.   #--------------------------------------------------------------------------
  216.   alias hzhj_update_all_windows_battle_arrow update_all_windows
  217.   def update_all_windows
  218.     hzhj_update_all_windows_battle_arrow
  219.     @actor_arrow.update
  220.     @enemy_arrow.update
  221.   end
  222.   #--------------------------------------------------------------------------
  223.   # ● 生成角色窗口
  224.   #--------------------------------------------------------------------------
  225.   def create_actor_window
  226.     viewport = @viewport #@spriteset.viewport1
  227.     @actor_arrow = Sprite_BattleArrow.new(:actor, viewport, false)
  228.     @actor_arrow.on_ok_method = method(:on_actor_ok)
  229.     @actor_arrow.on_cancel_method = method(:on_actor_cancel)
  230.   end
  231.   #--------------------------------------------------------------------------
  232.   # ● 生成敌人窗口
  233.   #--------------------------------------------------------------------------
  234.   def create_enemy_window
  235.     viewport = @viewport #@spriteset.viewport1
  236.     @enemy_arrow = Sprite_BattleArrow.new(:enemy, viewport, false)
  237.     @enemy_arrow.on_ok_method = method(:on_enemy_ok)
  238.     @enemy_arrow.on_cancel_method = method(:on_enemy_cancel)
  239.   end
  240.   #--------------------------------------------------------------------------
  241.   # ● 开始选择队友
  242.   #--------------------------------------------------------------------------
  243.   def select_actor_selection(can_select_all = false)
  244.     @actor_arrow.setup(can_select_all)
  245.     @skill_window.hide
  246.     @item_window.hide
  247.   end
  248.   #--------------------------------------------------------------------------
  249.   # ● 角色“确定”
  250.   #--------------------------------------------------------------------------
  251.   def on_actor_ok
  252.     target_index = @actor_arrow.select_all ? 65535 : @actor_arrow.index
  253.     BattleManager.actor.input.target_index = target_index
  254.     @skill_window.hide
  255.     @item_window.hide
  256.     @actor_arrow.visible = false
  257.     next_command
  258.   end
  259.   #--------------------------------------------------------------------------
  260.   # ● 角色“取消”
  261.   #--------------------------------------------------------------------------
  262.   def on_actor_cancel
  263.     case @actor_command_window.current_symbol
  264.     when :skill
  265.       @skill_window.show.activate
  266.     when :item
  267.       @item_window.show.activate
  268.     end
  269.     @actor_arrow.visible = false
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ● 开始选择敌人
  273.   #--------------------------------------------------------------------------
  274.   def select_enemy_selection(can_select_all = false)
  275.     @enemy_arrow.setup(can_select_all)
  276. #    @actor_command_window.hide
  277.     @skill_window.hide
  278.     @item_window.hide
  279.   end
  280.   #--------------------------------------------------------------------------
  281.   # ● 敌人“确定”
  282.   #--------------------------------------------------------------------------
  283.   def on_enemy_ok
  284.     target_index = @enemy_arrow.select_all ? 65535 : @enemy_arrow.index
  285.     BattleManager.actor.input.target_index = target_index
  286.     @skill_window.hide
  287.     @item_window.hide
  288.     @enemy_arrow.visible = false
  289.     next_command
  290.   end
  291.   #--------------------------------------------------------------------------
  292.   # ● 敌人“取消”
  293.   #--------------------------------------------------------------------------
  294.   def on_enemy_cancel
  295.     case @actor_command_window.current_symbol
  296.     when :attack
  297.       @actor_command_window.show.activate
  298.     when :skill
  299.       @skill_window.show.activate
  300.     when :status
  301.       @actor_command_window.show.activate
  302.     when :item
  303.       @item_window.show.activate
  304.     end
  305.     @enemy_arrow.visible = false
  306.   end
  307. end
  308.  
  309. class Game_Actor < Game_Battler
  310.   attr_accessor :fscreen_x
  311.   attr_accessor :fscreen_y
  312.   def initialize(actor_id)
  313.     super()
  314.     setup(actor_id)
  315.     @last_skill = Game_BaseItem.new
  316.     @fscreen_x = 0
  317.     @fscreen_y = 0
  318.   end
  319. end
  320. class Game_Party < Game_Unit
  321.   def setup_battle_test_members
  322.     $data_system.test_battlers.each do |battler|
  323.       actor = $game_actors[battler.actor_id]
  324.       actor.change_level(battler.level, false)
  325.       actor.init_equips(battler.equips)
  326.       actor.recover_all
  327.       actor.fscreen_x = 100
  328.       actor.fscreen_y = 276+battler.actor_id*24
  329.       p battler.actor_id
  330.       add_actor(actor.id)
  331.     end
  332.   end
  333. end
  334.  
  335. class Sprite_BattleArrow < Sprite
  336.   def update_enemy
  337.     if @select_all
  338.       members.size.times do
  339.         @index += 1
  340.         @index %= members.size
  341.         break if not battler.hidden? || battler.dead?
  342.       end
  343.     else
  344.       members.size.times do
  345.         break if not battler.hidden? || battler.dead?
  346.         @index += 1
  347.         @index %= members.size
  348.       end
  349.       old_index = @index
  350.       for i in 0..members.size
  351.         @index = i
  352.         if @index == members.size
  353.           @index = old_index
  354.           break
  355.         end
  356.         next if battler.hidden? || battler.dead?
  357.         self_x = battler.screen_x + add_x
  358.         self_y = battler.screen_y
  359.       end
  360.       if Input.repeat?(2)
  361.         Sound.play_cursor
  362.         members.size.times do
  363.           @index += 1
  364.           @index %= members.size
  365.           break if not battler.hidden? || battler.dead?
  366.         end
  367.       end
  368.       if Input.repeat?(8)
  369.         Sound.play_cursor
  370.         members.size.times do
  371.           @index += members.size - 1
  372.           @index %= members.size
  373.           break if not battler.hidden? || battler.dead?
  374.         end
  375.       end
  376.     end
  377.     if battler != nil
  378.       self.x = battler.screen_x + add_x
  379.       self.y = battler.screen_y
  380.     end
  381.   end
  382. end

指针1.jpg (42.97 KB, 下载次数: 20)

指针1.jpg

指针2.jpg (42.88 KB, 下载次数: 20)

指针2.jpg

BattleArrow.png (3.91 KB, 下载次数: 22)

BattleArrow.png

点评

fjm
恩,已经改过两次了  发表于 2017-4-26 22:28
啧,这脚本估计改过N次了,看着眼晕。最好是原作者帮忙修改。  发表于 2017-4-26 20:45
fjm
图是用PS做的,实际指针下没名字,选择己方角色时指针也不在那  发表于 2017-4-26 20:15
你这不是有名字吗?!  发表于 2017-4-26 20:02

Lv4.逐梦者

梦石
0
星屑
6260
在线时间
1481 小时
注册时间
2015-7-25
帖子
652

开拓者

2
发表于 2017-4-26 23:39:21 | 只看该作者
大致写了个模板,目测需要优化(楼主可以自己试着改动什么的...),也可能有BUG,就当提供一个思路....
RUBY 代码复制
  1. class Window_AEName < Window_Base
  2.   def initialize(actor)
  3.     super(0,0,100,100)
  4.     self.opacity = 0
  5.     refresh(actor)
  6.   end
  7.   def refresh(actor)
  8.     contents.clear
  9.     draw_actor_name(actor, 0, 0)
  10.   end
  11. end
  12. class Sprite_BattleArrow < Sprite
  13.   def update_actor
  14.         if @select_all
  15.           @index += 1
  16.           @index %= members.size
  17.         else
  18.           old_index = @index
  19.           for i in 0..members.size
  20.             @index = i
  21.             if @index == members.size
  22.               @index = old_index
  23.               break
  24.             end
  25.             next unless battler
  26.             self_x = battler.fscreen_x + add_x
  27.             self_y = battler.fscreen_y
  28.           end
  29.           if Input.repeat?(2)
  30.             Sound.play_cursor
  31.             @index += 1
  32.             @index %= members.size
  33.           end
  34.           if Input.repeat?(8)
  35.             Sound.play_cursor
  36.             @index += members.size - 1
  37.             @index %= members.size
  38.           end
  39.         end
  40.         if battler
  41.           self.x = battler.fscreen_x + add_x
  42.           self.y = battler.fscreen_y
  43.           [url=home.php?mod=space&uid=133944]@w[/url] = Window_AEName.new(battler)
  44.           @w.show
  45.           @w.x = battler.fscreen_x + add_x
  46.           @w.y = battler.fscreen_y
  47.         end
  48.       end
  49.       def update_enemy
  50.         if @select_all
  51.           members.size.times do
  52.             @index += 1
  53.             @index %= members.size
  54.             break if not battler.hidden?
  55.           end
  56.         else
  57.           members.size.times do
  58.             break if not battler.hidden?
  59.             @index += 1
  60.             @index %= members.size
  61.           end
  62.           old_index = @index
  63.           for i in 0..members.size
  64.             @index = i
  65.             if @index == members.size
  66.               @index = old_index
  67.               break
  68.             end
  69.             next if battler.hidden?
  70.             self_x = battler.screen_x + add_x
  71.             self_y = battler.screen_y
  72.           end
  73.           if Input.repeat?(2)
  74.             Sound.play_cursor
  75.             members.size.times do
  76.               @index += 1
  77.               @index %= members.size
  78.               break if not battler.hidden?
  79.             end
  80.           end
  81.           if Input.repeat?(8)
  82.             Sound.play_cursor
  83.             members.size.times do
  84.               @index += members.size - 1
  85.               @index %= members.size
  86.               break if not battler.hidden?
  87.             end
  88.           end
  89.         end
  90.         if battler != nil
  91.           self.x = battler.screen_x + add_x
  92.           self.y = battler.screen_y
  93.           @w = Window_AEName.new(battler)
  94.           @w.show
  95.           @w.x = battler.screen_x + add_x
  96.           @w.y = battler.screen_y
  97.         end
  98.       end
  99. end

点评

fjm
感谢,效果出来了  发表于 2017-4-27 10:40
43行是论坛bug,把url什么的去掉就行了,改成@w = Window_AEName.new(battler)  发表于 2017-4-27 10:01
fjm
多谢,试了下43行报错  发表于 2017-4-27 08:29

评分

参与人数 2星屑 +30 梦石 +1 收起 理由
RaidenInfinity + 1 认可答案
fjm + 30 认可答案

查看全部评分

笨肉包的首款像素OC游戏《花城梦之心》尝试制作中~
目前的坑 【不可思议的迷宫】幽灵契约外传:歌莉娅
持续更新中~ 当前进度 v0.28
大版本更新时才会更新网盘文件,预计下次大版本更新:v0.30
完成度:
主线 15% 支线 0% 数据库 6% 系统 86% 美术 6%
两边同时填坑~
( 这里是笨肉包~专修魔法!目标是大魔法师!
( 坑太大啦,一个人填不完啦hhh 一定会填完的嗯...
( 每天都和bug们比试魔力~吾之魔法将扫平一切!
( 弱点是美术,魔法修行之余再补补课吧~
( 哼哼哼~这便是魔法的力量!
大家都离开啦,笨肉包也不知道还能坚持多久呀...
这是属于笨肉包一个人的旅行(再见了...蚊子湯,七重酱,笨肉包永远想你们!TwT
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 12:32

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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