【RPG Maker MV 仿新仙剑 战斗场景UI (二)】

这篇具有很好参考价值的文章主要介绍了【RPG Maker MV 仿新仙剑 战斗场景UI (二)】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

战斗指令菜单

原仙剑战斗指令菜单是使用方向键控制,同时按照使用情况正好对应四个指令和四个方向,同时没有选中的菜单用黑色透明图片覆盖,达到未选中的效果,红色图片表示不能进行选中(即不能使用)。

原仙剑战斗指令图

【RPG Maker MV 仿新仙剑 战斗场景UI (二)】,记踩过的坑和做出效果,ui,javascript,开发语言,游戏程序,游戏
通过该图可以清楚的看到未选中及选中、不能选中的情况;同时可以看到其他指令菜单的位置也算是做一下绝对的定位。

RMMV战斗指令对应代码

战斗时,分配键盘上Up键对应攻击,Down键对应其他,Left键对应法术,Right键对应合击。

战斗指令菜单

function Window_ActorCommand() {
    this.initialize.apply(this, arguments);
}

Window_ActorCommand.prototype = Object.create(Window_Command.prototype);
Window_ActorCommand.prototype.constructor = Window_ActorCommand;

Window_ActorCommand.prototype.initialize = function() {
    var y = Graphics.boxHeight - this.windowHeight();
    Window_Command.prototype.initialize.call(this, 0, y);
    this.openness = 0;
    this.deactivate();
    this._actor = null;
};

Window_ActorCommand.prototype.windowWidth = function() {
    return 192;
};

Window_ActorCommand.prototype.numVisibleRows = function() {
    return 4;
};

//创建命令列表
Window_ActorCommand.prototype.makeCommandList = function() {
    if (this._actor) {
        this.addAttackCommand();
        this.addSkillCommands();
        this.addJointAttackCommand();
        this.addOtherCommand();
    }
};
//添加攻击命令
Window_ActorCommand.prototype.addAttackCommand = function() {
    this.addCommand(TextManager.attack, 'attack', this._actor.canAttack());
};
//添加魔法命令
Window_ActorCommand.prototype.addSkillCommands = function() {
    var skillTypes = this._actor.addedSkillTypes();
    skillTypes.sort(function(a, b) {
        return a - b;
    });
    skillTypes.forEach(function(stypeId) {
        var name = $dataSystem.skillTypes[stypeId];
        this.addCommand(name, 'skill', true, stypeId);
    }, this);
};
//添加合击命令
Window_ActorCommand.prototype.addJointAttackCommand = function() {
    this.addCommand("合击", 'jointAttack', this._actor.canAttack());
};
//添加其他命令
Window_ActorCommand.prototype.addOtherCommand = function() {
    this.addCommand("其他", 'other');
};
Window_ActorCommand.prototype.setup = function(actor) {
    this._actor = actor;
    this.clearCommandList();
    this.makeCommandList();
    this.refresh();
    this.selectLast();
    this.activate();
    this.open();
};

Window_ActorCommand.prototype.processOk = function() {
    if (this._actor) {
        if (ConfigManager.commandRemember) {
            this._actor.setLastCommandSymbol(this.currentSymbol());
        } else {
            this._actor.setLastCommandSymbol('');
        }
    }
    Window_Command.prototype.processOk.call(this);
};

Window_ActorCommand.prototype.selectLast = function() {
    this.select(0);
    if (this._actor && ConfigManager.commandRemember) {
        var symbol = this._actor.lastCommandSymbol();
        this.selectSymbol(symbol);
        if (symbol === 'skill') {
            var skill = this._actor.lastBattleSkill();
            if (skill) {
                this.selectExt(skill.stypeId);
            }
        }
    }
};

//--------------------------------------------------------------

//光标向下
Window_ActorCommand.prototype.cursorDown = function(wrap) {
	if(wrap){
		this.select(3);
	}
};
//光标向上
Window_ActorCommand.prototype.cursorUp = function(wrap) {
	if(wrap){
		this.select(0);
	}
};
//光标向右
Window_ActorCommand.prototype.cursorRight = function(wrap) {
	if(wrap){
		this.select(2);
	}
};
//光标向左
Window_ActorCommand.prototype.cursorLeft = function(wrap) {
	if(wrap){
		this.select(1);
	}
};

