设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 4795|回复: 13
打印 上一主题 下一主题

[有事请教] 安卓版已经打包好,试玩了一下感觉好难受,请教

[复制链接]

Lv2.观梦者

梦石
0
星屑
375
在线时间
40 小时
注册时间
2018-12-23
帖子
127
跳转到指定楼层
1
发表于 2019-1-11 11:58:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
请教各位大佬,在事件中添加什么代码可以直接调用物品栏、装备栏?不然用手机玩着操作太繁琐,我自己制作的游戏都不想玩……

在地图上添加图标调用公共事件我已经会了,但是公共事件中如何写代码才能调用物品栏、装备栏,我却一直搜不到方法,求各位大佬帮忙啊

如果可以,我还想在物品使用之后的菜单中添加一个返回按钮,这样手机用户即使不知道双指缩放屏幕可以打开菜单、返回,也能畅玩游戏了
啦啦啦,这里小萌新一枚。

Lv3.寻梦者

梦石
0
星屑
1463
在线时间
437 小时
注册时间
2010-10-2
帖子
36

开拓者

2
发表于 2019-1-11 12:15:02 | 只看该作者
复制到事件脚本里使用
物品 SceneManager.push(Scene_Item)
装备 SceneManager.push(Scene_Equip)
技能 SceneManager.push(Scene_Skill)
状态 SceneManager.push(Scene_Status)
回复 支持 1 反对 0

使用道具 举报

Lv2.观梦者

梦石
0
星屑
375
在线时间
40 小时
注册时间
2018-12-23
帖子
127
3
 楼主| 发表于 2019-1-11 12:41:39 | 只看该作者
seth 发表于 2019-1-11 12:15
复制到事件脚本里使用
物品 SceneManager.push(Scene_Item)
装备 SceneManager.push(Scene_Equip)

哈哈哈哈,谢谢大佬,成功了,不过能不能更进一步?直接进入道具选择界面然后点击一下道具?

这样用户可以直接使用道具,而不用每次再多点一次道具……

还有,道具界面可以添加两个按钮吗?一个返回一个退出……求大佬帮忙啊
啦啦啦,这里小萌新一枚。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3404
在线时间
461 小时
注册时间
2013-12-7
帖子
333
4
发表于 2019-1-11 12:52:07 | 只看该作者
事件调用楼上已经说了, 【装备】 【技能】 【状态】 还需要在之前加上
  1. $gameParty._menuActorId = id; //修改id
复制代码


好像还没有通用的移动端UI插件,返回键等插件即使用了效果也很不理想。真的想做体验感好得手机端游戏还是得自己改。

首先要改的就是MV的UI逻辑,MV所有命令及选择窗口(Window_Command和Window_Selectable)都是基于键盘操作设计的,也就是你必须移动光标到某一个选项上,然后点击确定(在PC端是点空格,在手机端是再次点击该项)才会执行该选项绑定的事件。也就是说,你在手机端上要点两下才能执行选项…这个操作简直反人类。同时你要是改了的话,基本你的游戏也就告别键盘游玩的可能性了。

然后就是更深层的用户习惯问题了,双指返回除了使用MV的人基本无人能理解…帮助窗口占据空间、物品的翻页方式以及装备必须点击装备类型来选择装备,不能直接通过“使用”该道具来装备还有等等不胜枚举的操作我想正常人类玩家都难以接受……

一个玩家拿到一个手游,可能只有五分钟的接受时间。而在一场MV默认的战斗中,你需要点击两次"魔法"指令,再点击翻页N次找到"治愈"指令,再点击两次"治愈",最后再点击两次目标才能做出一次动作,算上战斗动画,一分钟已经过去了……

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3404
在线时间
461 小时
注册时间
2013-12-7
帖子
333
5
发表于 2019-1-11 13:36:00 | 只看该作者
附上一些我改的脚本参考。

单次点击
  1. //取消光标
  2. Window_Selectable.prototype.isCursorVisible = function() {
  3.         return false;
  4. };
  5. //单次点击以及改变翻页方式
  6. Window_Selectable.prototype.onTouch = function(triggered) {
  7. var lastIndex = this.index();
  8. var x = this.canvasToLocalX(TouchInput.x);
  9. var y = this.canvasToLocalY(TouchInput.y);
  10. var hitIndex = this.hitTest(x, y);
  11. if (hitIndex >= 0) {
  12.         if (hitIndex === this.index()) {
  13.                 if (triggered && this.isTouchOkEnabled()) {
  14.                         this.processOk();
  15.                 }
  16.         } else if (this.isCursorMovable()) {
  17.                 this.select(hitIndex);
  18.                 this.processOk();
  19.         }
  20. } else if (this._stayCount >= 10) {
  21.         if (y < this.padding) {
  22.                 this.cursorPageup();
  23.         } else if (y >= this.height - this.padding) {
  24.                 this.cursorPagedown();
  25.         }
  26. }
  27. if (this.index() !== lastIndex) {
  28.         SoundManager.playCursor();
  29. }
  30. };
