如图所示,MZ和MV在横板战斗中,角色在选择行动和执行行动这两处,会向前移动一步。
以MZ为例,可以在rmmz_sprites.js找到这一段:
[JavaScript] 纯文本查看 复制代码 Sprite_Actor.prototype.shouldStepForward = function() {
return this._actor.isInputting() || this._actor.isActing();
};
_actor.isInputting即为选择行动时,_actor.isActing即为执行行动时。所以如果只想在行动的时候向前移动只需要改成如下即可:
[JavaScript] 纯文本查看 复制代码 Sprite_Actor.prototype.shouldStepForward = function() {
return this._actor.isInputting();
};
这样在CTB等模式中,画面就会精简很多,不会角色乱跳了。
再进阶一下,搜索shouldStepForward,可以看到另一处有以下代码:
[JavaScript] 纯文本查看 复制代码 /**更新目标位置 */
Sprite_Actor.prototype.updateTargetPosition = function() {
if (this._actor.canMove() && BattleManager.isEscaped()) {
this.retreat();
} else if (this.shouldStepForward()) {/** 需要前进*/
this.stepForward();//(左)前进48像素
} else if (!this.inHomePosition()) {/** 不 是处于本位(SV图初始站立位置)*/
this.stepBack();//返回本位(4次(右)慢走12像素)
}
};
继续深挖搜索stepForward,找到以下代码:
[JavaScript] 纯文本查看 复制代码 /**步骤推进 */
Sprite_Actor.prototype.stepForward = function() {
this.startMove(-48, 0, 12);/** 开始移动*(x坐标, y坐标,持续时间/帧)*/
};
/**步骤返回 */
Sprite_Actor.prototype.stepBack = function() {
this.startMove(0, 0, 12);/** 开始移动*(x坐标, y坐标,持续时间/帧)*/
};
/**撤退 */
Sprite_Actor.prototype.retreat = function() {
this.startMove(300, 0, 30);/** 开始移动*(x坐标[从当前点开始计算位置,而不是屏幕0,0点], y坐标,持续时间/帧)*/
};
这些数字就是角色位移距离和持续时间。
继续深挖startMove,找到系统定义的函数:
[JavaScript] 纯文本查看 复制代码 Sprite_Battler.prototype.startMove = function(x, y, duration) {
if (this._targetOffsetX !== x || this._targetOffsetY !== y) {
this._targetOffsetX = x;
this._targetOffsetY = y;
this._movementDuration = duration;
if (duration === 0) {
this._offsetX = x;
this._offsetY = y;
}
}
};
我们可以打开思路,用这个函数照葫芦画瓢,做一个角色移动到画面中心位置,突出重点等等之类的玩法了。
|