当前位置:
首页 >
SNES 与 NES 游戏模拟机区别与 SNES Classic界面实现,
发布时间:2024/1/8
44
豆豆
生活随笔
收集整理的这篇文章主要介绍了
SNES 与 NES 游戏模拟机区别与 SNES Classic界面实现,
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
视频演示地址:https://www.ixigua.com/6860860547747971587/
选择有飞框效果,支持进度保存与加载。每个游戏有4个进度保存框。
关于SNES与NES的界面区别
SNES比NES界面的主要区别在与SNES的选中框是居中显示的,并且并不会改变位置,永远都是居中的。
那如果想实现其实现这样的效果要怎么样才可以实现呢?
其实这个选中框在中间很好实现,我们只要把一张图片放在正中间就可以实现这样的选中效果。
用FrameLayout, 主界面分为了几层,选中图片在最上层,这样我们就可以做到选中框永远都在中间的效果。
然后游戏模拟器我们用的是snes9x,
#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);} }
以上是模拟器的相关代码,朋友可以在评论下方留言交流。
QQ:514540005
虎跃工作室:http://www.mediadrm360.com/
总结
以上是生活随笔为你收集整理的SNES 与 NES 游戏模拟机区别与 SNES Classic界面实现,的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 养生之道?阴阳平衡也!
- 下一篇: ECharts 饼图切换数据源bug 开