复制代码

这只是一个通用的解决方式,其原理只是让脚本帮助玩家再点击一次选项。
而更高效与合理的做法是直接取用户点击坐标来查找对应事件。比如我要在 x:290 - 320 y:0 - 30的位置加一个返回按钮。当然,完全的使用新逻辑你需要重写几乎全部的Window_Selectable原型。

  1. Window_Background.prototype.update = function() {
  2.         Window_Base.prototype.update.call(this);
  3.         this.updatePop();
  4. };

  5. Window_Background.prototype.updatePop = function() {
  6.         if (TouchInput.isTriggered()){
  7.                 var x = this.canvasToLocalX(TouchInput.x);
  8.                 var y = this.canvasToLocalY(TouchInput.y);
  9.                 if (x >= 290 && y >= 0 && x < 320 && y < 30){
  10.                         SceneManager.pop();
  11.                 }
  12.         }
  13. };        
复制代码

在Scene_Map绘制菜单按钮
  1. Yanfly.Momo.Scene_Boot_loadSystemImages = Scene_Boot.loadSystemImages;       
  2. Scene_Boot.loadSystemImages = function() {
  3.         Yanfly.Momo.Scene_Boot_loadSystemImages.call(this);
  4.         ImageManager.reserveSystem('UI');
  5. };
复制代码
首先UI图片需要被预加载。当然你也可以用这个方法来加载你自定义的一些图片。
  1. Yanfly.Momo.Scene_Map_createDisplayObjects = Scene_Map.prototype.createDisplayObjects;
  2. Scene_Map.prototype.createDisplayObjects = function() {
  3.         Yanfly.Momo.Scene_Map_createDisplayObjects.call(this);
  4.         this.createMenuBtn();
  5. };

  6. Scene_Map.prototype.createMenuBtn = function() {
  7.         this._menuBtn = new Sprite_Button();
  8.         this._menuBtn.bitmap = ImageManager.loadSystem('UI');
  9.         this._menuBtn.setFrame(0, 48, 48, 48);
  10.         this._menuBtn.x = 272;
  11.         this._menuBtn.y = Graphics.boxHeight - 52;
  12.         this._menuBtn.setClickHandler(this.callMenu.bind(this));
  13.         this.addChild(this._menuBtn);
  14. };
复制代码
这里为地图创建了一个Sprite_Button,顾名思义,按钮精灵。并且监听点击事件,执行callMenu()。
  1. Yanfly.Momo.Scene_Map_isMapTouchOk = Scene_Map.prototype.isMapTouchOk;
  2. Scene_Map.prototype.isMapTouchOk = function() {
  3.         if(this._menuBtn.isButtonTouched() && TouchInput._pressedTime < 10) return false;
  4.         return Yanfly.Momo.Scene_Map_isMapTouchOk.call(this);
  5. };

  6. Yanfly.Momo.Scene_Map_update = Scene_Map.prototype.update;
  7. Scene_Map.prototype.update = function() {
  8.         Yanfly.Momo.Scene_Map_update.call(this);
  9.         this.updateUi();
  10. };

  11. Scene_Map.prototype.updateUi = function() {
  12.         if ($gamePlayer.canMove() && (!this._fadeSprite || this._fadeSprite.opacity < 20) && $gameScreen._brightness > 235){
  13.                 this.addChild(this._menuBtn);       
  14.         } else {               
  15.                 this.removeChild(this._menuBtn);       
  16.         }
  17. };
复制代码
这是一些兼容性代码,我并不希望点击菜单按钮时角色移动,而长按屏幕移动时不会点到菜单按钮。同时在对话等事件运行时,我希望隐藏该按钮。

绘制选择框及锁定图标
  1. Window_Selectable.prototype.drawCursor = function (x, y) {
  2.         var bitmap = ImageManager.loadSystem('UI');
  3.         this.contents.blt(bitmap, 272, 48, 48, 48, x, y);
  4. }
  5. Window_Selectable.prototype.drawLock = function (x, y) {
  6.         var bitmap = ImageManager.loadSystem('UI');
  7.         this.contents.blt(bitmap, 224, 48, 48, 48, x, y);
  8. }
