SNES 与 NES 游戏模拟机区别与 SNES Classic界面实现,
生活随笔
收集整理的這篇文章主要介紹了
SNES 与 NES 游戏模拟机区别与 SNES Classic界面实现,
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?
視頻演示地址:https://www.ixigua.com/6860860547747971587/
?
?
?
選擇有飛框效果,支持進(jìn)度保存與加載。每個(gè)游戲有4個(gè)進(jìn)度保存框。
?
?
關(guān)于SNES與NES的界面區(qū)別
SNES比NES界面的主要區(qū)別在與SNES的選中框是居中顯示的,并且并不會改變位置,永遠(yuǎn)都是居中的。
那如果想實(shí)現(xiàn)其實(shí)現(xiàn)這樣的效果要怎么樣才可以實(shí)現(xiàn)呢?
其實(shí)這個(gè)選中框在中間很好實(shí)現(xiàn),我們只要把一張圖片放在正中間就可以實(shí)現(xiàn)這樣的選中效果。
用FrameLayout, 主界面分為了幾層,選中圖片在最上層,這樣我們就可以做到選中框永遠(yuǎn)都在中間的效果。
?
然后游戲模擬器我們用的是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);} }?
以上是模擬器的相關(guān)代碼,朋友可以在評論下方留言交流。
?
?
?
QQ:514540005
虎躍工作室:http://www.mediadrm360.com/
總結(jié)
以上是生活随笔為你收集整理的SNES 与 NES 游戏模拟机区别与 SNES Classic界面实现,的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 养生之道?阴阳平衡也!
- 下一篇: ECharts 饼图切换数据源bug 开