Project1

标题: $game_party.actors的问题 [打印本页]

作者: 玄月    时间: 2009-1-25 02:00
标题: $game_party.actors的问题
为什么如果$game_party.actors[x].id,x角色不在队伍的时候$game_party.actors[x].id就会等于4?
还是不知道我问什么的话可以在数据库中删掉后两个角色后在地图上新建一个事件然后执行脚本
p $game_party.actors[0].id
p $game_party.actors[1].id
p $game_party.actors[2].id
p $game_party.actors[3].id
p $game_party.actors[4].id
p $game_party.actors[5].id
就会发现问题
作者: 死圣    时间: 2009-1-25 02:27
当我发完之后我才发现
我在错误的地点,错误的认为你错误的在水区问错误的问题
所以我错误的点下提交后错误的意识到自己错了就立刻修改了
作者: 玄月    时间: 2009-1-25 02:32
回帖混分么…………
作者: 亿万星辰    时间: 2009-1-25 02:55
我想请问一下你的X等于几呢?

顺便再问一下,你知道$game_party.actors这个里面存储的是什么么?
作者: 缺牙de兔子    时间: 2009-1-25 03:04
那是什么脚本啊--
已知
$game_party.actors[0].id是同伴中的第一位角色的ID

$game_party.actors[x].id是同伴中第几位角色的ID
x是哪里来的
之前有没有被赋值 如果没有就=0
作者: 玄月    时间: 2009-1-25 03:22
X是随便大于$game_party.actors.size的数。
作者: 亿万星辰    时间: 2009-1-25 03:44
那你知道你取大于队伍人数的X,取到的$game_party.actors[x]是什么吧?

顺便再提醒你一下,id这个方法在Game_Actor中是有过定义,但不代表它这个方法在其他地方没有定义过。

id这个方法本身是可以查看各个对象对应的一个唯一的整数的方法,与Object类里的object_id方法不知道是否一致,我目前是把它们两个看成一样的。

