一个类月光宝盒应用,把手机,电视,盒子变家庭游戏机
支持FBA,MAME,N64,PS1,FC,MD等

自适应各种分辨率,不用担心分辨率问题。

视频演示地址:https://v.youku.com/v_show/id_XNDcxMzM0MjU0OA==.html

游戏可根据需要进行定制生成

开源版本fba for android:https://github.com/weinyzhou/afba

#include <jni.h>
#include <android/log.h>
#include "android.h"
#include <SDL.h>extern void SDL_Android_Init(JNIEnv* env, jclass cls);
static jclass pActivityClass;
static JNIEnv* pEnv = NULL;
jmethodID showBar;
jmethodID hideBar;
jmethodID setBar;
jmethodID setError;jmethodID JNIgetRomsPath;
jmethodID JNIgetCachePath;
jmethodID JNIgetDataPath;
const char* rom_path;
const char* data_path;
const char* cache_path;extern int StatedLoad(int nSlot);
extern int StatedSave(int nSlot);extern "C"
{void Java_fr_mydedibox_libarcade_emulator_sdl_SDLJni_nativeInitWithArgs(JNIEnv* env, jclass cls, jobjectArray strArray);void Java_fr_mydedibox_libarcade_emulator_sdl_SDLJni_setfskip( JNIEnv *env, jobject thiz, jint n );void Java_fr_mydedibox_libarcade_emulator_sdl_SDLJni_emustop( JNIEnv *env, jobject thiz );jint Java_fr_mydedibox_libarcade_emulator_sdl_SDLJni_ispaused( JNIEnv *env, jobject thiz );void Java_fr_mydedibox_libarcade_emulator_sdl_SDLJni_pauseemu( JNIEnv *env, jobject thiz );void Java_fr_mydedibox_libarcade_emulator_sdl_SDLJni_resumeemu( JNIEnv *env, jobject thiz );jint Java_fr_mydedibox_libarcade_emulator_sdl_SDLJni_getslotnum( JNIEnv *env, jobject thiz );void Java_fr_mydedibox_libarcade_emulator_sdl_SDLJni_statesave( JNIEnv *env, jobject thiz, jint statenum );void Java_fr_mydedibox_libarcade_emulator_sdl_SDLJni_stateload( JNIEnv *env, jobject thiz, jint statenum );void Java_fr_mydedibox_libarcade_emulator_sdl_SDLJni_setPadData( JNIEnv *env, jobject thiz, jint i, jlong jl );
}void Java_fr_mydedibox_libarcade_emulator_sdl_SDLJni_nativeInitWithArgs(JNIEnv* env, jclass cls, jobjectArray strArray)
{int status, i;SDL_Android_Init(env, cls);pEnv = env;pActivityClass = (jclass)env->NewGlobalRef(cls);JNIgetRomsPath = env->GetStaticMethodID( pActivityClass, "getRomsPath","()Ljava/lang/String;" );jstring rompath = (jstring)env->CallStaticObjectMethod( pActivityClass, JNIgetRomsPath );rom_path = env->GetStringUTFChars( rompath, 0 );JNIgetDataPath = env->GetStaticMethodID( pActivityClass, "getDataPath","()Ljava/lang/String;" );jstring datapath = (jstring)env->CallStaticObjectMethod( pActivityClass, JNIgetDataPath );data_path = env->GetStringUTFChars( datapath, 0 );showBar = env->GetStaticMethodID( pActivityClass, "showProgressBar","(Ljava/lang/String;I)V" );hideBar = env->GetStaticMethodID( pActivityClass, "hideProgressBar","()V" );setBar = env->GetStaticMethodID( pActivityClass,"setProgressBar","(Ljava/lang/String;I)V" );setError = env->GetStaticMethodID( pActivityClass, "setErrorMessage","(Ljava/lang/String;)V" );jsize len = env->GetArrayLength( strArray );const char *argv[len];argv[0] = strdup( "aFBA" );for( i=0; i<len; i++ ){jstring str = (jstring)env->GetObjectArrayElement(strArray,i);argv[i+1] = env->GetStringUTFChars( str, 0 );}android_pause = 0;android_quit = 0;android_fskip = 0;//android_rotate = 1;     // add_shinstatus = SDL_main(i+1, (char **)argv);
}const char *getRomsPath()
{return rom_path;
}const char *getDataPath()
{return data_path;
}void Java_fr_mydedibox_libarcade_emulator_sdl_SDLJni_setfskip( JNIEnv *env, jobject thiz, jint n )
{android_fskip = n;
}void Java_fr_mydedibox_libarcade_emulator_sdl_SDLJni_emustop( JNIEnv *env, jobject thiz )
{android_quit = 1;
}jint Java_fr_mydedibox_libarcade_emulator_sdl_SDLJni_ispaused( JNIEnv *env, jobject thiz )
{return android_pause;
}void Java_fr_mydedibox_libarcade_emulator_sdl_SDLJni_pauseemu( JNIEnv *env, jobject thiz )
{android_pause = 1;
}void Java_fr_mydedibox_libarcade_emulator_sdl_SDLJni_resumeemu( JNIEnv *env, jobject thiz )
{android_pause = 0;
}jint Java_fr_mydedibox_libarcade_emulator_sdl_SDLJni_getslotnum( JNIEnv *env, jobject thiz )
{return 0;
}void Java_fr_mydedibox_libarcade_emulator_sdl_SDLJni_statesave( JNIEnv *env, jobject thiz, jint statenum )
{StatedSave( statenum );
}void Java_fr_mydedibox_libarcade_emulator_sdl_SDLJni_stateload( JNIEnv *env, jobject thiz, jint statenum )
{StatedLoad( statenum );
}void Java_fr_mydedibox_libarcade_emulator_sdl_SDLJni_setPadData( JNIEnv *env, jobject thiz, jint i, jlong jl )
{unsigned long l = (unsigned long)jl;android_pad_test = (l & ANDROID_TEST);android_pad_service = (l & ANDROID_SERVICE);android_pad_reset = (l & ANDROID_RESET);android_pad_coins = (l & ANDROID_COINS);android_pad_start = (l & ANDROID_START);android_pad_up = (l & ANDROID_UP);android_pad_down = (l & ANDROID_DOWN);android_pad_left = (l & ANDROID_LEFT);android_pad_right = (l & ANDROID_RIGHT);android_pad_1 = (l & ANDROID_1);android_pad_2 = (l & ANDROID_2);android_pad_3 = (l & ANDROID_3);android_pad_4 = (l & ANDROID_4);android_pad_5 = (l & ANDROID_5);android_pad_6 = (l & ANDROID_6);
}void setErrorMsg( char *msg )
{if( setError ){pEnv->CallStaticVoidMethod( pActivityClass, setError, pEnv->NewStringUTF(msg) );}
}void progressBarShow(char *name, int size)
{if(showBar){pEnv->CallStaticVoidMethod( pActivityClass, showBar, pEnv->NewStringUTF(name), size );}
}void progressBarUpdate(char *msg, int pos)
{if (setBar) {pEnv->CallStaticVoidMethod( pActivityClass, setBar, pEnv->NewStringUTF(msg), pos );}
}void progressBarHide(void)
{if(hideBar){pEnv->CallStaticVoidMethod( pActivityClass, hideBar);}
}

