【RPG Maker MZ/MV】使敌群中的敌人变为随机敌人

文章介绍了如何通过修改Game_Troop.prototype.setup方法,实现敌人群ID的随机化。通过定义selectEnemyId函数,从包含特定RandomEnemy标记的敌人ID数组中随机选择敌人,从而在保持可控性的同时增加战斗的多样性。这种方法允许开发者指定哪些敌人的ID可参与随机选择,而不会影响其他敌人配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这一部分的代码修改涉及到了很多知识点。

以RMMZ为例,首先找到关于敌群的代码:

/** 设置* @param {number} troopId 敌群id* @description 清除内容,设置敌群id,然后根据敌群数据设置每一个敌人,然后制作/设置唯一名称*/
Game_Troop.prototype.setup = function(troopId) {
    this.clear(); //清空以前的
    this._troopId = troopId;//暂存/转存 为局部变量
    this._enemies = []; //定义类变量数组#是否可以省略前缀this.??
    for (const member of this.troop().members) {
		//循环 (常量 临时变量?? of xxxb被迭代的数组??  ) {  执行的代码 }
        if ($dataEnemies[member.enemyId]) { //如果敌人-id不为空
            const enemyId = member.enemyId; //获取id和坐标
            const x = member.x;
            const y = member.y;
            const enemy = new Game_Enemy(enemyId, x, y); //新键敌人并暂存(通过id和坐标获取本体),这一行是本贴的重点!!
            if (member.hidden) { //如果为隐藏
                enemy.hide(); //隐藏的方法(开启隐藏开关)
            }
            this._enemies.push(enemy); //堆栈进 (类变量)_敌群数组里
        }
    }
    this.makeUniqueNames();  //制作/设置唯一名称*/
};

可以看到const enemy = new Game_Enemy(enemyId, x, y);就是读取数据库中的敌人ID并且放在对应的X、Y坐标上。那如果做到敌人随机,只需要做到ID随机就可以了。
但如果只是简单的将enemyId替换成random()函数,就会导致整个游戏的敌群、敌人都随机,这并不是我们想要的结果,因为不可控,而且无法指定敌人。
我们可以从数组方面入手,将需要进行随机抽取的敌人ID放入数组中,然后把enemyId改成从数组中抽取就可以了。

我们可以先定义一个函数:

function selectEnemyId(enemyArray) {
        if (!enemyArray.meta.RandomEnemy) {
            return null;
        };
//定义函数名selectEnemyId,如果数据库中敌人的备注栏没有指定的RandomEnemy字符串,则返回null
        const pool = enemyArray.meta.RandomEnemy.split(',').map(Number);
//将数据库中敌人的备注栏RandomEnemy中出现的数字使用map函数变为数组,数组名为pool
        return Number(pool[Math.randomInt(pool.length)]);
//length函数得到这个数组的长度,Math.randomInt来根据长度随机选取数组的一个元素序号,pool[序号]即为选中的敌人ID
//最后使用Number来强制转换成数字格式
    };

看懂了这个函数之后,我们再来修改之前的new Game_Enemy部分,改成这样

const randomEnemyId = selectEnemyId($dataEnemies[member.enemyId]);
                const enemy = new Game_Enemy(randomEnemyId || member.enemyId, member.x, member.y);

实例如图,在图片1中,ID为14的敌人,备注栏中写入了1,6,7,8,9,10,11,12这几个数字。

图2中,将ID为14的敌人放入敌群.

战斗测试,可以看到图3图4的敌人是不同的。


 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值