Sveiki visi. Šiandien apžvelgsime, kaip parengti projektą naudojant sdl2 biblioteką, kad būtų galima paleisti žaidimą „Android“.
Pirmiausia turite atsisiųsti Android Studio, įdiegti ją ir viską, ko reikia šioje kūrimo aplinkoje. Pavyzdžiui, dabar turiu Kde Neon, o šioje sistemoje yra failas /etc/environment, tas pats failas yra ir ubuntu. Ten reikia įvesti šiuos kintamuosius.
ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk
Taip pat turite atsisiųsti NDK iš oficialios svetainės, išpakuoti jį į savo namų katalogą ir pervadinti į NDK. Tada turite atsisiųsti SDL2 biblioteką iš svetainės
Norėdami nuskaityti failus „Android“ iš išteklių, turite naudoti SDL_RWops funkcijas. Čia pateikiamas darbo su šriftu naudojimo kode pavyzdys. Šiuo atveju negalime naudoti FT_New_Face, bet vietoj to naudosime FT_New_Memory_Face, kad naudotume jau nuskaitytus duomenis.
#ifdef __ANDROID__
snprintf ( path, 254, "fonts/%s", file );
SDL_RWops *rw = SDL_RWFromFile(path, "r" );
char *memory = ( char * ) calloc ( rw->hidden.androidio.size, 1 );
SDL_RWread(rw, memory, 1, rw->hidden.androidio.size );
FT_New_Memory_Face(*this->ft_library, ( const FT_Byte * )memory, rw->hidden.androidio.size, 0, &this;->face );
SDL_RWclose(rw);
free ( memory );
#else
snprintf ( path, 254, "%s/fonts/%s", DEFAULT_ASSETS, file );
if ( access ( path, F_OK ) ) {
fprintf ( stderr, "not found font: %sn", path );
exit ( EXIT_FAILURE );
}
struct stat st;
stat ( path, &st; );
FILE *rw = fopen ( path, "r" );
char *memory = ( char * ) calloc ( st.st_size, 1 );
fread ( memory, 1, st.st_size, rw );
FT_New_Memory_Face ( *this->ft_library, ( const FT_Byte * ) memory, st.st_size, 0, &this;->face );
fclose ( rw );
free ( memory );
#endif
Taip pat sukūriau antraštės failą SDL2 antraštėms prijungti. Norint, kad kompiliavimas būtų sėkmingas „Android“, reikalingas NO_SDL_GLEXT.
#ifdef __ANDROID__
#include "SDL.h"
#include "SDL_video.h"
#include "SDL_events.h"
#define NO_SDL_GLEXT
#include "SDL_opengl.h"
#include "SDL_opengles2.h"
#else
#include <SDL2/SDL.h>
#include <SDL2/SDL_video.h>
#include <SDL2/SDL_opengl.h>
#include <SDL2/SDL_opengles2.h>
#endif
Taigi projektas paruoštas, šešėliai paruošti Opengl Es 3.0. Dabar turime sukurti „Android“ projektą. Norėdami tai padaryti, išpakuokite SDL2 archyvą. Eikite į kūrimo scenarijus. Ir mes tai darome taip.
./androidbuild.sh com.xverizex.test main.cpp
Pasirodys toks pranešimas.
To build and install to a device for testing, run the following:
cd /home/cf/programs/SDL2-2.0.10/build/com.xverizex.test
./gradlew installDebug
Eikite į com.xverizex.test. Eikite į com.xverizex.test/app/jni/src. Nukopijuojame savo žaidimo projektą. Ir keičiame Android.mk failą, mano atveju jis atrodo taip.
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := main
SDL_PATH := ../SDL
FREETYPE_PATH := ../Freetype2
LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(SDL_PATH)/include $(LOCAL_PATH)/$(FREETYPE_PATH)/include
# Add your application source files here...
LOCAL_SRC_FILES := ./engine/lang.cpp ./engine/actor.cpp ./engine/sprite.cpp ./engine/shaders.cpp ./engine/box.cpp ./engine/menubox.cpp ./engine/load_manager.cpp ./engine/main.cpp ./engine/font.cpp ./engine/model.cpp ./engine/button.cpp ./theme.cpp ./level_manager.cpp ./menu/menu.cpp
LOCAL_SHARED_LIBRARIES := SDL2 Freetype2
LOCAL_LDLIBS := -lGLESv1_CM -lGLESv2 -llog
include $(BUILD_SHARED_LIBRARY)
Kaip jau galbūt pastebėjote, įtraukiu ir Freetype2 biblioteką. Radau paruoštą github, skirtą android, bet jis neveikė, reikėjo kažką keisti. Taip pat sukuriame katalogą app/src/main/assets. Jame talpiname savo išteklius (šriftus, sprites, 3D modelius).
Dabar sukonfigūruokime „Freetype2“, skirtą „Android“. Atsisiųsti iš mano github
Šaltinis: www.habr.com