RPG Maker MV 仿新仙剑 战斗场景UI (十)
- 前言
- 角色站位
- 人物站位
- 人物影子
前言
上一期完成了几个功能,虽然没有进行进一步的优化,但基础的功能已经完成,现在记录下已完成及未完成的功能:
- 战斗菜单
- 一级战斗菜单
- 二级战斗菜单
- 角色状态显示
- 物品及法术窗口
- 进入状态及装备场景
- 角色战斗精灵
- 战斗背景图
- 投掷窗口
- 合击、防御、围攻
- 角色站位
- 战斗动画(法术及各操作动画)
- 经验及物品的消息显示
- 敌我选中
- 伤害显示
- 战斗移动
可以看到看到现在差的功能还有不少。
角色站位
人物站位
角色的站位,是开始战斗时角色进行战斗准备的位置,初期其实已经完成一部分了,通过之前的截图就可以看出来。
这里用了一条线段来作为标志,线段和底部呈现22.5度的夹角,而人物就在这个线段上,由于角色的不同,包括不同形态,对应的精灵的宽高也不同,因此不能通用,需要对应给不同的角色以不同的坐标来真正的保持一致。
//设置角色的初始位置
Sprite_Actor.prototype.setActorHome = function(index) {if($gameParty.members().length>1){this.setHome(434 + index * 103, 399 - index * 44);if(this._actor._battlerName==="LingEr1"){this.setHome(434 + index * 106, 399 - index * 65);}}else{this.setHome(434 + 1 * 103, 399 - 1 * 44);}
};
这里针对只有一个人物时,坐标是初始坐标加上索引乘上位移的坐标,可以看到只有一个人物时索引是一个固定值,这是因为第一个主角站位正好是中间,因此需要提前写死,后期可能会考虑用多维数组或json的方式直接存储调用。
人物影子
人物的影子是已经做好的,因此可以直接使用,不用像人物行走那样需要通过一些变形来做阴影(当然还没有开始做这块)。
Sprite_Actor.prototype.createShadowSprite = function() {this._shadowSprite = new Sprite();this._shadowSprite.anchor.x = 0.5;this._shadowSprite.anchor.y = 0.5;this._shadowSprite.y = -62;this.addChild(this._shadowSprite);
};
Sprite_Actor.prototype.updateBitmap = function() {Sprite_Battler.prototype.updateBitmap.call(this);var name = this._actor.battlerName();if (this._battlerName !== name) {this._battlerName = name;this._mainSprite.bitmap = ImageManager.loadSvActor(name);this._shadowSprite.bitmap=ImageManager.loadSvActor(name+"Ying");}
};
//修改setActorHome中代码
if(this._actor._battlerName==="LingEr1"){this.setHome(434 + index * 106, 399 - index * 65);this._shadowSprite.y+=13;}
通过修改创建影子的方法及更新影子名称的方法,并在人物初始位置这里加上对应的位置修改就完成了人物影子的实现。