这里进行了简化,四个按键操作原来需要获取指令序号及指令的数量后计算下一个操作的指令,现在全部简化为,判断是否按下对应按键,就执行对应的指令。

代码

Window_ActorCommand.prototype.initialize = function() {
	......
	this.move(12, 344, 148, 130);
	this.BattleCommand= ImageManager.loadSystem('FightCommand');
	......
	this.refresh();
};
//标准内边距
Window_ActorCommand.prototype.standardPadding = function() {
    return 0;
};
Window_ActorCommand.prototype._refreshCursor = function() {
};
Window_ActorCommand.prototype._updateCursor = function() {
};
Window_ActorCommand.prototype.update=function(){
	Window_Command.prototype.update.call(this);
	this.refresh();
}
Window_ActorCommand.prototype.refresh = function() {
    this.contents.clear();
	if(this._actor){
		this.drawBattleActorCommand();
	}
};
Window_ActorCommand.prototype.drawBattleActorCommand = function() {
	var bitmap=this.BattleCommand;
	this.contents.paintOpacity=255;
    this.contents.blt(bitmap, 0, this._list[0].enabled?0:56, 56, 56, 46, 0);
	this.contents.blt(bitmap, 112, this._list[3].enabled?0:56, 56, 56, 46, 73);
	this.contents.blt(bitmap, 168, this._list[1].enabled?0:56, 56, 56, 0, 37);
	this.contents.blt(bitmap, 56, this._list[2].enabled?0:56, 56, 56, 91, 37);
	this.contents.paintOpacity=120;
	switch(this._index){
		case 0:
			if(this._list[3].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 46, 73);
			if(this._list[1].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 0, 37);
			if(this._list[2].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 91, 37);
			break;
		case 1:
			if(this._list[0].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 46, 0);
			if(this._list[3].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 46, 73);
			if(this._list[2].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 91, 37);
			break;
		case 2:
			if(this._list[0].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 46, 0);
			if(this._list[3].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 46, 73);
			if(this._list[1].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 0, 37);
			break;
		case 3:
			if(this._list[0].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 46, 0);
			if(this._list[1].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 0, 37);
			if(this._list[2].enabled)this.contents.blt(bitmap, 0, 112, 56, 56, 91, 37);
			break;
		case -1:
			break;
	}
};
//光标向下
Window_ActorCommand.prototype.cursorDown = function(wrap) {
	if(wrap&&this._list[3].enabled){
		this.select(3);
	}
};

_refreshCursor 和 _updateCursor 方法由于是处理光标的因此用空的方法去掉对应的光标; drawBattleActorCommand 方法是进行绘制战斗指令图标的,其流程是绘制基础战斗指令的图标,通过三元运算符判断绘制的图片是启用还是未启用的,后面是绘制图标的遮挡的。选中的图标和未启用的图标不会被进行遮挡; cursorDown 方法和另外三个方法进行了一定的修改,即未启用的指令是不会被选中的; refresh update方法分别是进行更新和刷新指令图标的,这样后期若是需要人物不能操作时就可以实现效果。

效果

【RPG Maker MV 仿新仙剑 战斗场景UI (二)】,记踩过的坑和做出效果,ui,javascript,开发语言,游戏程序,游戏
【RPG Maker MV 仿新仙剑 战斗场景UI (二)】,记踩过的坑和做出效果,ui,javascript,开发语言,游戏程序,游戏【RPG Maker MV 仿新仙剑 战斗场景UI (二)】,记踩过的坑和做出效果,ui,javascript,开发语言,游戏程序,游戏
【RPG Maker MV 仿新仙剑 战斗场景UI (二)】,记踩过的坑和做出效果,ui,javascript,开发语言,游戏程序,游戏
基础战斗菜单就已完成,之后将制作其他指令的中的二级和三级菜单。文章来源地址https://www.toymoban.com/news/detail-834783.html