感觉你还是需要多多深究一下问题,你只是通过.id这个方法显示出个4来就觉得出现了问题,却没有考虑$game_party.actors[x]当中,x大于队伍总人数时,$game_party.actors[x]必然是个nil,换言之,你如果考虑到这步,你单纯的执行一下 p nil.id 就会得到一个4来,你也就会明白id这个方法原来除了Game_Actor中是有过明确的定义外,本来人家就是个固有的方法了。
作者: 玄月    时间: 2009-1-25 03:55
我知道他为什么会这样。。。
不过我的参战脚本和$game_party.actors[id]是黏在一起的,所以就会出错。。
无端端多出一个人来。。
作者: 亿万星辰    时间: 2009-1-25 03:57
出错的话,说明你的代码还是有问题,判断的时候判断$game_party.actors[X]是否为nil即可,干嘛要去判断id [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: 玄月    时间: 2009-1-25 04:00
因为战斗前要把不参战的T出队伍显示战斗结果的时候要把他们加回来。。。
还是用这笨方法吧,分别定义。。。
  1.   if $game_party.actors.size == 0
  2.     $party = $game_party.actors[0].id
  3.   elsif $game_party.actors.size == 1
  4.     $party = $game_party.actors[0].id
  5.     $party1 = $game_party.actors[1].id
  6.   elsif $game_party.actors.size == 2
  7.     $party = $game_party.actors[0].id
  8.     $party1 = $game_party.actors[1].id
  9.     $party2 = $game_party.actors[2].id
  10.   elsif $game_party.actors.size == 3
  11.     $party = $game_party.actors[0].id
  12.     $party1 = $game_party.actors[1].id
  13.     $party2 = $game_party.actors[2].id
  14.     $party3 = $game_party.actors[3].id
  15.   elsif $game_party.actors.size == 4
  16.     $party = $game_party.actors[0].id
  17.     $party1 = $game_party.actors[1].id
  18.     $party2 = $game_party.actors[2].id
  19.     $party3 = $game_party.actors[3].id
  20.     $party4 = $game_party.actors[4].id
  21.   elsif $game_party.actors.size == 5
  22.     $party = $game_party.actors[0].id
  23.     $party1 = $game_party.actors[1].id
  24.     $party2 = $game_party.actors[2].id
  25.     $party3 = $game_party.actors[3].id
  26.     $party4 = $game_party.actors[4].id
  27.     $party5 = $game_party.actors[5].id
  28.   end
复制代码

作者: 亿万星辰    时间: 2009-1-25 04:07
大概似乎是要实现诸如这样的效果么?
举例:
1、2号角色不参与战斗
如果队伍中有他俩,则把他俩暂时离开队伍,战斗结束以后再加回来,是这个意思么?
作者: 玄月    时间: 2009-1-25 04:08
是的,我想到个方法,试试能不能成功,不能再问吧。。
作者: 缺牙de兔子    时间: 2009-1-25 04:11
不参战队伍的人数--
不想干的2个脚本啊
你不是把不参战的人数计算好了吗
把参战人的ID记在一个全局变量里

$actors_number = []
$actors_number = $game_praty.actors[x] [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: 玄月    时间: 2009-1-25 04:15
恩……解决了
战斗之前建立了个变量记录了下队伍人数,战斗之后
  1.     if $partysize == 1
  2.       $game_party.add_actor($party)
  3.     elsif $partysize == 2
  4.       $game_party.add_actor($party)
  5.       $game_party.add_actor($party1)
  6.     elsif $partysize == 3
  7.       $game_party.add_actor($party)
  8.       $game_party.add_actor($party1)
  9.       $game_party.add_actor($party2)
  10.     elsif $partysize == 4
  11.       $game_party.add_actor($party)
  12.       $game_party.add_actor($party1)
  13.       $game_party.add_actor($party2)
  14.       $game_party.add_actor($party3)
  15.     elsif $partysize == 5
  16.       $game_party.add_actor($party)
  17.       $game_party.add_actor($party1)
  18.       $game_party.add_actor($party2)
  19.       $game_party.add_actor($party3)
  20.       $game_party.add_actor($party4)
  21.     elsif $partysize == 6     
  22.       $game_party.add_actor($party)
  23.       $game_party.add_actor($party1)
  24.       $game_party.add_actor($party2)
  25.       $game_party.add_actor($party3)
  26.       $game_party.add_actor($party4)
  27.       $game_party.add_actor($party5)
  28.     end  
复制代码

如此这般,用了蠢办法。。。
作者: 亿万星辰    时间: 2009-1-25 04:15
嗯,你先自己想吧,不过我把我的想法写在下面了

  1. class Game_Party
  2.   attr_accessor   :actors
  3. end
  4. class Scene_Battle
  5.   alias old_main main
  6.   def main
  7.     backup = $game_party.actors.clone
  8.     for i in [1,2]
  9.       $game_party.remove_actor(i)
  10.     end
  11.     old_main
  12.     $game_party.actors = backup
  13.   end
  14. end
复制代码

作者: 玄月    时间: 2009-1-25 04:18
暂时MS解决了…………不过谁知道有没有隐藏着的bug。。我慢慢发掘吧。。。
唉 - -~囧
作者: 缺牙de兔子    时间: 2009-1-25 04:22
我的天啊--
创建了5个全局变量
你直接创建个数组啦...
$party[]

找到参战的角色就把角色加进去
把战斗人数加进去并不能让实际的角色去参战哦

如果你用的是角色是 003 008 011 002的话怎么办?
$game_party.add_actor($party1)
$party1 $party2 $party3 $party4 里面是角色对象吧?

作者: 玄月    时间: 2009-1-25 04:28
我用了很多变量。。。
关于不同ID的角色不会有问题的,因为我事先用$party 记录了角色ID,然后用$gengetu等于1or0判定了角色是否参战。。。
我不能。
现在暂时就会几个函数和判定式。因为$gengetu有一堆,所以也用不了循环数,只好一个一个定义了。或许还有更简单而我又没找到的方法。。
作者: 玄月    时间: 2009-1-25 04:39
oh~! dear 又出问题了。。。
天。。。
作者: 亿万星辰    时间: 2009-1-25 05:22
以下引用缺牙de兔子于2009-1-24 20:22:12的发言:

我的天啊--
创建了5个全局变量
你直接创建个数组啦...
$party[]

找到参战的角色就把角色加进去
把战斗人数加进去并不能让实际的角色去参战哦

如果你用的是角色是 003 008 011 002的话怎么办?
$game_party.add_actor($party1)
$party1 $party2 $party3 $party4 里面是角色对象吧?

其实,也不用数组,进入战斗前做个备份,战斗结束后还原回来就好了。
当然,前提是战斗过程中别增加新的队友进入队伍……




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1