琵琶行论坛

 找回密码
 注册
每日签到论坛FTP使用教学领取红包(开放!)论坛FTP搜索引擎
查看: 7636|回复: 56

MAME出招优化+源码(第二版)

[复制链接]

签到天数: 9 天

[LV.3]偶尔看看II

发表于 2014-4-23 15:51:48 | 显示全部楼层 |阅读模式
本帖最后由 gsc2007 于 2016-10-25 16:09 编辑

出招优化是针对键盘的,具体分析可见第一版的帖子
第一版:http://f.ppxclub.com/600854-1-1
---------------------------------------------------------------
最近有空就重写了一次。现在看看自己头一次写的代码......到现在也没什么提升,哎

简要说明原理:
键盘在模拟摇杆输入时,有诸多问题。比如2个反方向可同时按下,按键冲突等等。
在单机模拟器中都是使用按键互斥原理来处理,即2个相反按键都无效化。看mame的具体实现代码:
  1.       // lock out opposing directions (left + right or up + down)
  2.         if ((m_current & (UP_BIT | DOWN_BIT)) == (UP_BIT | DOWN_BIT))
  3.            m_current &= ~(UP_BIT | DOWN_BIT);
  4.        if ((m_current & (LEFT_BIT | RIGHT_BIT)) == (LEFT_BIT | RIGHT_BIT))
  5.            m_current &= ~(LEFT_BIT | RIGHT_BIT);
复制代码
这也是单机模拟器的手感比arc和游聚硬的一个原因。
键盘模拟摇杆的理念是:至多存在2个按键信息,剔除和纠正影响操作的多余方向
本人的方案是:
1.按键互斥时,屏蔽多余的方向。
2.补充半圆输入中的缺失方向。
具体实现代码为:PS:以下为主要代码,完整改动看附件,修改点用GSC2007进行了备注,方便各位查看

  1. //***************GSC2007*******新增代码************************
  2.         if((m_current & (LEFT_BIT | RIGHT_BIT)) == (LEFT_BIT | RIGHT_BIT))
  3.         {       
  4.                 m_current &= m_current^m_previous_LEFT_or_RIGHT;//左+右同时按压时,除去干扰项m_previous_LEFT_or_RIGHT里的左输入或右输入,获得实际需要的纠正输入
  5.         }
  6.         else if(m_current & (LEFT_BIT | RIGHT_BIT))
  7.         {
  8.                 m_previous_LEFT_or_RIGHT = m_current & (LEFT_BIT | RIGHT_BIT);        //只记录左or右未同时按压时的左输入或右输入
  9.         }       

  10.         if((m_current & (UP_BIT | DOWN_BIT)) == (UP_BIT | DOWN_BIT))
  11.         {
  12.                 m_current &= m_current^m_previous_UP_or_DOWN;        //同上。
  13.         }
  14.         else if(m_current & (UP_BIT | DOWN_BIT))
  15.         {
  16.                 m_previous_UP_or_DOWN = m_current & (UP_BIT | DOWN_BIT);        //同上。
  17.         }                       

  18.         if(  ((m_current ==(LEFT_BIT | DOWN_BIT)) &&(m_previous ==(RIGHT_BIT | DOWN_BIT)))||((m_current ==(RIGHT_BIT | DOWN_BIT)) &&(m_previous ==(LEFT_BIT | DOWN_BIT))) ||((m_current ==(RIGHT_BIT | UP_BIT)) &&(m_previous ==(LEFT_BIT | UP_BIT)))||((m_current ==(LEFT_BIT | UP_BIT)) &&(m_previous ==(RIGHT_BIT | UP_BIT))))
  19.         {
  20.                 m_current &= ~(LEFT_BIT | RIGHT_BIT);//输入左下,右下时,纠正为左下,下等。。。屏蔽左右,补全下上输入
  21.         }
  22.        
  23.         if(  ((m_current ==(LEFT_BIT | DOWN_BIT)) &&(m_previous ==(LEFT_BIT | UP_BIT)))||((m_current ==(RIGHT_BIT | DOWN_BIT)) &&(m_previous ==(RIGHT_BIT | UP_BIT))) ||((m_current ==(RIGHT_BIT | UP_BIT)) &&(m_previous ==(RIGHT_BIT | DOWN_BIT)))||((m_current ==(LEFT_BIT | UP_BIT)) &&(m_previous ==(LEFT_BIT | DOWN_BIT))))
  24.         {
  25.                 m_current &= ~(UP_BIT | DOWN_BIT);//同上。屏蔽下上,补全左右输入
  26.         }
  27.                
  28.        
  29. //***************GSC2007******结束*************************       

  30.         if ((m_current & (UP_BIT | DOWN_BIT)) == (UP_BIT | DOWN_BIT))
  31.                 m_current &= ~(UP_BIT | DOWN_BIT);
  32.         if ((m_current & (LEFT_BIT | RIGHT_BIT)) == (LEFT_BIT | RIGHT_BIT))
  33.                 m_current &= ~(LEFT_BIT | RIGHT_BIT);               
