查看: 10339|回复: 17

[有事请教] MV脚本问题

[复制链接]
梦石
0
星屑
115
在线时间
19 小时
注册时间
2018-7-30
回帖
15
发表于 2019-8-2 21:51:48 | 显示全部楼层 |阅读模式
悬赏50星屑已解决
本帖最后由 沙皇蘑菇 于 2019-8-2 22:50 编辑

[pre lang="javascript"] $gameActors.actor(1000)._equips = $gameActors.actor(actorpool[this._actorIndex])._equips;
    $gameActors.actor(1000).mhp = $gameActors.actor(actorpool[this._actorIndex]).mhp;
    $gameActors.actor(1000).mmp = $gameActors.actor(actorpool[this._actorIndex]).mmp;
    $gameActors.actor(1000).atk = $gameActors.actor(actorpool[this._actorIndex]).atk;
    $gameActors.actor(1000).def = $gameActors.actor(actorpool[this._actorIndex]).def;
    $gameActors.actor(1000).mat = $gameActors.actor(actorpool[this._actorIndex]).mat;
    $gameActors.actor(1000).mdf = $gameActors.actor(actorpool[this._actorIndex]).mdf;
    $gameActors.actor(1000).agi = $gameActors.actor(actorpool[this._actorIndex]).agi;
    $gameActors.actor(1000).luk = $gameActors.actor(actorpool[this._actorIndex]).luk;   
    $gameActors.actor(1000).changeEquip(1, 5);
    var actorstatus = new Array(8);
    actorstatus[0] = $gameActors.actor(1000).mhp;
    actorstatus[1] = $gameActors.actor(1000).mmp;
    actorstatus[2] = $gameActors.actor(1000).atk;
    actorstatus[3] = $gameActors.actor(1000).def;
    actorstatus[4] = $gameActors.actor(1000).mat;
    actorstatus[5] = $gameActors.actor(1000).mdf;
    actorstatus[6] = $gameActors.actor(1000).agi;
    actorstatus[7] = $gameActors.actor(1000).luk;
    console.log($gameActors.actor(1000).atk);
    console.log($gameActors.actor(1000)._equips);[/pre]
这一段代码应该换掉第1000号角色的装备,但是却没有,为什么?
$gameActors.actor(1000)._equips = $gameActors.actor(actorpool[this._actorIndex])._equips;
测试出来是这一行出了问题,现在问题变成了怎么样才能让两个角色的装备相同。
希望各位大佬能帮我解答。


代码是不完整的,但是里面所有的变量都定义过,所以不是这方面的问题

最佳答案

查看完整内容

function hjpk1(ai){ let bi = [] for(let n = 0; n < ai.length; n++ ){ bi[n] = new Game_Item for(let k of keys(b[n])){ bi[n][k] = ai[n][k] } } return bi } $gameActors.actor(1000)._equips = hjpk1( $gameActors.actor(actorpool[this._actorIndex])._equips ) 我讨厌富文本编辑器 这个才是正确的答案..... emmm 折寿啊...
梦石
0
星屑
183
在线时间
6 小时
注册时间
2017-9-28
回帖
14
发表于 2019-8-2 21:51:49 | 显示全部楼层
本帖最后由 hjpk1 于 2019-8-3 17:11 编辑

function hjpk1(ai){
    let bi = []
    for(let n = 0; n < ai.length; n++ ){
        bi[n] = new Game_Item
        for(let k of keys(b[n])){
            bi[n][k] = ai[n][k]
        }
    }
    return bi
}

$gameActors.actor(1000)._equips = hjpk1( $gameActors.actor(actorpool[this._actorIndex])._equips )
我讨厌富文本编辑器
这个才是正确的答案..... emmm 折寿啊...
回复

使用道具 举报

梦石
0
星屑
4399
在线时间
552 小时
注册时间
2017-12-2
回帖
41
发表于 2019-8-3 00:10:47 | 显示全部楼层
$gameActors.actor(1000).changeEquip(1, $dataWeapons[5]);
$gameActors.actor(1000).changeEquip(3, $dataArmors[5]);

点评