afba是我根据网上开源版本修正,可正常编译运行的一个版本,这个版本性能不高,但是勉强可以正常游戏,喜欢折腾研究的朋友可以下载观摩,对你有帮助的记得点星。使用的是SDL+FBA的方式.

另外如果有朋友需要我深度优化的商业版本的话,可以私信联系。

QQ:514540005
虎跃工作室:http://www.mediadrm360.com/

一个类月光宝盒应用,把手机,电视,盒子变家庭游戏机(FBA,FBNEO,MAME)相关推荐

  1. 关于电视盒子/XBOX/手机使用kodi访问局域网下的windows电脑文件/电影

    准备工作 首先在你需要访问的设备下一个kodi软件,不论是电视盒子还是xbox 电视盒子就用U盘下一个kodi的apk安装包,然后查一下自己的电视怎么安装外部软件,我家的海信电视是需要在设置打开展示模 ...

  2. android 盒子排名,2021电视盒子排名:业内公认最好用的五大电视盒子

    客厅娱乐的发展,一个可以支撑起客厅的电视盒子就显得非常的重要,但是很多用户对于电视盒子的技术乃至产品参数都不是很了解,所以小编给大家列了一个2021电视盒子排名,希望业内最好用的五大热门机型能给大家一 ...

  3. android盒子改造,废旧手机改造成电视盒子详细教程

    话说现在的手机配置越来越高,比起盒子也没差到哪儿去,再加上本来也是同属安卓阵营的产品,闲置了可惜,卖了又不值钱,送人也没人要,那么何不废物利用一下呢. 有人会发现,其实除了每家盒子自定的固件rom,公 ...

  4. android网络盒子改,有什么办法可以把淘汰下来的安卓手机改造成电视盒子用?...

    基本上谁家都会有一两部旧的手机,其实并不是不能用或者坏了,只是配置有些低.我们只需要简单改造一下,就可以将旧手机改造成电视盒子,而且比普通的网络盒子性能更强大. 有线方式 我们需要准备一根MHL线,大 ...

  5. android平板改成电视盒子,【当贝市场】废旧手机改造成电视盒子详细教程

    原标题:[当贝市场]废旧手机改造成电视盒子详细教程 话说现在的手机配置越来越高,比起盒子也没差到哪儿去,再加上本来也是同属安卓阵营的产品,闲置了可惜,卖了又不值钱,送人也没人要,那么何不废物利用一下呢 ...

  6. 咪咕盒子链接服务器失败_【沙发管家】教你解决电视盒子使用时遇到的问题。|电视盒子|沙发管家|手机|智能电视|路由器|安卓系统...

    电视盒子因外观好看,反应速度快,而且内容丰富,一直都深受大众喜爱,但是因为安卓系统的通病,在使用一段时间之后,电视盒子总会出现一些问题,今天小编整理了一些电视盒子在使用过程中会遇到的问题,以及最有效的 ...

  7. android网络盒子改,废旧手机改造成电视盒子详细教程

    话说现在的手机配置越来越高,比起盒子也没差到哪儿去,再加上本来也是同属安卓阵营的产品,闲置了可惜,卖了又不值钱,送人也没人要,那么何不废物利用一下呢. 有人会发现,其实除了每家盒子自定的固件rom,公 ...

  8. NAS服务器局域网内IPad、手机、电视盒子等联网播放

    为把各个移动硬盘和不同电脑的数据进行统一管理,入手了一台希捷 Seagate Business 无内置硬盘 商业级 2盘位 云存储网路存储,经过卖家指点和不断摸索,终于能用了,主要步骤如下: 1. 系 ...

  9. android 电视 网上邻居,手机要怎么连接安卓智能电视或电视盒子

    原标题:手机要怎么连接安卓智能电视或电视盒子 手机是人们生活中离不开的物品,然而如何手机连接智能电视或电视盒子呢?连接上,才能用手机操作智能电视或者电视盒子,这样就方便很多,那么手机如何连接智能电视/ ...