复制代码
虽然隐藏了默认的光标,但有的时候确实需要让玩家知道他点选的是哪一个选项,或者哪一个选项是不可选的。通过两个图片可以很好的解决这个问题。
  1. if (index === this.index()) this.drawCursor(rect.x, rect.y);
复制代码
在各类选择列表的drawItem方法中加入以上一句来绘制选择框。
  1. if (!this.isEnabled(index)) this.drawLock(rect.x, rect.y);
复制代码
或者绘制锁定图标。

还有很多细节上的改动,比如装备物品的方法,战斗时角色命令窗口的布置,让帮助窗口显示/隐藏等。
这里就不一一举例了,无非就是在某个位置设计某个按钮点击以后执行某段代码。理解了以上代码要自己改不难。

窗口动画
  1. Window_MenuHelp.prototype.update = function() {
  2.         Window_Base.prototype.update.call(this);
  3.         if (this.active){
  4.                 if (this.x < 0) this.x += 32;
  5.                 if (TouchInput.isTriggered()){
  6.                         if (!this.isTouchedInsideFrame()) this.cancel();
  7.                 }
  8.                 if (TouchInput.isReleased() && this.isTouchedBtn() && this._btnEnabled) this.ok();
  9.         }else{
  10.                 if (this.x > -320) this.x -= 32;
  11.         }
  12. };
复制代码
在帮助窗口显示时加一个弹出动画会让你的游戏看起来生动。(可以从以上代码中看出,我把使用物品按钮也放在了帮助窗口里)

滑动翻页
  1. Window_MenuItem.prototype.processTouch = function() {
  2.         if (this.isOpenAndActive()) {
  3.                 if (TouchInput.isTriggered() && this.isTouchedInsideFrame()){
  4.                         this._touchX = TouchInput._x;
  5.                 }
  6.                 if (TouchInput.isReleased() && this.isTouchedInsideFrame()) {
  7.                                 if (TouchInput._x > this._touchX + 40) this.cursorPageup();
  8.                                 else if (TouchInput._x < this._touchX - 40) this.cursorPagedown();
  9.                                 else this.onTouch(true);
  10.                 }
  11.         }else{
  12.                 this._touchX = NaN;
  13.         }
  14. };
复制代码
这是一个保留了MV的一部分翻页逻辑的写法。当然你也可以做一个宽于屏幕的窗口,通过改变窗口的_scrollX值重绘窗口来做出真正意义上的滚动效果。




点评

给大佬点赞,回头我好好研究研究  发表于 2019-1-11 13:54

评分

参与人数 1+1 收起 理由
白嫩白嫩的 + 1 精品文章

查看全部评分

回复 支持 1 反对 0

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
21972
在线时间
8569 小时
注册时间
2011-12-31
帖子
3362
6
发表于 2019-1-11 15:16:11 | 只看该作者
本帖最后由 tseyik 于 2019-1-11 15:17 编辑

給你的挿件,不是己有七個常用的嗎?

回复 支持 1 反对 0

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
21972
在线时间
8569 小时
注册时间
2011-12-31
帖子
3362
7
发表于 2019-1-11 15:25:46 | 只看该作者
Mobile Game User Interface(手機用介面
https://forums.rpgmakerweb.com/i ... er-interface.94196/
回复 支持 1 反对 0

使用道具 举报

Lv2.观梦者

梦石
0
星屑
375
在线时间
40 小时
注册时间
2018-12-23
帖子
127
8
 楼主| 发表于 2019-1-11 20:03:43 | 只看该作者
tseyik 发表于 2019-1-11 15:16
給你的挿件,不是己有七個常用的嗎?

上次我没用你这个插件……用的yep的图片公共事件……
啦啦啦,这里小萌新一枚。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
375
在线时间
40 小时
注册时间
2018-12-23
帖子
127
9
 楼主| 发表于 2019-1-11 20:05:19 | 只看该作者
tseyik 发表于 2019-1-11 15:25
Mobile Game User Interface(手機用介面
https://forums.rpgmakerweb.com/index.php?threads/mobile-game-u ...

我一只用的yep系列插件,不知道会不会冲突……暂时先不用这个,先自己研究下代码再说
啦啦啦,这里小萌新一枚。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
230
在线时间
21 小时
注册时间
2019-1-12
帖子
23
10
发表于 2019-1-12 22:22:32 | 只看该作者
楼主求你那个在地图上加图标调用公共事件的方法
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-7 04:44

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表