武器默认的slotId应该是0  发表于 2019-8-3 00:22
回复

使用道具 举报

梦石
0
星屑
9867
在线时间
581 小时
注册时间
2017-9-28
回帖
203
发表于 2019-8-3 09:50:48 | 显示全部楼层
“让两个角色装备相同”,装备是一种有限的物品,你说的使相同是消耗背包中已有的相同装备还是不消耗(复制人.jpg)
喵喵喵
回复

使用道具 举报

梦石
0
星屑
115
在线时间
19 小时
注册时间
2018-7-30
回帖
15
 楼主| 发表于 2019-8-3 10:21:32 | 显示全部楼层
本帖最后由 沙皇蘑菇 于 2019-8-3 11:38 编辑
hyrious 发表于 2019-8-3 09:50
“让两个角色装备相同”,装备是一种有限的物品,你说的使相同是消耗背包中已有的相同装备还是不消耗(复制 ...


不消耗,是要强制换上这个装备。实际上这个1000号角色的作用是做为临时角色。
实际上原来用了这一句脚本
$gameActors.actor(1000)._equips = $gameActors.actor(actorpool[this._actorIndex])._equips;
但是发现这么做会导致当前角色的装备更换
回复

使用道具 举报

梦石
0
星屑
183
在线时间
6 小时
注册时间
2017-9-28
回帖
14
发表于 2019-8-3 14:59:42 | 显示全部楼层
我来告诉你为什么, _equips 是个数组.
A角色的 _equips 是一个 指向 数组的指针.
当你把 B角色的 _equips 指向 A的 _equips时 等于 A和B 指向的同一个 数组.
所以 1000号的B角色改变装备时 也会导致 A角色的装备被替换了.
解决办法时
$gameActors.actor(1000)._equips = [...$gameActors.actor(actorpool[this._actorIndex])._equips];
回复

使用道具 举报

梦石
0
星屑
183
在线时间
6 小时
注册时间
2017-9-28
回帖
14
发表于 2019-8-3 15:00:59 | 显示全部楼层
本帖最后由 hjpk1 于 2019-8-3 15:11 编辑
hjpk1 发表于 2019-8-3 14:59
我来告诉你为什么, _equips 是个数组.
A角色的 _equips 是一个 指向 数组的指针.
当你把 B角色的 _equips  ...


这时一个 关于 浅拷贝和 深拷贝的 典型问题.
鼓掌,撒花.
ps: 笨蛋蘑菇 我不会告诉你我就是曾经那个 萌萌哒的爱酱哈哈.
回复

使用道具 举报

梦石
0
星屑
115
在线时间
19 小时
注册时间
2018-7-30
回帖
15
 楼主| 发表于 2019-8-3 15:47:39 | 显示全部楼层
hjpk1 发表于 2019-8-3 14:59
我来告诉你为什么, _equips 是个数组.
A角色的 _equips 是一个 指向 数组的指针.
当你把 B角色的 _equips  ...

好像依然是跟着变动的……
回复

使用道具 举报

梦石
0
星屑
115
在线时间
19 小时
注册时间
2018-7-30
回帖
15
 楼主| 发表于 2019-8-3 16:00:49 | 显示全部楼层
hjpk1 发表于 2019-8-3 14:59
我来告诉你为什么, _equips 是个数组.
A角色的 _equips 是一个 指向 数组的指针.
当你把 B角色的 _equips  ...

找到的其他深拷贝方法都会导致Item.object未定义
回复

使用道具 举报

梦石
0
星屑
183
在线时间
6 小时
注册时间
2017-9-28
回帖
14
发表于 2019-8-3 16:32:40 | 显示全部楼层
本帖最后由 hjpk1 于 2019-8-3 16:42 编辑

function hjpk1(ai){
    let bi = []
    for(let i = 0; i < ai.length; i++ ){
        bi = new Game_Item
        for(let k of keys(bi)){
            bi[k] = ai[k]
        }
    }
    return bi
}

$gameActors.actor(1000)._equips = hjpk1( $gameActors.actor(actorpool[this._actorIndex])._equips )
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部