到了这里,关于【RPG Maker MV 仿新仙剑 战斗场景UI (二)】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 3D RPG Course | Core 学习日记二:PolyBrush / Pro Builder构建场景

    3D RPG Course | Core 学习日记二:PolyBrush / Pro Builder构建场景

    我们这次将要学习的是使用PolyBrush和Pro Buillder构建精美的游戏场景。 在Package Manager中导入的时候要注意,将Shader Examples(URP)也一起导入,不然PolyBrush对URP渲染的素材进行操作时会出现问题。 导入完成之后在Tools里将面板调出,后续的Pro Builder也是如此: 可以看到PolyBrush可选的

    2024年02月07日
    浏览(12)
  • 9. UE5 RPG创建UI(下)

    9. UE5 RPG创建UI(下)

    在上一篇文章里,制作了显示血量和蓝量的ui,并且还将ui和获取数据使用的控制器层创建出来并初始化成功。现在只有主用户控件上面被添加了控制器层,还未给每个用户控件赋予控制器层。接下来要实现对属性的广播功能,在属性值变化的时候,能够在蓝图中获取到数值的

    2024年01月24日
    浏览(13)
  • 8. UE5 RPG创建UI(上)

    8. UE5 RPG创建UI(上)

    UI是显示角色的一部分属性玩家可以直接查看的界面,通过直观的形式在屏幕上显示角色的各种信息。如何使用一种可扩展,可维护的形式来制作,这不得不说到耳熟能详的MVC架构。 MVC(Model-View-Controller)是一种常见的软件架构模式,用于组织和设计应用程序。它将应用程序

    2024年01月24日
    浏览(8)
  • LARGE LANGUAGE MODEL AS AUTONOMOUS DECISION MAKER

    本文是LLM系列文章,针对《LARGE LANGUAGE MODEL AS AUTONOMOUS DECISION MAKER》的翻译。 尽管大型语言模型(LLM)表现出令人印象深刻的语言理解和上下文学习能力,但在解决现实世界任务时,它们的决策能力仍然严重依赖于特定任务专家知识的指导。为了释放LLM作为自主决策者的潜力

    2024年02月10日
    浏览(15)
  • Unity相扑战斗球

    Unity相扑战斗球

    介绍 玩家球通过上下键控制,相机依靠左右键控制,有加力量的东西,玩家球碰到力量吸收后,可以更大力碰撞敌人,当一波球碰掉后,还会生成新一波球。 物理材质的弹力限制数0-1 为玩家和敌人分别加上物理材质 玩家碰撞钻石添加能量,并且钻石消失,这里应该把钻石的

    2024年01月16日
    浏览(11)
  • Unity 回合制战斗

             回合制战斗游戏是一种流行的游戏类型,它的基本玩法是让玩家控制角色在回合制系统下进行战斗。本文将介绍如何使用Unity引擎实现一个基于回合制系统的3D战斗游戏,并提供完整的代码和注释。 游戏设计          我们的回合制战斗游戏将包括一个主菜单场

    2024年02月16日
    浏览(13)
  • uniapp小程序map(点击地图增加maker,聚合、自定义聚合样式)

    uniapp小程序map(点击地图增加maker,聚合、自定义聚合样式)

    功能背景 小程序端开发地图组件,点击地图上任何一个位置,增加一个maker,点击maker触发另外的事件。缩放地图进行聚合显示,自定义聚合样式 效果图 正常样式 聚合效果 注意:微信开发者工具是不支持聚合效果的,需要真机调试才能看到效果 代码实现

    2024年02月12日
    浏览(11)
  • unity 前端场景搭建UI框架的设计

    基础组件库:设计一套基础组件库,包括常用的 UI 控件,如文本、按钮、图像等,组件库的设计应该尽量简单易用,方便开发者快速搭建 UI 界面。 布局管理器:为了方便 UI 界面的排版,需要设计一套布局管理器,如水平布局、垂直布局、网格布局等,布局管理器应该支持自

    2024年02月16日
    浏览(8)
  • Unity如何设计一个战斗系统

    战斗系统的基本原理 在游戏中,战斗系统的基本原理是通过计算双方的属性和技能等信息,来模拟双方的战斗过程。在战斗过程中,玩家需要根据自己的策略和技能来进行操作,以便战胜对手。在战斗过程中,需要考虑到双方的攻击、防御、血量、状态效果等因素,以便更加

    2024年02月12日
    浏览(8)
  • 官方项目《内容示例》中Common UI部分笔记:Common UI 分场景使用教程

    官方项目《内容示例》中Common UI部分笔记:Common UI 分场景使用教程

    Common UI给虚幻的UI系统带来了很多新特性,这些新特性往往面向不同的使用场景。目前我看到很多的Common UI教程,都是把这些特性很笼统地展示一遍,这就很容易造成初学者的困惑:“我当前做的这些工作,到底是为了实现什么?”所以本文采用分场景介绍的方式,希望能够

    2024年01月25日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包