复制代码

修改的源码文件: MAME出招优化第二版src.7z (43.54 KB, 下载次数: 57, 售价: 10 元PP)

评分

4

查看全部评分

签到天数: 994 天

[LV.10]以坛为家III

发表于 2014-4-23 16:20:31 | 显示全部楼层
扩充了整圆,赞!!!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2014-4-23 18:30:07 | 显示全部楼层
支持。
回复 支持 反对

使用道具 举报

签到天数: 1 天

[LV.1]初来乍到

发表于 2014-4-23 20:09:05 | 显示全部楼层
利害..我完全看不懂!!!
回复 支持 反对

使用道具 举报

签到天数: 1976 天

[LV.Master]伴坛终老

发表于 2014-4-26 12:22:55 | 显示全部楼层
试了一下貌似效果不错
回复 支持 反对

使用道具 举报

签到天数: 9 天

[LV.3]偶尔看看II

 楼主| 发表于 2014-4-26 12:34:36 | 显示全部楼层
回复 支持 反对

使用道具 举报

签到天数: 1976 天

[LV.Master]伴坛终老

发表于 2014-4-27 14:57:39 | 显示全部楼层
本帖最后由 Creamymami 于 2014-4-27 18:22 编辑
gsc2007 发表于 2014-4-26 12:34
FBAS能加这个就好了。省得用MAME


fba中input是在每个游戏驱动的frame中处理的,如果需要修改每个驱动去添加这个功能,维护太麻烦
回复 支持 反对

使用道具 举报

签到天数: 9 天

[LV.3]偶尔看看II

 楼主| 发表于 2014-4-27 20:03:58 | 显示全部楼层
Creamymami 发表于 2014-4-27 14:57
fba中input是在每个游戏驱动的frame中处理的,如果需要修改每个驱动去添加这个功能,维护太麻烦

这功能哪里需要维护啊
回复 支持 反对

使用道具 举报

签到天数: 1976 天

[LV.Master]伴坛终老

发表于 2014-4-27 20:54:58 | 显示全部楼层
本帖最后由 Creamymami 于 2014-4-27 22:41 编辑
gsc2007 发表于 2014-4-27 20:03
这功能哪里需要维护啊


主要是要修改不少文件,同步官方的时候也需要同步更新,另外,我测试了下在fbas中的效果貌似不太明显
回复 支持 反对

使用道具 举报

签到天数: 15 天

[LV.4]偶尔看看III

发表于 2014-4-28 16:36:05 | 显示全部楼层
对MAME了解甚少 一直很喜欢WK模拟器 现在看来 为了出招 应该换换了
回复 支持 反对

使用道具 举报

签到天数: 15 天

[LV.4]偶尔看看III

发表于 2014-4-28 16:41:24 | 显示全部楼层
是不是第二版比第一版优化的还要好啊? 这样就直接第二版就可以了吧  花了好多积分哦
回复 支持 反对

使用道具 举报

签到天数: 3 天

[LV.2]偶尔看看I

发表于 2014-4-28 18:28:55 | 显示全部楼层
主要有影响的是什么游戏呢,比如kof2k1之前的基本无问题,月华2和kof02是区分模拟器大半圈出招优化好不好的两个常见游戏,Nebula可以出,未改过的Mame好像也可以,WK和NRX不行。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|琵琶行论坛 ( 赣ICP备12000882号 )

GMT+8, 2019-5-24 09:00 , Processed in 0.025913 second(s), 12 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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