Project1

标题: 想知道怎么才能使新旧两个数组不同 [打印本页]

作者: 任小雪    时间: 2022-3-16 19:54
标题: 想知道怎么才能使新旧两个数组不同
本帖最后由 任小雪 于 2022-3-16 20:09 编辑

想知道怎么才能使类似以下的新旧两个变量(其实是数组)最终变得不同
var person = new Object();
var person2 = person;
person.name = 'jack';
console.log(person.name);//jack
console.log(person2.name);//jack
嗯,其实是想两个新旧数组不同,具体,是因为$dataMap的事件和$gameMap的事件需要用到,想搞个无限生成新事件的脚本,然后姿势不够。
push和slice的用法都自学掌握了一点了,但。。。总之就是姿势不够。
不知道这个问题解决起来复杂不复杂,要是太复杂就算了。

赋值这东西,真发现新的遗漏姿势点呢,虽然冷还被恶心到了
摸索了一个下午的成果是发现新旧变量总是会互相干扰(如果是一开始直接旧的给新的赋值的话),因为作为测试的事件是传送阵,所以最好的结果是,一触发赋值和push,旧传送阵和新传送阵就重叠着一起跑向xy设置的坐标点,没错,真的是跑
作者: 仇九    时间: 2022-3-16 19:54
var eventTest1 = $dataMap.events[1];
eventTest1.note = '1';
var eventTest2= JsonEx.makeDeepCopy(eventTest1);
eventTest2.note = '2';

console.log(eventTest1.note );//1
console.log(eventTest2.note );//2

我看你上面的回答……
你若是想复制事件可以搜索“复制事件”。
作者: soulsaga    时间: 2022-3-16 20:12
本帖最后由 soulsaga 于 2022-3-16 20:17 编辑

assign
JAVASCRIPT 代码复制
  1. var person2 = JSON.parse(JSON.stringify(person)



作者: 小怪兽奇奇侠    时间: 2022-3-16 20:19
这是因为你赋值后,引用类型的变量地址指向的是同一块堆内存,所以会相互影响。
作者: 小怪兽奇奇侠    时间: 2022-3-16 20:55
本帖最后由 小怪兽奇奇侠 于 2022-3-16 21:11 编辑

我的想法其实很简单,不复杂,就是你新创建一个子类,让这个子类继承父类就可以,就拿你的代码举例,可以这样改一下:
class Obj{constructor(){}}
var person = new Obj();
person.name = 'jack';
class Person2 extends Obj{}
person2=new Person2()
person2.name='rose'
console.log(person.name + person2.name) //jackrose
作者: 仇九    时间: 2022-3-16 22:08
var person = new Object();
person.name = 'jack';

var person2 = JsonEx.makeDeepCopy(person);
person2.name = 'nick';

console.log(person.name);//jack
console.log(person2.name);//nick


深拷贝(新开内存区将数据复制过来)与浅拷贝(只传递数值地址指针)的区别。
作者: 任小雪    时间: 2022-3-16 23:23
本帖最后由 任小雪 于 2022-3-16 23:53 编辑

◆注释:事件复制脚本,
:  :有瑕疵,只能看(暂时走到这里,有空有需要再继续研究,嗨~)。
:  :
//◆脚本:
var a=JsonEx.makeDeepCopy($dataMap.events[5]);
a.id=$dataMap.events.length;
a.x=0;
a.y=0;
$dataMap.events.push(a);
console.log($dataMap.events);
//◆脚本:
var a=JsonEx.makeDeepCopy($gameMap._events[5]);
a._eventId=$gameMap._events.length;
a._realX=0;
a._realY=0;
a._x=0;
a._y=0;
a.x=0;
a.y=0;
$gameMap._events.push(a);
console.log($gameMap._events);
//◆脚本:
SceneManager.goto(Scene_Map);
作者: 任小雪    时间: 2022-3-18 16:35
本帖最后由 任小雪 于 2022-3-18 17:45 编辑

◆注释:成功但没有完全成功,
:  :暂时发现生成新事件后,
:  :大概是少了获取事件id的法子(可能只是与被复制事件有关的,不过,也可能不只是id,而是整个this)
也可能单纯只是原本的this不行,然后,具体到某个之后却可以?
◆脚本:
:  :Game_Event.prototype.event = function() {
:  :if(this._eventId){
:  :    return $dataMap.events[this._eventId];
:  :}else{
:  :    return $dataMap.events[5];
:  :};
:  :};
◆脚本:Game_Event.prototype.findProperPageIndex = function() {
:  :if(this.event()){    var pages = this.event().pages;
:  :}else{    var pages = $dataMap.events[5].pages;};
:  :    for (var i = pages.length - 1; i >= 0; i--) {
:  :        var page = pages;
:  :        if (this.meetsConditions(page)) {
:  :            return i;
:  :        }
:  :    }
:  :    return -1;
:  :};
◆脚本:Game_Event.prototype.page = function() {
:  :if(this.event()){
:  :    return this.event().pages[this._pageIndex];
:  :}else{
:  :    return $dataMap.events[5].pages[this._pageIndex];
:  :};
:  :};
◆脚本:var a=JsonEx.makeDeepCopy($dataMap.events[5]);
:  :a.id=$gameMap._events.length;
:  :a.x=0;
:  :a.y=0;
:  :$dataMap.events[$gameMap._events.length]=a;
:  :console.log($dataMap.events);
◆脚本:var a=JsonEx.makeDeepCopy($gameMap._events[5]);
:  :a._eventId=$gameMap._events.length;
:  :a._realX=0;
:  :a._realY=0;
:  :a._x=0;
:  :a._y=0;
:  :a.x=0;
:  :a.y=0;
:  :$gameMap._events[$gameMap._events.length]=a;
:  :console.log($gameMap._events);
◆脚本:SceneManager.goto(Scene_Map);

大佬们有没有什么简单的建议
作者: 清澈淌漾    时间: 2022-3-18 17:33
直接转字符串在转回来...
作者: 任小雪    时间: 2022-3-18 17:49
清澈淌漾 发表于 2022-3-18 17:33
直接转字符串在转回来...

指两个数组之间的js拷贝吗?那个已经解决了,现在只是在摸索着复制事件(看过芯大佬和仇九大佬的,然后,思路跟我不一样,我暂时水平也真的不够,而我的法子的……现在是只能复制后,几乎只能看(如果只有一个事件的n个复制事件,是可以的,但是两个及以上就暂时行不通,也可能还有其他bug)……具体,说不清,因为我真的不太懂
作者: 任小雪    时间: 2022-3-20 08:08
本帖最后由 任小雪 于 2022-3-20 08:10 编辑

◆脚本:var a=JsonEx.makeDeepCopy($dataMap.events[5]);
:  :a.id=$gameMap._events.length;
:  :a.x=0;
:  :a.y=0;
:  :$dataMap.events[$gameMap._events.length]=a;
:  :console.log($dataMap.events);
◆脚本:var a=JsonEx.makeDeepCopy($gameMap._events[5]);
:  ://a._eventId=$gameMap._events.length;//实测发现是这句有问题,现在注释掉的话,会导致新旧事件共用一个事件(也可能是ID)
:  :a._realX=0;
:  :a._realY=0;
:  :a._x=0;
:  :a._y=0;
:  :a.x=0;
:  :a.y=0;
:  :$gameMap._events[$gameMap._events.length]=a;
:  :console.log($gameMap._events);
◆脚本:SceneManager.goto(Scene_Map);






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