最新文章

  1. python找不到tushare_python tushare
  2. 数字图像处理的就业前景
  3. 9.JAVA之GUI编程列出指定目录内容
  4. VMware Pro 14.1.2 官方正式版及激活密钥
  5. Linux内存管理 brk(),mmap()系统调用源码分析1:基础部分
  6. Java9 新特性 详解
  7. bootstraptable 一条数据跨行_据说它是唐山市拥有奶茶店最多的一条街,你一定也逛过!...
  8. poj 1011 - sticks - dfs + 剪枝
  9. 炮灰模型:对女生选择追求者的数学模型的建立-转
  10. linux 命令行 过滤,linux过滤命令
  11. 实验5 类的继承、派生和多态
  12. 一个创业失败案例的复盘
  13. 金山词霸每日一句开放平台 .NET demo
  14. 自动生成Changelog
  15. 偏航角、俯仰角、横滚角的理解
  16. MT6763 N1 色温模式功能的实现,手动调节色温。
  17. Java操作excel文件插入数据
  18. mybatis、mysql使用函数实现英文模糊查询中文的功能
  19. 拼多多将追回不当订单;微信公布2018年辟谣成果;“多闪”正式上线App Store | 雷锋早报...
  20. android 电视盒子项目外包

热门文章

  1. 小米高通系列清串号打开写号端口工具_手机sn码序列号修改工具,高通串号永久写入!...
  2. c语言程序设计精髓 第14周练兵题
  3. 防火墙阻止tftp_H3C防火墙常见问题汇总
  4. 《机器学习》课后习题 3.4 选择两个 UCI 数据集,比较 10 折交叉验证法和留 法所估计出的对率回归的错误率.
  5. K8S 创建 Deployment
  6. 为什么说阿里云和亚马逊云对比,阿里云的性价比比较低?
  7. 数值重映射方法(Remap)
  8. 解决移动端滑动方向相反
  9. 如何快速为视频添加ai字幕的解决方案
  10. 备忘录模式(设计模式_20)